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
Verze_3.0
Josef Rokos 9 years ago
parent 67a99d8d78
commit 14242fa41a

@ -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")

@ -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() {
setDataBean(tripBillApprovalService.getById(bill.getApproval().getId())); if (bill.getApproval() != null) {
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>

Loading…
Cancel
Save