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)
|
||||
@IndexedEmbedded
|
||||
private List<FileMetainfo> attachedFiles;
|
||||
@OneToOne(fetch = FetchType.EAGER)
|
||||
@OneToOne(fetch = FetchType.EAGER, orphanRemoval = true)
|
||||
@JoinColumn(name = "APPROVAL_ID")
|
||||
private TripBillApproval approval;
|
||||
@Column(name = "SAVED")
|
||||
|
||||
+13
-7
@@ -131,7 +131,8 @@ public abstract class RequirementBaseServiceImpl<T extends RequirementBase> exte
|
||||
}
|
||||
|
||||
protected void postAdd(T entity) {
|
||||
if (canApprove(entity)) {
|
||||
Workflow wf = getNextWorkflow(entity);
|
||||
if (canApprove(entity) && (wf.getSignature() == null || !wf.getSignature())) {
|
||||
approve(entity);
|
||||
} else {
|
||||
this.sendToApprovers(entity);
|
||||
@@ -280,7 +281,7 @@ public abstract class RequirementBaseServiceImpl<T extends RequirementBase> exte
|
||||
|
||||
if (signedPdf != null) {
|
||||
saveSignedDoc(e, signedPdf);
|
||||
} else if (wf.getSignature() != null && wf.getSignature()) {
|
||||
} else if (wf.getSignature() != null && wf.getSignature() && !signatureNotRequired(wf)) {
|
||||
throw new ApproveException("ErrApproveMustBeSigned");
|
||||
}
|
||||
|
||||
@@ -310,6 +311,15 @@ public abstract class RequirementBaseServiceImpl<T extends RequirementBase> exte
|
||||
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) {
|
||||
approve(entity, user, new Date(), null);
|
||||
}
|
||||
@@ -549,11 +559,7 @@ public abstract class RequirementBaseServiceImpl<T extends RequirementBase> exte
|
||||
public void update(T entity) {
|
||||
entity.getAuthorization().clear();
|
||||
entity.setState(RequirementState.NEW);
|
||||
|
||||
SignedDocument doc = signedDocumentService.getForEntity(entity);
|
||||
if (doc != null) {
|
||||
signedDocumentService.delFromApprove(doc);
|
||||
}
|
||||
signedDocumentService.deleteForEntity(entity);
|
||||
|
||||
super.update(entity);
|
||||
sendToApprovers(entity);
|
||||
|
||||
@@ -67,6 +67,16 @@ public class RequirementServiceImpl extends RequirementBaseServiceImpl<Requireme
|
||||
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
|
||||
protected boolean canAdd(Requirement entity)
|
||||
{
|
||||
|
||||
@@ -11,5 +11,6 @@ public interface SignedDocumentService extends Service<SignedDocument> {
|
||||
SignedDocumentItem getItem(DataModel entity, long reportId);
|
||||
void addFromApprove(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 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.requirement.RequirementBaseServiceImpl;
|
||||
import info.bukova.isspst.services.requirement.RequirementTypeService;
|
||||
import info.bukova.isspst.services.signeddocs.SignedDocumentService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
@@ -22,6 +23,10 @@ public class TripBillApprovalServiceImpl extends RequirementBaseServiceImpl<Trip
|
||||
|
||||
@Autowired
|
||||
private RequirementTypeService reqTypeService;
|
||||
@Autowired
|
||||
private TripBillService tripBillService;
|
||||
@Autowired
|
||||
private SignedDocumentService signedDocumentService;
|
||||
|
||||
@Override
|
||||
public TripBillApproval createApproval(TripBill bill) {
|
||||
@@ -58,4 +63,13 @@ public class TripBillApprovalServiceImpl extends RequirementBaseServiceImpl<Trip
|
||||
protected DataModel entityForSignReport(TripBillApproval entity) {
|
||||
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;
|
||||
|
||||
import info.bukova.isspst.StringUtils;
|
||||
import info.bukova.isspst.data.RequirementState;
|
||||
import info.bukova.isspst.data.TripBill;
|
||||
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.users.UserService;
|
||||
import info.bukova.isspst.ui.requirement.RequirementSubpage;
|
||||
import org.zkoss.bind.BindUtils;
|
||||
import org.zkoss.bind.annotation.BindingParam;
|
||||
import org.zkoss.bind.annotation.Command;
|
||||
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.NotifyChange;
|
||||
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.zul.Messagebox;
|
||||
import org.zkoss.zul.Window;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -121,10 +126,29 @@ public class TripBillSummaryVM extends RequirementSubpage<TripBillApproval> {
|
||||
@GlobalCommand
|
||||
@NotifyChange("dataBean")
|
||||
public void reload() {
|
||||
setDataBean(tripBillApprovalService.getById(bill.getApproval().getId()));
|
||||
if (bill.getApproval() != null) {
|
||||
setDataBean(tripBillApprovalService.getById(bill.getApproval().getId()));
|
||||
}
|
||||
}
|
||||
|
||||
public Map<Integer, Boolean> getSelTab() {
|
||||
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
|
||||
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í?
|
||||
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
|
||||
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
|
||||
<separator bar="true" hflex="1"/>
|
||||
<include src="../../approveStatus.zul" vflex="1"/>
|
||||
<button label="${labels.TripBillCancelApproval}" onClick="@command('cancelApproval')" sclass="nicebutton" disabled="@load(empty vm.dataBean)"/>
|
||||
</vbox>
|
||||
</div>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user