Vyúčtování služebních cest u spolucestujících lze nyní zrušit u každého zvlášť. Lze tak provést dodatečnou opravu vyúčtování.
closes #251
This commit is contained in:
@@ -60,7 +60,7 @@ public class TripBill extends BaseData implements EntityWithAttachment {
|
|||||||
@LazyCollection(LazyCollectionOption.TRUE)
|
@LazyCollection(LazyCollectionOption.TRUE)
|
||||||
@IndexedEmbedded
|
@IndexedEmbedded
|
||||||
private List<FileMetainfo> attachedFiles;
|
private List<FileMetainfo> attachedFiles;
|
||||||
@OneToOne(fetch = FetchType.EAGER)
|
@OneToOne(fetch = FetchType.EAGER, orphanRemoval = true)
|
||||||
@JoinColumn(name = "APPROVAL_ID")
|
@JoinColumn(name = "APPROVAL_ID")
|
||||||
private TripBillApproval approval;
|
private TripBillApproval approval;
|
||||||
@Column(name = "SAVED")
|
@Column(name = "SAVED")
|
||||||
|
|||||||
+13
-7
@@ -131,7 +131,8 @@ public abstract class RequirementBaseServiceImpl<T extends RequirementBase> exte
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void postAdd(T entity) {
|
protected void postAdd(T entity) {
|
||||||
if (canApprove(entity)) {
|
Workflow wf = getNextWorkflow(entity);
|
||||||
|
if (canApprove(entity) && (wf.getSignature() == null || !wf.getSignature())) {
|
||||||
approve(entity);
|
approve(entity);
|
||||||
} else {
|
} else {
|
||||||
this.sendToApprovers(entity);
|
this.sendToApprovers(entity);
|
||||||
@@ -280,7 +281,7 @@ public abstract class RequirementBaseServiceImpl<T extends RequirementBase> exte
|
|||||||
|
|
||||||
if (signedPdf != null) {
|
if (signedPdf != null) {
|
||||||
saveSignedDoc(e, signedPdf);
|
saveSignedDoc(e, signedPdf);
|
||||||
} else if (wf.getSignature() != null && wf.getSignature()) {
|
} else if (wf.getSignature() != null && wf.getSignature() && !signatureNotRequired(wf)) {
|
||||||
throw new ApproveException("ErrApproveMustBeSigned");
|
throw new ApproveException("ErrApproveMustBeSigned");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -310,6 +311,15 @@ public abstract class RequirementBaseServiceImpl<T extends RequirementBase> exte
|
|||||||
postApprove(e);
|
postApprove(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check pro automatické schválení, kdy není třeba podepisovat- nadlimitní nákupy se neautorizují...
|
||||||
|
* @param wf Další krok schválení
|
||||||
|
* @return true pokud není potřeba podepisovat. Zde vrací vždy false, v případě potřeby nutno překrýt.
|
||||||
|
*/
|
||||||
|
protected boolean signatureNotRequired(Workflow wf) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
protected void approve(T entity, User user) {
|
protected void approve(T entity, User user) {
|
||||||
approve(entity, user, new Date(), null);
|
approve(entity, user, new Date(), null);
|
||||||
}
|
}
|
||||||
@@ -549,11 +559,7 @@ public abstract class RequirementBaseServiceImpl<T extends RequirementBase> exte
|
|||||||
public void update(T entity) {
|
public void update(T entity) {
|
||||||
entity.getAuthorization().clear();
|
entity.getAuthorization().clear();
|
||||||
entity.setState(RequirementState.NEW);
|
entity.setState(RequirementState.NEW);
|
||||||
|
signedDocumentService.deleteForEntity(entity);
|
||||||
SignedDocument doc = signedDocumentService.getForEntity(entity);
|
|
||||||
if (doc != null) {
|
|
||||||
signedDocumentService.delFromApprove(doc);
|
|
||||||
}
|
|
||||||
|
|
||||||
super.update(entity);
|
super.update(entity);
|
||||||
sendToApprovers(entity);
|
sendToApprovers(entity);
|
||||||
|
|||||||
@@ -67,6 +67,16 @@ public class RequirementServiceImpl extends RequirementBaseServiceImpl<Requireme
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Nadlimitní autorizovat bez podpisu
|
||||||
|
* @param wf Další krok schválení
|
||||||
|
* @return true, pokud má role nastavený limit- automatické schválení podlimitního požadavku
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected boolean signatureNotRequired(Workflow wf) {
|
||||||
|
return wf.getLimit() != null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean canAdd(Requirement entity)
|
protected boolean canAdd(Requirement entity)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -11,5 +11,6 @@ public interface SignedDocumentService extends Service<SignedDocument> {
|
|||||||
SignedDocumentItem getItem(DataModel entity, long reportId);
|
SignedDocumentItem getItem(DataModel entity, long reportId);
|
||||||
void addFromApprove(SignedDocument document);
|
void addFromApprove(SignedDocument document);
|
||||||
void delFromApprove(SignedDocument document);
|
void delFromApprove(SignedDocument document);
|
||||||
|
void deleteForEntity(DataModel entity);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -83,5 +83,14 @@ public class SignedDocumentServiceImpl extends AbstractOwnedService<SignedDocume
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
public void deleteForEntity(DataModel entity) {
|
||||||
|
SignedDocument doc = getForEntity(entity);
|
||||||
|
if (doc != null) {
|
||||||
|
delFromApprove(doc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,5 +10,6 @@ import info.bukova.isspst.services.requirement.RequirementBaseService;
|
|||||||
public interface TripBillApprovalService extends RequirementBaseService<TripBillApproval> {
|
public interface TripBillApprovalService extends RequirementBaseService<TripBillApproval> {
|
||||||
|
|
||||||
public TripBillApproval createApproval(TripBill bill);
|
public TripBillApproval createApproval(TripBill bill);
|
||||||
|
public void cancelApproval(TripBill bill);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import info.bukova.isspst.data.TripBillApproval;
|
|||||||
import info.bukova.isspst.services.IsspstException;
|
import info.bukova.isspst.services.IsspstException;
|
||||||
import info.bukova.isspst.services.requirement.RequirementBaseServiceImpl;
|
import info.bukova.isspst.services.requirement.RequirementBaseServiceImpl;
|
||||||
import info.bukova.isspst.services.requirement.RequirementTypeService;
|
import info.bukova.isspst.services.requirement.RequirementTypeService;
|
||||||
|
import info.bukova.isspst.services.signeddocs.SignedDocumentService;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
@@ -22,6 +23,10 @@ public class TripBillApprovalServiceImpl extends RequirementBaseServiceImpl<Trip
|
|||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private RequirementTypeService reqTypeService;
|
private RequirementTypeService reqTypeService;
|
||||||
|
@Autowired
|
||||||
|
private TripBillService tripBillService;
|
||||||
|
@Autowired
|
||||||
|
private SignedDocumentService signedDocumentService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TripBillApproval createApproval(TripBill bill) {
|
public TripBillApproval createApproval(TripBill bill) {
|
||||||
@@ -58,4 +63,13 @@ public class TripBillApprovalServiceImpl extends RequirementBaseServiceImpl<Trip
|
|||||||
protected DataModel entityForSignReport(TripBillApproval entity) {
|
protected DataModel entityForSignReport(TripBillApproval entity) {
|
||||||
return entity.getBill();
|
return entity.getBill();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
@PreAuthorize("this.canApprove(#bill.approval)")
|
||||||
|
public void cancelApproval(TripBill bill) {
|
||||||
|
bill.setApproval(null);
|
||||||
|
signedDocumentService.deleteForEntity(bill);
|
||||||
|
tripBillService.update(bill);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package info.bukova.isspst.ui.tripbill;
|
package info.bukova.isspst.ui.tripbill;
|
||||||
|
|
||||||
|
import info.bukova.isspst.StringUtils;
|
||||||
import info.bukova.isspst.data.RequirementState;
|
import info.bukova.isspst.data.RequirementState;
|
||||||
import info.bukova.isspst.data.TripBill;
|
import info.bukova.isspst.data.TripBill;
|
||||||
import info.bukova.isspst.data.TripBillApproval;
|
import info.bukova.isspst.data.TripBillApproval;
|
||||||
@@ -8,6 +9,7 @@ import info.bukova.isspst.services.tripbill.TripBillApprovalService;
|
|||||||
import info.bukova.isspst.services.tripbill.TripBillService;
|
import info.bukova.isspst.services.tripbill.TripBillService;
|
||||||
import info.bukova.isspst.services.users.UserService;
|
import info.bukova.isspst.services.users.UserService;
|
||||||
import info.bukova.isspst.ui.requirement.RequirementSubpage;
|
import info.bukova.isspst.ui.requirement.RequirementSubpage;
|
||||||
|
import org.zkoss.bind.BindUtils;
|
||||||
import org.zkoss.bind.annotation.BindingParam;
|
import org.zkoss.bind.annotation.BindingParam;
|
||||||
import org.zkoss.bind.annotation.Command;
|
import org.zkoss.bind.annotation.Command;
|
||||||
import org.zkoss.bind.annotation.ExecutionArgParam;
|
import org.zkoss.bind.annotation.ExecutionArgParam;
|
||||||
@@ -15,7 +17,10 @@ import org.zkoss.bind.annotation.GlobalCommand;
|
|||||||
import org.zkoss.bind.annotation.Init;
|
import org.zkoss.bind.annotation.Init;
|
||||||
import org.zkoss.bind.annotation.NotifyChange;
|
import org.zkoss.bind.annotation.NotifyChange;
|
||||||
import org.zkoss.zk.ui.Executions;
|
import org.zkoss.zk.ui.Executions;
|
||||||
|
import org.zkoss.zk.ui.event.Event;
|
||||||
|
import org.zkoss.zk.ui.event.EventListener;
|
||||||
import org.zkoss.zk.ui.select.annotation.WireVariable;
|
import org.zkoss.zk.ui.select.annotation.WireVariable;
|
||||||
|
import org.zkoss.zul.Messagebox;
|
||||||
import org.zkoss.zul.Window;
|
import org.zkoss.zul.Window;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -121,10 +126,29 @@ public class TripBillSummaryVM extends RequirementSubpage<TripBillApproval> {
|
|||||||
@GlobalCommand
|
@GlobalCommand
|
||||||
@NotifyChange("dataBean")
|
@NotifyChange("dataBean")
|
||||||
public void reload() {
|
public void reload() {
|
||||||
|
if (bill.getApproval() != null) {
|
||||||
setDataBean(tripBillApprovalService.getById(bill.getApproval().getId()));
|
setDataBean(tripBillApprovalService.getById(bill.getApproval().getId()));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public Map<Integer, Boolean> getSelTab() {
|
public Map<Integer, Boolean> getSelTab() {
|
||||||
return selTab;
|
return selTab;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Command
|
||||||
|
public void cancelApproval() {
|
||||||
|
Messagebox.show(StringUtils.localize("TripBillCancelApprovalQuestion"), StringUtils.localize("TripBillCancelApprovalTitle"), Messagebox.YES
|
||||||
|
| Messagebox.NO, Messagebox.QUESTION, new EventListener<Event>() {
|
||||||
|
@Override
|
||||||
|
public void onEvent(Event event) throws Exception {
|
||||||
|
if (((Integer) event.getData()).intValue() == Messagebox.YES) {
|
||||||
|
tripBillApprovalService.cancelApproval(bill);
|
||||||
|
setDataBean(null);
|
||||||
|
BindUtils.postNotifyChange(null, null, TripBillSummaryVM.this, "bill");
|
||||||
|
BindUtils.postNotifyChange(null, null, TripBillSummaryVM.this, "dataBean");
|
||||||
|
BindUtils.postNotifyChange(null, null, TripBillSummaryVM.this, "canApprove");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -241,6 +241,9 @@ TripBillBack=Zpět
|
|||||||
TripBillTotal=Celkem
|
TripBillTotal=Celkem
|
||||||
TripBillSaveApprove=Jestliže máte vše vyplněno, pošlete vyúčtování ke schválení. Vyúčtování zaslané ke schválení už nelze dále upravovat. Odeslat ke schválení?
|
TripBillSaveApprove=Jestliže máte vše vyplněno, pošlete vyúčtování ke schválení. Vyúčtování zaslané ke schválení už nelze dále upravovat. Odeslat ke schválení?
|
||||||
TripBillSave=Odeslat ke schválení?
|
TripBillSave=Odeslat ke schválení?
|
||||||
|
TripBillCancelApproval=Zrušit schválení a povolit úpravy
|
||||||
|
TripBillCancelApprovalQuestion=Opravdu zrušít schválení tohoto vyúčtování?
|
||||||
|
TripBillCancelApprovalTitle=Zrušit schválení
|
||||||
|
|
||||||
TripBillSummaryDetail=Detail
|
TripBillSummaryDetail=Detail
|
||||||
|
|
||||||
|
|||||||
@@ -35,6 +35,7 @@
|
|||||||
|
|
||||||
<separator bar="true" hflex="1"/>
|
<separator bar="true" hflex="1"/>
|
||||||
<include src="../../approveStatus.zul" vflex="1"/>
|
<include src="../../approveStatus.zul" vflex="1"/>
|
||||||
|
<button label="${labels.TripBillCancelApproval}" onClick="@command('cancelApproval')" sclass="nicebutton" disabled="@load(empty vm.dataBean)"/>
|
||||||
</vbox>
|
</vbox>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user