package foundation.icall.callout.ai;
|
|
import foundation.data.entity.Entity;
|
import foundation.data.entity.EntitySet;
|
import foundation.data.entity.Filter;
|
import foundation.data.object.DataObject;
|
import foundation.json.IJSONProvider;
|
import foundation.json.IJSONWriter;
|
import foundation.json.JArrayReader;
|
import foundation.json.JSONReader;
|
import foundation.json.JType;
|
import foundation.util.ContentBuilder;
|
import foundation.util.ID;
|
import foundation.util.MapList;
|
import foundation.util.Util;
|
|
public class InvoiceVerificationDao implements IJSONProvider {
|
|
private DataObject detailObject = DataObject.getInstance("temp_so_implant_invoice_detail");
|
private DataObject invoiceObject = DataObject.getInstance("temp_so_implant_invoice");
|
private Entity invoice;
|
private EntitySet invoiceDetails;
|
private boolean isDistinct;
|
|
public InvoiceVerificationDao(String batchId, JSONReader jsonObject) throws Exception {
|
String id = ID.newValue();
|
invoice.setId(id);
|
|
parseHeader(jsonObject);
|
String isAbandoned = jsonObject.getString("cancelMark");
|
invoice.set("is_abandoned", isAbandoned);
|
|
boolean isReal, isBill;
|
if (Util.isEmpty(isAbandoned)) {
|
isReal = false;
|
}else {
|
isReal = !Util.StringToBoolean(isAbandoned);
|
}
|
|
invoice.set("is_real", isReal);
|
|
|
String checkStatus = jsonObject.getString("checkStatus");
|
if ("1".equalsIgnoreCase(checkStatus)) {
|
isBill = true;
|
}else {
|
isBill = Util.StringToBoolean(checkStatus);
|
}
|
invoice.set("is_bill", isBill);
|
invoice.set("batch_id", batchId);
|
|
invoiceDetails = new EntitySet(detailObject.getTableFieldMetas());
|
JArrayReader itemArray = jsonObject.getReader("items", JType.Array);
|
|
for(JSONReader oneDetail : itemArray){
|
InvoiceVerificationDetailDao detail = new InvoiceVerificationDetailDao(batchId, id);
|
detail.parse(oneDetail);
|
invoiceDetails.append(detail.getEntity());
|
}
|
|
this.isDistinct = true;
|
|
saveToDB();
|
}
|
|
private void parseHeader(JSONReader jsonObject) throws Exception {
|
invoice = new Entity(invoiceObject.getTableFieldMetas());
|
|
invoice.set("code", jsonObject.getString("invoiceCode"));
|
invoice.set("number", jsonObject.getString("invoiceNo"));
|
invoice.set("machine_no", jsonObject.getString("machineNo"));
|
invoice.set("check_code", jsonObject.getString("checkCode"));
|
invoice.set("invoice_date", jsonObject.getString("invoiceDate"));
|
invoice.set("has_seller_list", jsonObject.getString("hasSellerList"));
|
invoice.set("traffic_free_flag", jsonObject.getString("trafficFreeFlag"));
|
invoice.set("type_code", jsonObject.getString("invoiceType"));
|
invoice.set("buyer_name", jsonObject.getString("buyerName"));
|
invoice.set("buyer_tax_code", jsonObject.getString("buyerTaxNo"));
|
invoice.set("buyer_address_phone", jsonObject.getString("buyerAddressPhone"));
|
invoice.set("buyer_bank_account", jsonObject.getString("buyerAccount"));
|
invoice.set("seller_name", jsonObject.getString("salerName"));
|
invoice.set("seller_tax_code", jsonObject.getString("salerTaxNo"));
|
invoice.set("seller_bank_account", jsonObject.getString("salerAccount"));
|
invoice.set("seller_address_phone", jsonObject.getString("salerAddressPhone"));
|
invoice.set("seller_list_tax", jsonObject.getString("sellerListTax"));
|
invoice.set("amount_with_tax", jsonObject.getString("totalAmount"));
|
invoice.set("amount_without_tax", jsonObject.getString("amount"));
|
invoice.set("amount_tax", jsonObject.getString("taxAmount"));
|
invoice.set("bureau_tax", jsonObject.getString("bureauTax"));
|
invoice.set("remark", jsonObject.getString("remark"));
|
invoice.set("invoice_status", InvoiceStatus.parse(jsonObject.getString("invoiceStatus")));
|
}
|
|
private void saveToDB() throws Exception {
|
invoiceObject.saveEntity(invoice);
|
|
for (Entity detail : invoiceDetails) {
|
detailObject.saveEntity(detail);
|
}
|
}
|
|
public boolean isReal() {
|
return invoice.getBoolean("is_real", true);
|
}
|
|
public void setReal(boolean isReal) {
|
invoice.set("is_real", isReal);
|
}
|
|
public boolean isBill() {
|
return invoice.getBoolean("is_bill", true);
|
}
|
|
public void setBill(boolean isBill) {
|
invoice.set("is_bill", isBill);
|
}
|
|
public boolean isDistinct() {
|
return isDistinct;
|
}
|
|
public void setDistinct(boolean isDistinct) {
|
this.isDistinct = isDistinct;
|
}
|
|
public boolean distinctCheck() throws Exception {
|
DataObject dataObject = DataObject.getInstance("so_implant_invoice_list");
|
int count;
|
|
ContentBuilder builder = new ContentBuilder(", ");
|
builder.append(Util.quotedStr("Input"));
|
builder.append(Util.quotedStr("Cancel"));
|
builder.append(Util.quotedStr("Close"));
|
Filter filter = new Filter();
|
String code = invoice.getString("code");
|
String number = invoice.getString("number");
|
|
if (Util.isEmpty(code)) {
|
code = "";
|
}
|
|
filter.add("( so_implant_invoice.code is null or so_implant_invoice.code = " + Util.quotedStr(code) + ")");
|
filter.add("so_implant_invoice.invoice_number", number);
|
filter.add("so_implant.state_code", "not in ", "(" + builder.toString() + ")");
|
|
count = dataObject.getCount(filter);
|
|
if (count > 0 ){
|
return false;
|
}
|
return true;
|
}
|
|
public static boolean distinctCheck(String invoiceCode , String invoiceNumber, MapList<String, String> othersCheck) throws Exception {
|
DataObject dataObject = DataObject.getInstance("so_implant_invoice_list");
|
int count;
|
|
ContentBuilder builder = new ContentBuilder(", ");
|
builder.append(Util.quotedStr("Input"));
|
builder.append(Util.quotedStr("Cancel"));
|
builder.append(Util.quotedStr("Close"));
|
Filter filter = new Filter();
|
|
if (Util.isEmpty(invoiceCode)) {
|
invoiceCode = "";
|
}
|
filter.add("( so_implant_invoice.code is null or so_implant_invoice.code = " + Util.quotedStr(invoiceCode) + ")");
|
filter.add("so_implant_invoice.invoice_number", invoiceNumber);
|
filter.add("so_implant.state_code", "not in ", "(" + builder.toString() + ")");
|
|
count = dataObject.getCount(filter);
|
|
if (count > 0 ){
|
return false;
|
}
|
return true;
|
}
|
|
public Entity getEntity() {
|
return invoice;
|
}
|
|
public EntitySet getDetailEntitySet() {
|
return invoiceDetails;
|
}
|
|
@Override
|
public void writeJSON(IJSONWriter writer) {
|
writer.beginObject();
|
invoice.writeJSONBody(writer);
|
writer.write("is_distinct", isDistinct);
|
|
writer.beginArray("invoiceDetailList");
|
if(invoiceDetails != null && invoiceDetails.size() > 0 ) {
|
for (Entity detail : invoiceDetails) {
|
detail.writeJSON(writer);
|
}
|
}
|
writer.endArray();
|
|
writer.endObject();
|
}
|
}
|