Commit 065bfade by Tuomas Riihimäki

Add bill info overlay and fix user filtering

1 parent 4b82b017
......@@ -41,4 +41,6 @@ public interface VerkkomaksutFiBeanLocal {
Map<Integer, String> getAuthcodeForBills(List<Bill> bills);
String getAuthcodeForBill(Bill selectedBill);
}
......@@ -363,15 +363,32 @@ public class VerkkomaksutFiBean implements VerkkomaksutFiBeanLocal {
}
@Override
@RolesAllowed(BillPermission.S_WRITE_ALL)
public Map<Integer, String> getAuthcodeForBills(List<Bill> bills) {
Map<Integer, String> ret = new HashMap<>();
if (isSvmEnabled() && permbean.hasPermission(BillPermission.WRITE_ALL)) {
String merchantId = eventPrivatePropertyFacade.getPropertyForEvent(LanEventPrivatePropertyKey.VERKKOMAKSU_MERCHANT_ID).getTextvalue();
String merchantPassword = eventPrivatePropertyFacade.getPropertyForEvent(LanEventPrivatePropertyKey.VERKKOMAKSU_MERCHANT_PASSWORD).getTextvalue();
for (Bill b : bills) {
ret.put(b.getId(),PasswordFunctions.calculateMd5("&", merchantPassword, merchantId, b.getId().toString()).toUpperCase());
ret.put(b.getId(), PasswordFunctions.calculateMd5("&", merchantPassword, merchantId, b.getId().toString()).toUpperCase());
}
}
return ret;
}
@Override
@RolesAllowed(BillPermission.S_WRITE_ALL)
public String getAuthcodeForBill(Bill selectedBill) {
if (selectedBill == null) {
return null;
}
final Bill b = billFacade.reload(selectedBill);
if (b == null) {
return null;
}
String merchantId = eventPrivatePropertyFacade.getPropertyForEvent(LanEventPrivatePropertyKey.VERKKOMAKSU_MERCHANT_ID).getTextvalue();
String merchantPassword = eventPrivatePropertyFacade.getPropertyForEvent(LanEventPrivatePropertyKey.VERKKOMAKSU_MERCHANT_PASSWORD).getTextvalue();
return PasswordFunctions.calculateMd5("&", merchantPassword, merchantId, b.getId().toString()).toUpperCase();
}
}
......@@ -19,35 +19,25 @@
package fi.codecrew.moya.facade;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import javax.persistence.metamodel.SingularAttribute;
import fi.codecrew.moya.model.Bill_;
import fi.codecrew.moya.beans.EventBeanLocal;
import fi.codecrew.moya.entitysearch.BillSearchQuery;
import fi.codecrew.moya.facade.callbacks.OrderCallback;
import fi.codecrew.moya.facade.callbacks.bill.BillEventPredicate;
import fi.codecrew.moya.facade.callbacks.bill.BillFilterPredicate;
import fi.codecrew.moya.facade.callbacks.bill.BillOrderPredicate;
import fi.codecrew.moya.facade.callbacks.bill.BillUserPredicate;
import fi.codecrew.moya.model.Bill;
import fi.codecrew.moya.model.Bill_;
import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.LanEvent;
import fi.codecrew.moya.model.User;
import fi.codecrew.moya.utilities.SearchQuery;
import fi.codecrew.moya.utilities.SearchResult;
import fi.codecrew.moya.utilities.jpa.FacadeCallback;
......
......@@ -52,7 +52,7 @@ public class UserFacade extends IntegerPkGenericFacade<User> {
private static List<SingularAttribute<User, String>> SEARCHATTRS;
static List<SingularAttribute<User, String>> getAttrlist() {
public static List<SingularAttribute<User, String>> getAttrlist() {
if (SEARCHATTRS == null)
{
ArrayList<SingularAttribute<User, String>> buildAttrs = new ArrayList<SingularAttribute<User, String>>();
......
......@@ -13,6 +13,8 @@ import javax.persistence.metamodel.SingularAttribute;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.codecrew.moya.facade.UserFacade;
import fi.codecrew.moya.facade.callbacks.EventUserSearchPredicate;
import fi.codecrew.moya.model.Bill;
import fi.codecrew.moya.model.Bill_;
import fi.codecrew.moya.model.LanEvent;
......@@ -31,13 +33,23 @@ public class BillFilterPredicate extends GenericBillPredicate {
@Override
public void exec(CriteriaBuilder cb, CriteriaQuery<?> cq, Path<Bill> root, List<Predicate> predicates, boolean isFullQuery) {
for (Entry<String, Object> f : filters.entrySet()) {
filterloop: for (Entry<String, Object> f : filters.entrySet()) {
logger.info("f {} {}", f.getKey(), f.getValue());
SingularAttribute<? super Bill, ?> field = BILL_SEARCH_FIELDS.get(f.getKey());
Object val = f.getValue();
switch (f.getKey()) {
case "sentDate": {
// Not implemented, at least yet..
continue filterloop;
}
case "payer": {
logger.info("Searching user with {}", val);
EventUserSearchPredicate userSearch = new EventUserSearchPredicate(val.toString(), UserFacade.getAttrlist());
userSearch.exec(cb, cq, root.get(Bill_.user), predicates, isFullQuery);
continue filterloop;
}
case "referenceNumber": {
if (f.getValue() == null || f.getValue().toString().length() < 2) {
continue;
......
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:bills="http://java.sun.com/jsf/composite/cditools/bills"
xmlns:f="http://java.sun.com/jsf/core"
>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:p="http://primefaces.org/ui">
<h:body>
<ui:composition template="#{sessionHandler.template}">
<f:metadata>
<f:event type="preRenderView" listener="#{billListView.initAllBills}" />
</f:metadata>
<ui:define name="content">
<bills:list />
<h:form rendered="#{billListView.canWriteBill}">
<p:commandButton ajax="false" action="#{billListView.showPayButtonsAction()}" value="#{i18n['bill.showPayButtons']}" />
</h:form>
<h:form id="billList" styleClass="moya_datatable3">
<p:dataTable sortBy="#{user.sentDateTime}" sortOrder="descending" sortField="sentDate" paginator="true" lazy="true" rows="100" styleClass="bordertable" id="billList" value="#{billListView.lazyBillList}" var="bill"
rowStyleClass="#{bill.expired ? 'expired' : (bill.paidDate != null ? 'paid' : null)}">
<p:column width="35">
<p:commandButton ajax="true" update=":billInfoPanel" oncomplete="PF('billInfoPanel').show('#{component.clientId}');" icon="ui-icon-search" title="View">
<f:setPropertyActionListener value="#{bill}" target="#{billListView.selectedBill}" />
</p:commandButton>
</p:column>
<p:column id="payerCol" field="payer" filterBy="#{bill.user.user.id}" sortBy="#{bill.user.user.login}">
<f:facet name="header">
<h:outputText value="#{i18n['bill.payer']}" />
</f:facet>
<h:link outcome="/useradmin/edit" value="#{bill.user.user.login} #{bill.addr1}">
<f:param name="userid" value="#{bill.user.user.id}" />
</h:link>
</p:column>
<p:column field="sentDate" sortBy="#{bill.sentDateTime}">
<f:facet name="header">
<h:outputText value="${i18n['bill.sentDate']}" />
</f:facet>
<h:outputText value="#{bill.sentDateTime}">
<f:convertDateTime pattern="#{sessionHandler.datetimeFormat}" timeZone="#{sessionHandler.timezone}" />
</h:outputText>
</p:column>
<p:column field="id" filterBy="#{bill.id}" sortBy="#{bill.id}">
<f:facet name="header">
<h:outputText value="${i18n['bill.id']}" />
</f:facet>
<h:outputText value="#{bill.id}" />
</p:column>
<p:column field="billNumber" filterBy="#{bill.billNumber}" sortBy="#{bill.billNumber}">
<f:facet name="header">
<h:outputText value="${i18n['bill.billNumber']}" />
</f:facet>
<h:outputText value="#{bill.billNumber}" />
</p:column>
<p:column field="referenceNumber" filterBy="#{bill.billNumber}" sortBy="#{bill.billNumber}">
<f:facet name="header">
<h:outputText value="${i18n['bill.referencenumber']}" />
</f:facet>
<h:outputText value="#{bill.referenceNumberBase}">
<f:converter binding="#{referenceNumberConverter}" />
</h:outputText>
</p:column>
<!--
<p:column headerText="#{i18n['bill.notes']}" rendered="#{productShopView.gatherBillInfo}">
<h:outputText value="#{bill.notes}" />
</p:column>
-->
<p:column>
<f:facet name="header">
<h:outputText value="${i18n['bill.totalPrice']}" />
</f:facet>
<h:outputText value="#{bill.totalPrice()}">
<f:convertNumber currencyCode="EUR" maxFractionDigits="2" minFractionDigits="2" type="currency" locale="#{sessionHandler.locale}" />
</h:outputText>
</p:column>
<p:column>
<h:link outcome="/bill/showBill" value="#{i18n['bill.show']}">
<f:param name="billid" value="#{bill.id}" />
</h:link>
<br />
<h:link outcome="/bill/edit" value="#{i18n['bill.edit']}">
<f:param name="billid" value="#{bill.id}" />
</h:link>
<br />
<a href="#{request.contextPath}/PrintBill?billid=#{bill.id}" target="_blank">#{i18n['bill.printBill']}</a>
</p:column>
<p:column>
<p:commandButton update="billList" onerror="location.reload(true)" rendered="#{bill.paidDate == null and billListView.showPayButtons}" action="#{billListView.markPaid()}" value="#{i18n['bill.markPaid']}" />
<h:outputText rendered="#{bill.paidDate != null}" value="#{i18n['bill.isPaid']}" />
<h:outputText rendered="#{bill.paidDate == null and !billListView.showPayButtons}" value="#{i18n['bill.isNotPaid']}" />
</p:column>
</p:dataTable>
</h:form>
<p:overlayPanel appendToBody="true" id="billInfoPanel" dynamic="false" widgetVar="billInfoPanel" showEffect="fade" hideEffect="fade" dismissable="true" showCloseIcon="true" style="width:800px;min-height:80px">
<h:panelGrid columns="2">
<h:outputText value="${i18n['bill.payer']}: " />
<h:outputText value="#{billListView.selectedBill.user.wholeName}" />
<h:outputText value="${i18n['bill.id']}: " />
<h:outputText value="#{billListView.selectedBill.id}" />
<h:outputText value="${i18n['bill.vat']}: " />
<h:outputText value="#{billListView.selectedBill.totalVat()}">
<f:convertNumber currencyCode="EUR" maxFractionDigits="2" minFractionDigits="2" type="currency" locale="#{sessionHandler.locale}" />
</h:outputText>
<h:outputText value="${i18n['bill.totalPrice']}: " />
<h:outputText value="#{billListView.selectedBill.totalPrice()}">
<f:convertNumber currencyCode="EUR" maxFractionDigits="2" minFractionDigits="2" type="currency" locale="#{sessionHandler.locale}" />
</h:outputText>
</h:panelGrid>
<ui:fragment rendered="#{! empty billListView.paytrailMerchantId}">
<form id="paymentcheckform" target="_blank" action="https://payment.paytrail.com/check-payment" method="post">
<input name="MERCHANT_ID" type="hidden" value="#{billListView.paytrailMerchantId}" />
<input id="paymentordernr" name="ORDER_NUMBER" type="hidden" value="#{billListView.selectedBill.id}" />
<input id="paymentauthcode" name="AUTHCODE" type="hidden" value="#{billListView.paytrailAuthcodeForSelected}" />
<input name="VERSION" type="hidden" value="2" />
<input name="submit" type="submit" value="#{i18n['bill.checkPaytrail']}" />
</form>
</ui:fragment>
<p:dataTable value="#{billListView.selectedBill.billLines}" var="line">
<p:column width="49%" headerText="#{i18n['billine.product']}">
<h:outputText value="#{line.name}" />:
</p:column>
<p:column width="17%" headerText="#{i18n['billine.quantity']}">
<h:outputText value="#{line.quantity}">
<f:convertNumber minFractionDigits="0" maxFractionDigits="2" />
</h:outputText>
</p:column>
<p:column width="17%" headerText="#{i18n['billine.linePrice']}">
<h:outputText value="#{line.linePrice}">
<f:convertNumber currencyCode="EUR" type="currency" minFractionDigits="0" maxFractionDigits="2" />
</h:outputText>
</p:column>
<p:column width="17%" headerText="#{i18n['billine.vat']}">
<h:outputText value="#{line.lineVat}">
<f:convertNumber currencyCode="EUR" type="currency" minFractionDigits="0" maxFractionDigits="2" />
</h:outputText>
</p:column>
</p:dataTable>
</p:overlayPanel>
</ui:define>
</ui:composition>
</h:body>
......
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:composite="http://java.sun.com/jsf/composite" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://primefaces.org/ui"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<composite:interface>
</composite:interface>
<composite:implementation>
<h:form rendered="#{billListView.canWriteBill}">
<p:commandButton ajax="false" action="#{billListView.showPayButtonsAction()}" value="#{i18n['bill.showPayButtons']}" />
</h:form>
<h:form id="billList" styleClass="moya_datatable3">
<p:dataTable sortBy="#{user.sentDateTime}" sortOrder="descending" sortField="sentDate" paginator="true" lazy="true" rows="100" styleClass="bordertable" id="billList" value="#{billListView.lazyBillList}" var="bill"
rowStyleClass="#{bill.expired ? 'expired' : (bill.paidDate != null ? 'paid' : null)}" >
<p:column rendered="#{billListView.canWriteBill}" id="payerCol" field="payer" filterBy="#{bill.user.user.id}" sortBy="#{bill.user.user.id}">
<f:facet name="header">
<h:outputText value="#{i18n['bill.payer']}" />
</f:facet>
<h:link rendered="#{billListView.canWriteBill}" outcome="/useradmin/edit" value="#{bill.user.user.login} #{bill.addr1}">
<f:param name="userid" value="#{bill.user.user.id}" />
</h:link>
<h:outputText rendered="#{not billListView.canWriteBill}" value="#{bill.addr1}" />
</p:column>
<p:column field="sentDate" filterBy="#{bill.sentDateTime}" sortBy="#{bill.sentDateTime}">
<f:facet name="header">
<h:outputText value="${i18n['bill.sentDate']}" />
</f:facet>
<h:outputText value="#{bill.sentDateTime}">
<f:convertDateTime pattern="#{sessionHandler.datetimeFormat}" timeZone="#{sessionHandler.timezone}" />
</h:outputText>
</p:column>
<p:column field="id" filterBy="#{bill.id}" sortBy="#{bill.id}">
<f:facet name="header">
<h:outputText value="${i18n['bill.id']}" />
</f:facet>
<h:outputText value="#{bill.id}" />
</p:column>
<p:column field="billNumber" filterBy="#{bill.billNumber}" sortBy="#{bill.billNumber}">
<f:facet name="header">
<h:outputText value="${i18n['bill.billNumber']}" />
</f:facet>
<h:outputText value="#{bill.billNumber}" />
</p:column>
<p:column rendered="#{billListView.canWriteBill}" field="referenceNumber" filterBy="#{bill.billNumber}" sortBy="#{bill.billNumber}">
<f:facet name="header">
<h:outputText value="${i18n['bill.referencenumber']}" />
</f:facet>
<h:outputText value="#{bill.referenceNumberBase}">
<f:converter binding="#{referenceNumberConverter}" />
</h:outputText>
</p:column>
<!--
<p:column headerText="#{i18n['bill.notes']}" rendered="#{productShopView.gatherBillInfo}">
<h:outputText value="#{bill.notes}" />
</p:column>
-->
<p:column>
<f:facet name="header">
<h:outputText value="${i18n['bill.totalPrice']}" />
</f:facet>
<h:outputText value="#{bill.totalPrice()}">
<f:convertNumber currencyCode="EUR" maxFractionDigits="2" minFractionDigits="2" type="currency" locale="#{sessionHandler.locale}" />
</h:outputText>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="${i18n['bill.vat']}" />
</f:facet>
<h:outputText value="#{bill.totalVat()}">
<f:convertNumber currencyCode="EUR" maxFractionDigits="2" minFractionDigits="2" type="currency" locale="#{sessionHandler.locale}" />
</h:outputText>
</p:column>
<p:column rendered="#{(!bill.expired and sessionHandler.isEventBoolProperty('ALLOW_BILLING')) or billListView.canWriteBill}">
<ui:fragment>
<a href="#{request.contextPath}/PrintBill?billid=#{bill.id}" target="_blank">#{i18n['bill.printBill']}</a>
</ui:fragment>
</p:column>
<p:column>
<h:link outcome="/bill/showBill" value="#{i18n['bill.show']}">
<f:param name="billid" value="#{bill.id}" />
</h:link>
</p:column>
<p:column rendered="#{billListView.canWriteBill}">
<h:link outcome="/bill/edit" value="#{i18n['bill.edit']}">
<f:param name="billid" value="#{bill.id}" />
</h:link>
</p:column>
<p:column rendered="#{billListView.canWriteBill}">
<p:commandButton update="billList" onerror="location.reload(true)" rendered="#{bill.paidDate == null and billListView.showPayButtons}" action="#{billListView.markPaid()}" value="#{i18n['bill.markPaid']}" />
<h:outputText rendered="#{bill.paidDate != null}" value="#{i18n['bill.isPaid']}" />
<h:outputText rendered="#{bill.paidDate == null and !billListView.showPayButtons}" value="#{i18n['bill.isNotPaid']}" />
</p:column>
<p:column rendered="#{!billListView.canWriteBill}">
<h:outputText rendered="#{bill.paidDate != null}" value="#{i18n['bill.isPaid']}" />
<h:outputText rendered="#{bill.paidDate == null}" value="#{i18n['bill.isNotPaid']}" />
</p:column>
<p:column rendered="#{billListView.canWriteBill and not empty billListView.paytrailMerchantId}">
<button onclick="showPaymentstatus('#{bill.id}'); return false;">
<h:outputText value="#{i18n['bill.checkPaytrail']}" />
</button>
</p:column>
<p:column>
<p:commandButton update=":billlist:billList:payerPanel" oncomplete="PF('carOP').show('#{component.clientId}')" icon="ui-icon-search" title="View">
<f:setPropertyActionListener value="#{bill}" target="#{billListView.selectedBill}" />
</p:commandButton>
</p:column>
</p:dataTable>
<p:overlayPanel id="payerPanel" widgetVar="carOP">
<p:dataList value="#{billListView.selectedBill.billLines}" var="line">
<h:outputText value="#{line.name}" />:
<h:outputText value="#{line.quantity}">
<f:convertNumber minFractionDigits="0" maxFractionDigits="2" />
</h:outputText>
</p:dataList>
</p:overlayPanel>
</h:form>
<form id="paymentcheckform" target="_blank" action="https://payment.paytrail.com/check-payment" method="post">
<input name="MERCHANT_ID" type="hidden" value="#{billListView.paytrailMerchantId}" /> <input id="paymentordernr" name="ORDER_NUMBER" type="hidden" value="" /> <input id="paymentauthcode" name="AUTHCODE" type="hidden" value="" /> <input name="VERSION"
type="hidden" value="2" />
</form>
<script type="text/javascript">
function showPaymentstatus(id) {
$("#paymentordernr").val(id);
$("#paymentauthcode").val(authcodes[id]);
$("#paymentcheckform").submit();
return false;
}
var authcodes = {};
<ui:repeat var="ac" value="#{billListView.paytrailAuthcodes}">
<h:outputText value="authcodes['#{ac.key}'] ='#{ac.value}';" />
</ui:repeat>
</script>
</composite:implementation>
</html>
......@@ -78,24 +78,21 @@ public class BillListView extends GenericCDIView {
private boolean showPayButtons = false;
public String showPayButtonsAction()
{
if (super.hasPermission(BillPermission.WRITE_ALL))
{
showPayButtons = true;
}
return null;
}
@EJB
private VerkkomaksutFiBeanLocal paytrailBean;
private String paytrailMerchantId;
private Map<Integer, String> paytrailAuthcodes;
private LazyBillDataModel lazyBillList;
public void showPayButtonsAction()
{
if (super.hasPermission(BillPermission.WRITE_ALL)) {
showPayButtons = true;
}
}
private static final Logger logger = LoggerFactory.getLogger(BillListView.class);
public void initAllBills() {
......@@ -103,10 +100,13 @@ public class BillListView extends GenericCDIView {
beginConversation();
logger.info("Initializing lazyList");
lazyBillList = new LazyBillDataModel(true);
writeBill = permbean.hasPermission(BillPermission.WRITE_ALL);
if (paytrailBean.isSvmEnabled() && writeBill) {
paytrailMerchantId = paytrailBean.getMerchantId();
}
// List<Bill> billList = billbean.findAll();
// bills = new ListDataModel<Bill>(billList);
// writeBill = permbean.hasPermission(BillPermission.WRITE_ALL);
// if (paytrailBean.isSvmEnabled()) {
// setPaytrailMerchantId(paytrailBean.getMerchantId());
// paytrailAuthcodes = paytrailBean.getAuthcodeForBills(billList);
......@@ -114,19 +114,23 @@ public class BillListView extends GenericCDIView {
}
}
public Object[] getPaytrailAuthcodes() {
Object[] retarr = null;
if (paytrailAuthcodes != null)
{
Set<Entry<Integer, String>> ret = paytrailAuthcodes.entrySet();
retarr = ret.toArray();
}
return retarr;
public String getPaytrailAuthcodeForSelected() {
return paytrailBean.getAuthcodeForBill(selectedBill);
}
public String getAuthcodeForBill(Integer id) {
return paytrailAuthcodes.get(id);
}
// public Object[] getPaytrailAuthcodes() {
// Object[] retarr = null;
// if (paytrailAuthcodes != null)
// {
// Set<Entry<Integer, String>> ret = paytrailAuthcodes.entrySet();
// retarr = ret.toArray();
// }
// return retarr;
// }
// public String getAuthcodeForBill(Integer id) {
// return paytrailAuthcodes.get(id);
// }
public void initSummaryView()
{
......@@ -217,6 +221,7 @@ public class BillListView extends GenericCDIView {
}
public void setSelectedBill(Bill selectedBill) {
logger.info("Setting selected bill to {}", selectedBill);
this.selectedBill = selectedBill;
}
......@@ -232,19 +237,7 @@ public class BillListView extends GenericCDIView {
@Override
public List<Bill> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters) {
logger.info("Loading with {}, {}", first, pageSize);
QuerySortOrder sort = QuerySortOrder.UNSORTED;
switch (sortOrder) {
case ASCENDING:
sort = QuerySortOrder.ASCENDING;
break;
case DESCENDING:
sort = QuerySortOrder.DESCENDING;
break;
case UNSORTED:
default:
sort = QuerySortOrder.UNSORTED;
break;
}
QuerySortOrder sort = getSort(sortOrder);
BillSearchQuery q = new BillSearchQuery(first, pageSize, sortField, sort, filters);
q.setUser(user);
......
package fi.codecrew.moya.web.helpers;
import java.util.List;
import java.util.Map;
import org.primefaces.model.LazyDataModel;
import org.primefaces.model.SortOrder;
import fi.codecrew.moya.model.GenericEntity;
import fi.codecrew.moya.utilities.SearchQuery.QuerySortOrder;
public abstract class LazyEntityDataModel<T extends GenericEntity> extends LazyDataModel<T> {
private static final long serialVersionUID = -7424836549904164915L;
@Override
public abstract List<T> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters);
@Override
public T getRowData(String key) {
if (key == null || key.isEmpty() || key.equals("0"))
return null;
return findEntity(Integer.parseInt(key));
}
protected abstract T findEntity(Integer id);
@Override
public Object getRowKey(T entity) {
Integer ret = 0;
if (entity != null)
ret = entity.getId();
return ret;
}
protected QuerySortOrder getSort(SortOrder sortOrder) {
QuerySortOrder sort = QuerySortOrder.UNSORTED;
switch (sortOrder) {
case ASCENDING:
sort = QuerySortOrder.ASCENDING;
break;
case DESCENDING:
sort = QuerySortOrder.DESCENDING;
break;
case UNSORTED:
default:
sort = QuerySortOrder.UNSORTED;
break;
}
return sort;
}
}
......@@ -72,7 +72,7 @@ bill.billMarkedPaidMail.subject = Bill marked paid
bill.billNumber = Order number
bill.billPaidDate = Paid date
bill.cancel = Cancel bill
bill.checkPaytrail = Check payment
bill.checkPaytrail = Check payment status
bill.deliveryTerms = Delivery terms
bill.edit = edit
bill.expires = Expires
......@@ -119,6 +119,7 @@ billedit.billnotfound = Bill not found. Select again.
billine.linePrice = Total (inc. vat)
billine.name = Ticket
billine.product = Product
billine.quantity = Quantityicket
billine.referencedProduct = Referenced product
billine.save = Save
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!