-<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="MavenProjectsManager">
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="PersistenceUnitSettings">
+ <persistence-units>
+ <persistence-unit name="Default">
+ <packages>
+ <package value="hu.user.lis.app" />
+ </packages>
+ <entities>
+ <entity value="hu.user.lis.db.Partner" />
+ <entity value="hu.user.lis.db.Project" />
+ <entity value="hu.user.lis.db.Invoice" />
+ <entity value="hu.user.lis.db.Associate" />
+ <entity value="hu.user.lis.db.ProjectAssociate" />
+ <entity value="hu.user.lis.db.ServiceRecord" />
+ <entity value="hu.user.lis.db.ProjectStatus" />
+ <entity value="hu.user.lis.db.EDocument" />
+ </entities>
+ </persistence-unit>
+ </persistence-units>
+ </component>
+</project>
\ No newline at end of file
* auth/ldap ldap:fds.in.useribm.hu:389,ldaps:fds.useribm.hu:636
*Lista rendezés a projek szerkesztőn belül
--Projekt résztvevő társítás nem eredményez projekt validálást, mentés gomb inaktív marad
--Projekt számla társítás vagy módosítás nem eredményez projekt validálást, mentés gomb inaktív marad
--Modositott treasury mentésre kerül a projekt mentés gomb aktív lesz, de ha mégseme gombot nyomok akkor is megőrződnek a változtatások
--Fájl feltöltes nem műkodik sehol
+*Projekt résztvevő társítás nem eredményez projekt validálást, mentés gomb inaktív marad
+*Projekt számla társítás vagy módosítás nem eredményez projekt validálást, mentés gomb inaktív marad
+*Modositott treasury mentésre kerül a projekt mentés gomb aktív lesz, de ha mégseme gombot nyomok akkor is megőrződnek a változtatások
+*Fájl feltöltes nem műkodik sehol
autorizacio
-nav
+nav integracio
szamla erkeztetes camunda: egy felasznalohoz jon be, projekthez lehessen csatolni, projektszanot ellenorizze
-
+- legyen felhasználó specifikus beállításokra lehetőség
+- Táblázatok: oszlopszélesség állítható és rendezhető legyen (minden oszlopra) mencse el a felhasználó preferenciához.
- Számla kiegyenlítés
- Autentikáció: AD és helyi
-- legyen felhasználó specifikus beállításokra lehetőség
- - Táblázatok: oszlopszélesség állítható és rendezhető legyen (minden oszlopra) mencse el a felhasználó preferenciához.
- droppable="head" draggable="head" https://zkfiddle.org/sample/4k499d/1-Reorder-Columns-in-Listbox#source-2
- Minden kívülről leszipkázható adat jöjjön módosítható legyen REST API-n: szla kiegyenlítés, bejövő/kimenő számlák, munkalap
- Plugin: lehet egyedi testreszabási igény, de ennek valahogy el kell teljesen különülnie a "core" forráskódtól. Pl. javascript motort be lehetne építeni, a szkriptek pedig meghatározott pontokon lehetnének becsatolva a logikába. Számla részletezés volt a példa (10000EUR számla 3 részletben forintban, kérdés mennyi pl. az utsó számla összege); 10 custom mező, javascripttel futna a custom mezők módosítására.
+treasury hozzáadása után (project mentés előtt) legyen árrés kalkuláció
+
+XXX 20230817
+--hosszútávon: cégnév v adószám alapján adatok letöltése publikus cégadatbázisból
+--mindenhol lehessen törölni, legfejlebb a db szól
+--project ID - párhuzamos generálás kezelése
+--forintról visszaváltva pl. USD-re reset az áfá-n
+-számla dátumok egyenlőek is lehetnek, a fizetési határidő a legnagyobb (tisztázni pontosan)
+--munkalapnál csak az a projekt jelenjen meg amihez hozzá van rendelve, és a belépett felhasználó
+-a ráfordítás nem veszi figyelembe a munka ráfordítást
+-camunda beepitese: szamla erkeztetes, elszoszor szamlakep csatolas, majd approve
+
+-Schnellbach: NAV-tól letölteni a számlákat
+ számla iktatás funkció: lehúzzuk a nekünk kiállított számlát + pdf csatolás + kézzel projekthez (később találja ki, hogy automatikusan)
+ -queue: néhány kolléga éri
+ -jóváhagyás
+
+
+-zkoss riporting!!
+
+call árpi 14!
+
DOCKER
-docker run -itd --name lis --privileged=true -p 50000:50000 -e LICENSE=accept -e DB2INSTANCE=db2admin -e DB2INST1_PASSWORD=password -e DBNAME=lis -e PERSISTENT_HOME=true -v /Docker:/database ibmcom/db2
+docker run -itd --name lis --privileged=true -p 50000:50000 -e LICENSE=accept -e DB2INSTANCE=db2admin -e DB2INST1_PASSWORD=password -e DBNAME=lis -e PERSISTENT_HOME=false -v /Docker:/database ibmcom/db2
docker logs -f lis
docker exec -it lis bash
docker stop lis
MIGRATE
migrate new create profile --idpattern=000
+
+
+Move data
+----------
+https://community.ibm.com/community/user/datamanagement/discussion/db2-docker-persistent-volume
\ No newline at end of file
<artifactId>silvertail</artifactId>
<version>${zk.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.zkoss.theme</groupId>
+ <artifactId>breeze</artifactId>
+ <version>${zk.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.zkoss.theme</groupId>
+ <artifactId>iceblue_c</artifactId>
+ <version>${zk.version}</version>
+ </dependency>
<dependency>
<groupId>org.zkoss.theme</groupId>
<artifactId>sapphire</artifactId>
ProjectStatusRepository projectStatusRepository;
private boolean activeOnly;
- public ProjectStatusDataModel() {
- listAll();
- }
-
@Override
public List<ProjectStatus> getResultSet(int page, int pageSize, FieldComparator sortComparator) {
List<ProjectStatus> result;
}
public Project createNew() {
- String humanId = generateHumanId();
ProjectStatus projectStatus = projectStatusDataModel.getDefault();
return Project.builder()
.projectStatus(projectStatus)
- .humanId(humanId)
.incomingInvoices(new HashSet<>())
.outgoingInvoices(new HashSet<>())
.treasuries(new HashSet<>())
.build();
}
- private String generateHumanId() {
+ public String generateHumanId() {
String yearSearch = String.format("%s-%%", Year.now().getValue());
Project lastInYear = projectRepository.findFirstByHumanIdLikeOrderByHumanIdDesc(yearSearch);
int sortOrder = 0;
import lombok.Setter;
import lombok.extern.log4j.Log4j2;
import org.apache.commons.lang3.StringUtils;
+import org.springframework.transaction.annotation.Transactional;
import org.zkoss.bind.BindUtils;
import org.zkoss.bind.annotation.*;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.select.annotation.WireVariable;
import org.zkoss.zk.ui.util.Clients;
-import org.zkoss.zul.Center;
+import org.zkoss.zk.ui.util.Notification;
import org.zkoss.zul.Panel;
import org.zkoss.zul.Window;
@Init
public void init() {
super.init();
+ projectStatusDataModel.listActive();
}
@AfterCompose
associatesDataModel.listAll();
}
+ @Transactional
+ private void saveProject(Component notif) {
+ boolean notify = false;
+ if (Objects.isNull(getFormDocument().getId())) {
+ getFormDocument().setHumanId(projectsDataModel.generateHumanId());
+ notify = true;
+ }
+ projectsDataModel.save(getFormDocument());
+
+ if (notify) {
+ String msg = String.format("Sikeres projekt létrehozás %s azonosítóval.", getFormDocument().getHumanId());
+ Notification.show(msg, "info", notif, "after_start", 3000, true);
+ }
+ }
+
@Command
- public void onEndEdit(@BindingParam("target") Window target, @BindingParam("save") boolean save) {
+ public void onEndEdit(@BindingParam("target") Window target, @BindingParam("save") boolean save, @BindingParam("notif") Component notif) {
if (save && isSaveEnabled()) {
- projectsDataModel.save(getFormDocument());
+ saveProject(notif);
if (isAssociatesChanged()) {
projectAssociatesDataModel.updateAssociates(getFormDocument(), formAssociates);
}
}
@Command
- public void onOpenFormPanel(@BindingParam("parentPanel") Center parentPanel) {
- log.info("Panel open/close");
+ public void onOpenFormPanel(@BindingParam("parentPanel") Component parentPanel) {
parentPanel.invalidate();
}
@Command
- public void onClickFormPanel(@BindingParam("parentPanel") Center parentPanel, @BindingParam("panel") Panel panel) {
- log.info("Panel click");
+ public void onClickFormPanel(@BindingParam("parentPanel") Component parentPanel, @BindingParam("panel") Panel panel) {
panel.setOpen(!panel.isOpen());
parentPanel.invalidate();
}
import hu.user.lis.db.Associate;
import hu.user.lis.db.Project;
import hu.user.lis.db.ServiceRecord;
+import hu.user.lis.ui.auth.CurrentProfile;
import hu.user.lis.ui.editor.common.EntityEditorModel;
import lombok.Getter;
import lombok.Setter;
import org.zkoss.bind.annotation.*;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.event.UploadEvent;
+import org.zkoss.zk.ui.select.annotation.WireVariable;
import org.zkoss.zul.Messagebox;
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.util.Date;
import java.util.Objects;
@Log4j2
@Getter
@Setter
public class ServiceRecordEditorModel extends EntityEditorModel<ServiceRecord> {
+ @WireVariable
+ CurrentProfile currentProfile;
@Init
public void init() {
@AfterCompose
public void onAfterCompose(@ContextParam(ContextType.VIEW) Component view) {
+ if (Objects.isNull(getFormDocument().getId())) {
+ getFormDocument().setAssociate(currentProfile.getAssociate());
+ getFormDocument().setWorkDay(Date.from(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant()));
+ }
getEntitySelectorRouter().setFormDocument(Associate.class, getFormDocument(), "associate");
getEntitySelectorRouter().setFormDocument(Project.class, getFormDocument(), "project");
}
Constants.NAV_SERVICE_RECORDS, SERVICE_RECORDS_LIST,
Constants.NAV_SETTINGS, SETTINGS_LIST
);
+
@WireVariable
BuildProperties buildProperties;
+
@WireVariable
SessionSettings sessionSettings;
+
@WireVariable
EventBus eventBus;
import org.zkoss.bind.annotation.BindingParam;
import org.zkoss.bind.annotation.Command;
import org.zkoss.bind.annotation.Init;
+import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.select.annotation.VariableResolver;
import org.zkoss.zk.ui.select.annotation.WireVariable;
import org.zkoss.zk.ui.util.Clients;
import org.zkoss.zkplus.spring.DelegatingVariableResolver;
+import org.zkoss.zul.Panel;
@Log4j2
@VariableResolver(DelegatingVariableResolver.class)
@WireVariable
@Getter
ProjectStatusDataModel projectStatusDataModel;
-
+
@Getter
private ProjectStatus selectedProjectStatus;
log.info("Initialized");
}
+ @Command
+ public void onOpenFormPanel(@BindingParam("parentPanel") Component parentPanel) {
+ parentPanel.invalidate();
+ }
+
+ @Command
+ public void onClickFormPanel(@BindingParam("parentPanel") Component parentPanel, @BindingParam("panel") Panel panel) {
+ panel.setOpen(!panel.isOpen());
+ parentPanel.invalidate();
+ }
+
@Command
public void onMoveUp() {
projectStatusDataModel.moveUp(selectedProjectStatus);
<?link rel="stylesheet" type="text/css" href="~./static/css/skeleton.css" ?>
<?link rel="stylesheet" type="text/css" href="~./static/css/webclient.css" ?>
<zk>
- <window id="associatePopup" width="60%" height="400px" closable="true"
+ <window id="associatePopup" width="60%" height="700px" closable="true"
viewModel="@id('vm') @init('hu.user.lis.ui.editor.AssociateEditorModel')">
<caption label="Munkatárs szerkesztés"/>
<borderlayout>
<label value="Név"/>
<textbox hflex="true" instant="true" value="@bind(vm.formDocument.name) @validator(vm)"
forward="onOK=submit.onClick, onCancel=cancel.onClick"/>
- <label value="@load(self.previousSibling)"/>
+ <!-- <label value="@load(self.previousSibling)"/>-->
<!-- <label value="@bind(vmsgs[self.previousSibling])"/>-->
<label value="Login"/>
forward="onOK=submit.onClick, onCancel=cancel.onClick"/>
<label value="Aktív"/>
<checkbox mold="switch" checked="@bind(vm.formDocument.active) @validator(vm)"/>
+ <label value="Jogok"/>
+ <grid sclass="no-hover-grid" oddRowSclass="none"
+ forward="onOK=submit.onClick, onCancel=cancel.onClick">
+ <rows>
+ <row>
+ <checkbox label="Felhasználó adminisztráció" mold="switch" checked="true"/>
+ <checkbox label="Számla érkeztetés" mold="switch" checked="true"/>
+ <checkbox label="Számla jóváhagyás" mold="switch" checked="true"/>
+ </row>
+ </rows>
+ </grid>
+
</vlayout>
</tabpanel>
</tabpanels>
<south border="none" flex="true" style="text-align: right; padding: 10px;">
<hlayout>
<button id="cancel" label="Mégsem"
- onClick="@command('onEndEdit', target=projectEditor, save=false)"/>
+ onClick="@command('onEndEdit', target=projectEditor, save=false, notif=appHeader)"/>
<button id="submit" label="Mentés"
- onClick="@command('onEndEdit', target=projectEditor, save=true)"
+ onClick="@command('onEndEdit', target=projectEditor, save=true, notif=appHeader)"
disabled="@bind(not vm.saveEnabled)"/>
</hlayout>
</south>
}
</script>
<window vflex="true" viewModel="@id('vm') @init('hu.user.lis.ui.view.IndexViewModel')">
- <caption sclass="header">
+ <caption sclass="header" id="appHeader">
<div style="display: block">
<div style="display: inline; float: left">
<hlayout valign="middle">
<zk>
- <window vflex="true" viewModel="@id('vm') @init('hu.user.lis.ui.view.SettingsViewModel')">
+ <window id="centerPanel" vflex="true" viewModel="@id('vm') @init('hu.user.lis.ui.view.SettingsViewModel')">
<caption label="Beállítások"/>
- <borderlayout>
- <north flex="true">
- <toolbar>
- <toolbarbutton label="Fel mozgat" iconSclass="z-icon-arrow-up" onClick="@command('onMoveDown')"
- disabled="@load(empty vm.selectedProjectStatus)"/>
- <toolbarbutton label="Le mozgat" iconSclass="z-icon-arrow-down" onClick="@command('onMoveUp')"
- disabled="@load(empty vm.selectedProjectStatus)"/>
- <separator orient="vertical"/>
- <toolbarbutton label="Hozzáadás" iconSclass="z-icon-plus" onClick="@command('onCreate')"/>
- <toolbarbutton label="Törlés" iconSclass="z-icon-minus" onClick="@command('onDelete')"
- disabled="@load(empty vm.selectedProjectStatus)"/>
- </toolbar>
- </north>
- <center border="none" flex="true">
- <listbox vflex="true" model="@load(vm.projectStatusDataModel)"
- autopaging="true" pagingPosition="top" multiple="false"
- selectedItem="@bind(vm.selectedProjectStatus)">
- <listhead sizable="true">
- <listheader label="Sorrend" align="left"/>
- <listheader label="Név" align="left"/>
- <listheader label="Aktív" align="left"/>
- </listhead>
- <template name="model">
- <listitem>
- <listcell>
- <label value="@load(each.order)"/>
- </listcell>
- <listcell>
- <textbox inplace="true" width="100%" value="@bind(each.name)"
- onChange="@command('onProjectStatusChanged', entity=each)"/>
- </listcell>
- <listcell>
- <checkbox checked="@bind(each.active)"
- onCheck="@command('onProjectStatusChanged', entity=each)"/>
- </listcell>
- </listitem>
- </template>
- </listbox>
+ <panel collapsible="true" open="false" border="rounded"
+ onOpen="@command('onOpenFormPanel', parentPanel=centerPanel)">
+ <caption label="Projekt státusz" style="cursor: pointer"
+ onClick="@command('onClickFormPanel', parentPanel=centerPanel, panel=self.parent)"/>
+ <panelchildren>
+ <borderlayout height="200px">
+ <north flex="true">
+ <toolbar>
+ <toolbarbutton label="Fel mozgat" iconSclass="z-icon-arrow-up"
+ onClick="@command('onMoveDown')"
+ disabled="@load(empty vm.selectedProjectStatus)"/>
+ <toolbarbutton label="Le mozgat" iconSclass="z-icon-arrow-down"
+ onClick="@command('onMoveUp')"
+ disabled="@load(empty vm.selectedProjectStatus)"/>
+ <separator orient="vertical"/>
+ <toolbarbutton label="Hozzáadás" iconSclass="z-icon-plus" onClick="@command('onCreate')"/>
+ <toolbarbutton label="Törlés" iconSclass="z-icon-minus" onClick="@command('onDelete')"
+ disabled="@load(empty vm.selectedProjectStatus)"/>
+ </toolbar>
+ </north>
+ <center border="none" flex="true">
+ <listbox vflex="true" model="@load(vm.projectStatusDataModel)"
+ autopaging="true" pagingPosition="top" multiple="false"
+ selectedItem="@bind(vm.selectedProjectStatus)">
+ <listhead sizable="true">
+ <listheader label="Sorrend" align="left"/>
+ <listheader label="Név" align="left"/>
+ <listheader label="Aktív" align="left"/>
+ </listhead>
+ <template name="model">
+ <listitem>
+ <listcell>
+ <label value="@load(each.order)"/>
+ </listcell>
+ <listcell>
+ <textbox inplace="true" width="100%" value="@bind(each.name)"
+ onChange="@command('onProjectStatusChanged', entity=each)"/>
+ </listcell>
+ <listcell>
+ <checkbox checked="@bind(each.active)"
+ onCheck="@command('onProjectStatusChanged', entity=each)"/>
+ </listcell>
+ </listitem>
+ </template>
+ </listbox>
- </center>
- </borderlayout>
+ </center>
+ </borderlayout>
+ </panelchildren>
+ </panel>
</window>
</zk>
\ No newline at end of file