Evra70

Untitled

Jul 10th, 2020
289
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 26.35 KB | None | 0 0
  1. package org.jleaf.preorderappsbo.bo.customer;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5.  
  6. import javax.persistence.Query;
  7.  
  8. import org.jleaf.core.BusinessTransaction;
  9. import org.jleaf.core.CoreException;
  10. import org.jleaf.core.DefaultBusinessTransaction;
  11. import org.jleaf.core.Dto;
  12. import org.jleaf.core.GeneralConstants;
  13. import org.jleaf.core.annotation.Info;
  14. import org.jleaf.core.annotation.InfoIn;
  15. import org.jleaf.core.annotation.InfoOut;
  16. import org.jleaf.core.dao.QueryBuilder;
  17. import org.jleaf.erp.master.dao.PartnerAddressDao;
  18. import org.jleaf.erp.master.dao.PartnerCpDao;
  19. import org.jleaf.erp.master.dao.PartnerDao;
  20. import org.jleaf.erp.master.dao.PartnerTypeDao;
  21. import org.jleaf.erp.master.entity.Partner;
  22. import org.jleaf.erp.master.entity.PartnerAddress;
  23. import org.jleaf.erp.master.entity.PartnerCp;
  24. import org.jleaf.erp.master.entity.PartnerType;
  25. import org.jleaf.preorderappsbo.dao.SoDao;
  26. import org.jleaf.preorderappsbo.dao.SoItemDao;
  27. import org.jleaf.preorderappsbo.entity.So;
  28. import org.jleaf.preorderappsbo.entity.SoItem;
  29. import org.jleaf.preorderappscore.exception.DataNotFoundException;
  30. import org.jleaf.preorderappscore.util.EmailServiceImpl;
  31. import org.jleaf.preorderappscore.util.MoneyFormat;
  32. import org.jleaf.util.DateUtil;
  33. import org.jleaf.util.DtoUtil;
  34. import org.jleaf.util.GsonUtil;
  35. import org.jleaf.util.ValidationUtil;
  36. import org.slf4j.Logger;
  37. import org.slf4j.LoggerFactory;
  38. import org.springframework.beans.factory.annotation.Autowired;
  39. import org.springframework.stereotype.Service;
  40.  
  41. @Service
  42. @InfoIn(value={
  43. @Info(name="merchantCode",description="merchant code",type=String.class),
  44. @Info(name="preOrderDocNo",description="pre order document number",type=String.class),
  45. @Info(name="customerName",description="customer name",type=String.class),
  46. @Info(name="customerPhoneNumber",description="customer phone number",type=String.class),
  47. @Info(name="customerEmail",description="customer email",type=String.class),
  48. @Info(name="customerAddress",description="customer address",type=String.class),
  49. @Info(name="itemList",description="List of itemList(productCode, orderQty)",type=List.class)
  50. })
  51. @InfoOut(value={})
  52. public class AddCustomerCheckoutOrder extends DefaultBusinessTransaction implements BusinessTransaction{
  53. Logger log = LoggerFactory.getLogger(getClass());
  54.  
  55. @Autowired
  56. PartnerDao partnerDao;
  57.  
  58. @Autowired
  59. PartnerCpDao partnerCpDao;
  60.  
  61. @Autowired
  62. PartnerAddressDao partnerAddressDao;
  63.  
  64. @Autowired
  65. PartnerTypeDao partnerTypeDao;
  66.  
  67. @Autowired
  68. SoDao soDao;
  69.  
  70. @Autowired
  71. SoItemDao soItemDao;
  72.  
  73. @Autowired
  74. EmailServiceImpl emailServiceImpl;
  75.  
  76. private static final String CUSTOMER_CTGR_PARTNER_CODE = "CUSTOMER";
  77. private static final Long SALES_ORDER_DOC_TYPE_ID = 301L;
  78. private static final String OU_TYPE_COMPANY_CODE = "COM";
  79. private static final String CHECKOUT_REMARK = "Check Out By Microsite";
  80. private static final String RANK_GOOD = "Good";
  81. private static final String IDN_CURRENCY_CODE = "IDR";
  82. private static final String STATUS_DOC_DRAFT = "D";
  83. private static final String WORKFLOW_STATUS_DRAFT = "DRAFT";
  84. private static final String CUSTOMER_TYPE_PARTNER_CODE = "CUST";
  85.  
  86. @Override
  87. public String getDescription() {
  88. return "Add Customer Checkout Order";
  89. }
  90.  
  91. @Override
  92. public Dto prepare(Dto dto, Dto original) throws Exception {
  93. log.info("Start Dto : "+dto+"\n");
  94.  
  95. validation(dto);
  96.  
  97. dto.put("nullLong", GeneralConstants.NULL_REF_VALUE_LONG);
  98. dto.put("empty", GeneralConstants.EMPTY_VALUE);
  99. dto.put("yes", GeneralConstants.YES);
  100. dto.put("no", GeneralConstants.NO);
  101. dto.put("datetime", DateUtil.dateTimeNow());
  102. dto.put("today", DateUtil.dateNow());
  103.  
  104. dto.put("ctgrPartnerCode", CUSTOMER_CTGR_PARTNER_CODE);
  105. dto.put("typePartnerCode", CUSTOMER_TYPE_PARTNER_CODE);
  106.  
  107. Dto typePartnerDataDto = getTypePartnerData(dto);
  108.  
  109. dto.put("typePartnerId",typePartnerDataDto.getLong("typePartnerId"));
  110. dto.put("groupPartner",typePartnerDataDto.getString("groupPartner"));
  111.  
  112. dto.put("tenantId", getTenantId(dto));
  113. dto.put("userId", dto.getLong("userId") != null ? dto.getLong("userId") : (long) -1);
  114. dto.put("docTypeId", SALES_ORDER_DOC_TYPE_ID);
  115. dto.put("ouTypeCode", OU_TYPE_COMPANY_CODE);
  116. dto.put("ouId", getOuId(dto));
  117. dto.put("currencyCode", IDN_CURRENCY_CODE);
  118. dto.put("zeroPoint", 0.0D);
  119.  
  120. Dto preOrderDataDto = getPreOrderData(dto);
  121.  
  122. dto.put("preOrderId", preOrderDataDto.getLong("preOrderId"));
  123. dto.put("preOrderDocTypeId", preOrderDataDto.getLong("preOrderDocTypeId"));
  124. dto.put("preOrderDocDate", preOrderDataDto.getString("preOrderDocDate"));
  125. dto.put("merchantName", preOrderDataDto.getString("merchantName"));
  126. dto.put("merchantBank", preOrderDataDto.getString("merchantBank"));
  127. dto.put("merchantBankAccountNo", preOrderDataDto.getString("merchantBankAccountNo"));
  128. dto.put("merchantAccountName", preOrderDataDto.getString("merchantAccountName"));
  129. dto.put("merchantPhoneNumber", preOrderDataDto.getString("merchantPhoneNumber"));
  130.  
  131. dto.put("rank", RANK_GOOD);
  132. dto.put("remark", CHECKOUT_REMARK);
  133. dto.put("statusDraft", STATUS_DOC_DRAFT);
  134. dto.put("workflowStatusDraft", WORKFLOW_STATUS_DRAFT);
  135.  
  136. dto.put("isNewPartner", true);
  137. Dto partnerDataDto = getPartnerData(dto);
  138.  
  139. if (partnerDataDto != null) {
  140. dto.put("isNewPartner", false);
  141. dto.put("partnerId", partnerDataDto.getLong("partnerId"));
  142. dto.put("partnerCpId", partnerDataDto.getLong("partnerCpId"));
  143. dto.put("partnerCpName", partnerDataDto.getString("partnerCpName"));
  144. }
  145.  
  146. dto.put("setPartnerDto", setPartnerDto(dto));
  147. dto.put("setPartnerCpDto", setPartnerCpDto(dto));
  148. dto.put("setPartnerAddressDto", setPartnerAddressDto(dto));
  149. dto.put("setPartnerTypeDto", setPartnerTypeDto(dto));
  150. dto.put("setSoDto", setSoDto(dto));
  151. dto.put("setSoItemList", setSoItemList(dto));
  152.  
  153. log.info("End Dto : "+dto+"\n");
  154.  
  155. return null;
  156. }
  157.  
  158. @Override
  159. public Dto process(Dto dto, Dto original) throws Exception {
  160.  
  161. Dto partnerDto = dto.getDto("setPartnerDto");
  162. Dto partnerCpDto = dto.getDto("setPartnerCpDto");
  163. Dto partnerAddressDto = dto.getDto("setPartnerAddressDto");
  164. Dto partnerTypeDto = dto.getDto("setPartnerTypeDto");
  165. Dto soDto = dto.getDto("setSoDto");
  166. List<Dto> soItemList = dto.getList("setSoItemList");
  167. Dto output = new Dto();
  168.  
  169. if (dto.getBoolean("isNewPartner") == true) {
  170. log.info("Partner Dto : "+partnerDto+"\n");
  171. Partner partner = GsonUtil.fromDto(partnerDto, Partner.class);
  172. partnerDao.persist(partner);
  173.  
  174. Long partnerId = partner.getId();
  175.  
  176. log.info("Partner Dto : "+partnerDto+"\n");
  177. PartnerAddress partnerAddress = GsonUtil.fromDto(partnerAddressDto, PartnerAddress.class);
  178. partnerAddress.setPartnerId(partnerId);
  179. partnerAddressDao.persist(partnerAddress);
  180.  
  181. Long partnerAddressId = partnerAddress.getId();
  182.  
  183. PartnerCp partnerCp = GsonUtil.fromDto(partnerCpDto, PartnerCp.class);
  184. partnerCp.setPartnerId(partnerId);
  185. partnerCpDao.persist(partnerCp);
  186.  
  187. Long partnerCpId = partnerCp.getId();
  188. String partnerCpName = partnerCp.getCpName();
  189.  
  190. PartnerType partnerType = GsonUtil.fromDto(partnerTypeDto, PartnerType.class);
  191. partnerType.setPartnerId(partnerId);
  192. partnerTypeDao.persist(partnerType);
  193.  
  194. So so = GsonUtil.fromDto(soDto, So.class);
  195. so.setPartnerId(partnerId);
  196. so.setPartnerCpId(partnerCpId);
  197. so.setPartnerBillToId(partnerId);
  198. so.setPartnerShipToId(partnerCpId);
  199. so.setPartnerShipAddressId(partnerAddressId);
  200. so.setPartnerShipCpId(partnerCpId);
  201. so.setPartnerShipCpName(partnerCpName);
  202. soDao.persist(so);
  203.  
  204. Long soId = so.getId();
  205. String soDocNo = so.getDocNo();
  206. String soDocDate = so.getDocDate();
  207.  
  208. for(Dto item : soItemList){
  209. SoItem soItem = GsonUtil.fromDto(item, SoItem.class);
  210. soItem.setSoId(soId);
  211. soItem.setPartnerShipToId(partnerId);
  212. soItem.setPartnerShipAddressId(partnerAddressId);
  213. soItemDao.persist(soItem);
  214. }
  215.  
  216. output.put("docNo", soDocNo);
  217. output.put("docDate", soDocDate);
  218.  
  219. } else {
  220.  
  221. PartnerAddress partnerAddress = GsonUtil.fromDto(partnerAddressDto, PartnerAddress.class);
  222. partnerAddressDao.persist(partnerAddress);
  223.  
  224. Long partnerAddressId = partnerAddress.getId();
  225.  
  226. So so = GsonUtil.fromDto(soDto, So.class);
  227. so.setPartnerShipAddressId(partnerAddressId);
  228. soDao.persist(so);
  229.  
  230. Long soId = so.getId();
  231. String soDocNo = so.getDocNo();
  232. String soDocDate = so.getDocDate();
  233.  
  234. for(Dto item : soItemList){
  235. SoItem soItem = GsonUtil.fromDto(item, SoItem.class);
  236. soItem.setSoId(soId);
  237. soItem.setPartnerShipAddressId(partnerAddressId);
  238. soItemDao.persist(soItem);
  239. }
  240.  
  241. output.put("docNo", soDocNo);
  242. output.put("docDate", soDocDate);
  243.  
  244. }
  245.  
  246. try {
  247. sentEmailToCustomer(dto);
  248. } catch (Exception e) {
  249. // TODO: handle exception
  250. }
  251.  
  252. return output;
  253. }
  254.  
  255. private void validation(Dto dto){
  256. ValidationUtil.valDtoContainsKey(dto, "merchantCode");
  257. ValidationUtil.valDtoContainsKey(dto, "preOrderDocNo");
  258. ValidationUtil.valDtoContainsKey(dto, "customerName");
  259. ValidationUtil.valDtoContainsKey(dto, "customerPhoneNumber");
  260. ValidationUtil.valDtoContainsKey(dto, "customerEmail");
  261. ValidationUtil.valDtoContainsKey(dto, "customerAddress");
  262. ValidationUtil.valDtoContainsKey(dto, "itemList");
  263.  
  264. ValidationUtil.valBlankOrNull(dto, "merchantCode");
  265. ValidationUtil.valBlankOrNull(dto, "preOrderDocNo");
  266. ValidationUtil.valBlankOrNull(dto, "customerName");
  267. ValidationUtil.valBlankOrNull(dto, "customerPhoneNumber");
  268. ValidationUtil.valBlankOrNull(dto, "customerEmail");
  269. ValidationUtil.valBlankOrNull(dto, "customerAddress");
  270. ValidationUtil.valBlankOrNull(dto, "itemList");
  271. }
  272.  
  273. private Dto setPartnerDto(Dto dto){
  274. Dto data = new Dto();
  275. data.put("tenantId", dto.getLong("tenantId"));
  276. data.put("code", dto.getString("customerPhoneNumber"));
  277. data.put("name", dto.getString("customerName"));
  278. data.put("ctgrPartnerId", dto.getLong("nullLong"));
  279. data.put("extName", dto.getString("empty"));
  280. data.put("npwpId", dto.getLong("nullLong"));
  281. data.put("holdingId", dto.getLong("nullLong"));
  282. data.put("rank", dto.getString("rank"));
  283. data.put("lineOfBusiness", dto.getString("empty"));
  284. data.put("industryType", dto.getString("empty"));
  285. data.put("priceLevel", dto.getString("empty"));
  286. data.put("npwpStatus", "01");
  287. this.prepareInsertAudit(data, dto.getLong("userId"), dto.getString("datetime"));
  288. this.prepareUpdateAudit(data, dto.getLong("userId"), dto.getString("datetime"));
  289. return data;
  290. }
  291.  
  292. private Dto setPartnerAddressDto(Dto dto){
  293. Dto data = new Dto();
  294. data.put("tenantId", dto.getLong("tenantId"));
  295. data.put("partnerId", dto.getLong("partnerId"));
  296. data.put("addressDesc", dto.getString("customerName"));
  297. data.put("address1", dto.getString("customerAddress"));
  298. data.put("address2", dto.getString("empty"));
  299. data.put("address3", dto.getString("empty"));
  300. data.put("city", dto.getString("empty"));
  301. data.put("zipCode", dto.getString("empty"));
  302. data.put("stateOrProvince", dto.getString("empty"));
  303. data.put("country", dto.getString("empty"));
  304. data.put("phone1", dto.getString("customerPhoneNumber"));
  305. data.put("phone2", dto.getString("empty"));
  306. data.put("fax1", dto.getString("empty"));
  307. data.put("fax2", dto.getString("empty"));
  308. data.put("flagDefault", dto.getString("yes"));
  309. data.put("flgShip", dto.getString("yes"));
  310. data.put("flgBill", dto.getString("yes"));
  311. data.put("flgMail", dto.getString("yes"));
  312. data.put("flgOfficial", dto.getString("yes"));
  313. data.put("flgOthers", dto.getString("yes"));
  314. data.put("longitude", dto.getDouble("zeroPoint"));
  315. data.put("latitude", dto.getDouble("zeroPoint"));
  316. this.prepareInsertAudit(data, dto.getLong("userId"), dto.getString("datetime"));
  317. this.prepareUpdateAudit(data, dto.getLong("userId"), dto.getString("datetime"));
  318. return data;
  319. }
  320.  
  321. private Dto setPartnerCpDto(Dto dto){
  322. Dto data = new Dto();
  323. data.put("tenantId", dto.getLong("tenantId"));
  324. data.put("partnerId", dto.getLong("nullLong"));
  325. data.put("cpName", dto.getString("customerName"));
  326. data.put("cpJob", "CUSTOMER");
  327. data.put("address1", dto.getString("customerAddress"));
  328. data.put("address2", dto.getString("empty"));
  329. data.put("address3", dto.getString("empty"));
  330. data.put("city", dto.getString("cityName"));
  331. data.put("zipCode", dto.getString("empty"));//--> kosong
  332. data.put("country", dto.getString("empty"));
  333. data.put("phone1", dto.getString("customerPhoneNumber"));
  334. data.put("phone2", dto.getString("empty"));
  335. data.put("fax1", dto.getString("empty"));
  336. data.put("fax2", dto.getString("empty"));
  337. data.put("email", dto.getString("customerEmail"));
  338. data.put("department", dto.getString("empty"));
  339. data.put("jobLevel", dto.getString("empty"));
  340. data.put("phoneExt1", dto.getString("empty"));
  341. data.put("phoneExt2", dto.getString("empty"));
  342. data.put("mobilePhone1", dto.getString("empty"));
  343. data.put("mobilePhone2", dto.getString("empty"));
  344. data.put("flgResponsibility", dto.getString("yes"));
  345. data.put("flgEmailNotif", dto.getString("yes"));
  346. data.put("flgEmailNotifAp", dto.getString("yes"));
  347. data.put("flgEmailNotifAr", dto.getString("yes"));
  348. this.prepareInsertAudit(data, dto.getLong("userId"), dto.getString("datetime"));
  349. this.prepareUpdateAudit(data, dto.getLong("userId"), dto.getString("datetime"));
  350. return data;
  351. }
  352.  
  353. private Dto setPartnerTypeDto(Dto dto){
  354. Dto data = new Dto();
  355. data.put("tenantId",dto.getLong("tenantId"));
  356. data.put("partnerId",dto.getLong("partnerId"));
  357. data.put("groupPartner",dto.getString("groupPartner"));
  358. data.put("typePartnerId",dto.getLong("typePartnerId"));
  359. data.put("dueDate",0L);
  360. data.put("currencyCode",dto.getString("currencyCode"));
  361. data.put("amountLimit",dto.getDouble("zeroPoint"));
  362. data.put("flagCommision",dto.getString("no"));
  363. return data;
  364. }
  365.  
  366. private Dto setSoDto(Dto dto){
  367. Dto data = new Dto();
  368. data.put("tenantId", dto.getLong("tenantId"));
  369. data.put("docTypeId", dto.getLong("docTypeId"));
  370. data.put("docNo", dto.getString("datetime"));
  371. data.put("docDate", dto.getString("today"));
  372. data.put("ouId", dto.getLong("ouId"));
  373. data.put("extDocNo", dto.getString("preOrderDocNo"));
  374. data.put("extDocDate", dto.getString("preOrderDocDate"));
  375. data.put("refDocTypeId", dto.getLong("preOrderDocTypeId"));
  376. data.put("refId", dto.getLong("preOrderId"));
  377. data.put("partnerId", dto.getLong("partnerId"));
  378. data.put("partnerCpId", dto.getLong("partnerCpId"));
  379. data.put("partnerBillToId", dto.getLong("partnerId"));
  380. data.put("partnerShipToId", dto.getLong("partnerId"));
  381. data.put("partnerShipAddressId", dto.getLong("nullLong"));
  382. data.put("dueDate", dto.getString("empty"));
  383. data.put("salesmanId", dto.getLong("nullLong"));
  384. data.put("flgDelivery", dto.getString("yes"));
  385. data.put("currCode", dto.getString("currencyCode"));
  386. data.put("addDiscountPercentage", dto.getDouble("zeroPoint"));
  387. data.put("addDiscountAmount", dto.getDouble("zeroPoint"));
  388. data.put("statusDoc", dto.getString("statusDraft"));
  389. data.put("workflowStatus", dto.getString("workflowStatusDraft"));
  390. data.put("partnerShipCpId", dto.getLong("partnerCpId"));
  391. data.put("partnerShipCpName", dto.getString("partnerCpName"));
  392. data.put("partnerShipCpPhone1", dto.getString("customerPhoneNumber"));
  393. data.put("partnerShipCpPhone2", dto.getString("empty"));
  394. data.put("flgShowInvTax", dto.getString("no"));
  395. data.put("flgOldStatus", dto.getString("no"));
  396. data.put("regularDiscountPercentage", dto.getDouble("zeroPoint"));
  397. data.put("termOfPayment", dto.getDouble("zeroPoint"));
  398. this.prepareInsertAudit(data, dto.getLong("userId"), dto.getString("datetime"));
  399. this.prepareUpdateAudit(data, dto.getLong("userId"), dto.getString("datetime"));
  400. return data;
  401. }
  402.  
  403. private List setSoItemList(Dto dto){
  404. List<Dto> setSoItemDto = new ArrayList<Dto>();
  405. List<Dto> itemList = dto.getList("itemList");
  406. Long lineNo = 0L;
  407. for(Dto item : itemList){
  408. Dto productParamDto = new Dto();
  409. productParamDto.put("productCode", item.getString("productCode"));
  410. productParamDto.put("preOrderDocNo", dto.getString("preOrderDocNo"));
  411. productParamDto.put("tenantId", dto.getLong("tenantId"));
  412. Dto productDataDto = getProductData(productParamDto);
  413.  
  414. log.info("Item List Content : "+item+"\n");
  415.  
  416. if(item.getLong("orderQty") < productDataDto.getLong("minQty")) {
  417. throw new CoreException(" order qty can't less than "+productDataDto.getLong("minQty"));
  418. }
  419.  
  420. Dto data = new Dto();
  421. data.put("tenantId", dto.getLong("tenantId"));
  422. data.put("soId", dto.getLong("nullLong"));
  423. data.put("lineNo", lineNo =+ 1L);
  424. data.put("refDocTypeId", dto.getLong("nullLong"));
  425. data.put("refId", dto.getLong("nullLong"));
  426. data.put("partnerShipToId", dto.getLong("partnerId"));
  427. data.put("partnerShipAddressId", dto.getLong("nullLong"));
  428. data.put("productId", productDataDto.getLong("productId"));
  429. data.put("qtySo", item.getLong("orderQty"));
  430. data.put("soUomId", productDataDto.getLong("uomId"));
  431. data.put("qtyInt", 0L);
  432. data.put("baseUomId", productDataDto.getLong("uomId"));
  433. data.put("currCode", dto.getString("currencyCode"));
  434. data.put("grossSellPrice", productDataDto.getDouble("sellPrice"));
  435. data.put("flgTaxAmount", dto.getString("no"));
  436. data.put("taxId", dto.getLong("nullLong"));
  437. data.put("taxPercentage", dto.getDouble("zeroPoint"));
  438. data.put("taxPrice", dto.getDouble("zeroPoint"));
  439. data.put("promoCode", dto.getString("empty"));
  440. data.put("discountAmount", dto.getDouble("zeroPoint"));
  441. data.put("nettSellPrice", productDataDto.getDouble("sellPrice"));
  442. data.put("taxAmount", dto.getDouble("zeroPoint"));
  443. data.put("nettItemAmount", item.getLong("orderQty")*productDataDto.getDouble("sellPrice")+data.getDouble("taxAmount")-data.getDouble("discountAmount"));
  444. data.put("eta", productDataDto.getString("deliveryDate"));
  445. data.put("etaDay", dto.getString("empty"));
  446. data.put("flgDisc", dto.getString("no"));
  447. this.prepareInsertAudit(data, dto.getLong("userId"), dto.getString("datetime"));
  448. this.prepareUpdateAudit(data, dto.getLong("userId"), dto.getString("datetime"));
  449.  
  450. data.put("uomName", productDataDto.getString("uomName"));
  451. data.put("productName", productDataDto.getString("productName"));
  452.  
  453. setSoItemDto.add(data);
  454.  
  455. }
  456. return setSoItemDto;
  457. }
  458.  
  459. private Long getTenantId(Dto dto){
  460. QueryBuilder builder = new QueryBuilder();
  461. builder.add(" SELECT tenant_id ");
  462. builder.add(" FROM t_tenant ");
  463. builder.add(" WHERE tenant_code = :merchantCode ");
  464.  
  465. Query query = soDao.createNativeQuery(builder.toString());
  466. query.setParameter("merchantCode", dto.getString("merchantCode"));
  467.  
  468. return Long.valueOf(query.getSingleResult().toString());
  469. }
  470.  
  471. private Long getOuId(Dto dto){
  472. QueryBuilder builder = new QueryBuilder();
  473. builder.add(" SELECT A.ou_id ");
  474. builder.add(" FROM t_ou A ");
  475. builder.add(" JOIN t_ou_type B ON A.ou_type_id = B.ou_type_id ");
  476. builder.add(" WHERE B.ou_type_code = :ouTypeCode ");
  477. builder.add(" AND A.tenant_id = :tenantId ");
  478.  
  479. Query query = soDao.createNativeQuery(builder.toString());
  480. query.setParameter("ouTypeCode", dto.getString("ouTypeCode"));
  481. query.setParameter("tenantId", dto.getLong("tenantId"));
  482.  
  483. return Long.valueOf(query.getSingleResult().toString());
  484. }
  485.  
  486. private Dto getPreOrderData(Dto dto){
  487. QueryBuilder builder = new QueryBuilder();
  488. builder.add(" SELECT A.quotation_id, A.doc_type_id, A.doc_date, ");
  489. builder.add(" A.partner_name, B.bank_code, B.account_no, ");
  490. builder.add(" B.account_name1, C.phone1 ");
  491. builder.add(" FROM sl_quotation A ");
  492. builder.add(" JOIN m_partner_bank B ON A.partner_id = B.partner_id ");
  493. builder.add(" JOIN m_partner_cp C ON A.partner_id = C.partner_id ");
  494. builder.add(" WHERE A.doc_no = :preOrderDocNo ");
  495. builder.add(" AND A.tenant_id = :tenantId ");
  496.  
  497. Query query = soDao.createNativeQuery(builder.toString());
  498. query.setParameter("preOrderDocNo", dto.getString("preOrderDocNo"));
  499. query.setParameter("tenantId", dto.getLong("tenantId"));
  500.  
  501. List<Object[]> resultList = query.getResultList();
  502. List<Dto> finalResultList = DtoUtil.createDtoListFromArray(resultList,
  503. "preOrderId", "preOrderDocTypeId", "preOrderDocDate",
  504. "merchantName", "merchantBank", "merchantBankAccountNo",
  505. "merchantAccountName", "merchantPhoneNumber");
  506.  
  507. if (finalResultList.size() > 0) {
  508. return new Dto(finalResultList.get(0));
  509. }
  510. throw new DataNotFoundException("Pre Order not found");
  511. }
  512.  
  513. private Dto getPartnerData(Dto dto){
  514. QueryBuilder builder = new QueryBuilder();
  515. builder.add(" SELECT A.partner_id, B.partner_cp_id, B.cp_name ");
  516. builder.add(" FROM m_partner A ");
  517. builder.add(" JOIN m_partner_cp B ON A.partner_id = B.partner_id ");
  518. builder.add(" JOIN m_partner_type C ON A.partner_id = C.partner_id "); //--> m_partner_type
  519. builder.add(" WHERE A.partner_code = :customerPhoneNumber ");
  520. builder.add(" AND A.tenant_id = :tenantId ");
  521.  
  522. Query query = partnerDao.createNativeQuery(builder.toString());
  523. query.setParameter("customerPhoneNumber", dto.getString("customerPhoneNumber"));
  524. query.setParameter("tenantId", dto.getLong("tenantId"));
  525.  
  526. List<Object[]> resultList = query.getResultList();
  527.  
  528. if (resultList.size() > 0) {
  529. List<Dto> finalResultList = DtoUtil.createDtoListFromArray(resultList, "partnerId", "partnerCpId", "partnerCpName" );
  530. return new Dto(finalResultList.get(0));
  531. }
  532.  
  533. return null;
  534.  
  535. }
  536.  
  537. private Dto getProductData(Dto dto){
  538. log.info("Dto in Product Data : "+dto+"\n");
  539. QueryBuilder builder = new QueryBuilder();
  540. builder.add(" SELECT D.product_id, D.base_uom_id, D.product_name, ");
  541. builder.add(" B.sell_price, F.uom_name, C.delivery_date,A.min_qty ");
  542. builder.add(" FROM sl_quotation A ");
  543. builder.add(" JOIN sl_quotation_item B ON A.quotation_id = B.quotation_id ");
  544. builder.add(" JOIN sl_quotation_item_preorder C ON B.quotation_item_id = C.quotation_item_id ");
  545. builder.add(" JOIN m_product D ON D.product_id = B.product_id ");
  546. builder.add(" JOIN m_uom F ON B.uom_id = F.uom_id ");
  547. builder.add(" WHERE D.product_code = :productCode ");
  548. builder.add(" AND A.doc_no = :preOrderDocNo ");
  549. builder.add(" AND D.tenant_id = :tenantId ");
  550.  
  551. Query query = partnerDao.createNativeQuery(builder.toString());
  552. query.setParameter("productCode", dto.getString("productCode"));
  553. query.setParameter("preOrderDocNo", dto.getString("preOrderDocNo"));
  554. query.setParameter("tenantId", dto.getLong("tenantId"));
  555.  
  556. List<Object[]> resultList = query.getResultList();
  557. List<Dto> finalResultList = DtoUtil.createDtoListFromArray(resultList,
  558. "productId", "uomId", "productName",
  559. "sellPrice", "uomName", "deliveryDate","minQty" );
  560.  
  561. // for(Dto item : finalResultList){
  562. // productDto.put("productId", item.getLong("productId"));
  563. // productDto.put("uomId", item.getLong("uomId"));
  564. // productDto.put("sellPrice", item.getDouble("sellPrice"));
  565. // productDto.put("deliveryDate", item.getString("deliveryDate"));
  566. // }
  567.  
  568.  
  569. if(finalResultList.size() > 0){
  570. return new Dto(finalResultList.get(0));
  571. }
  572.  
  573. throw new DataNotFoundException("Pre Order not found");
  574. }
  575.  
  576. private Dto getTypePartnerData(Dto dto){
  577. Dto typePartnerDto = new Dto();
  578. QueryBuilder builder = new QueryBuilder();
  579. builder.add(" SELECT type_partner_id, group_partner ");
  580. builder.add(" FROM m_type_partner ");
  581. builder.add(" WHERE type_partner_code = :typePartnerCode ");
  582.  
  583. Query query = partnerDao.createNativeQuery(builder.toString());
  584. query.setParameter("typePartnerCode", dto.getString("typePartnerCode"));
  585.  
  586. List<Object[]> resultList = query.getResultList();
  587. List<Dto> finalResultList = DtoUtil.createDtoListFromArray(resultList, "typePartnerId", "groupPartner");
  588.  
  589. for(Dto item : finalResultList){
  590. typePartnerDto.put("typePartnerId", item.getLong("typePartnerId"));
  591. typePartnerDto.put("groupPartner", item.getString("groupPartner"));
  592. }
  593.  
  594. return typePartnerDto;
  595.  
  596. }
  597.  
  598. private void sentEmailToCustomer(Dto dto) throws Exception{
  599.  
  600. String currency = "Rp";
  601. String year = dto.getString("datetime").substring(0, 4);
  602. String month = dto.getString("datetime").substring(4, 6);
  603. String date = dto.getString("datetime").substring(6, 8);
  604. String hour = dto.getString("datetime").substring(8, 10);
  605. String minute = dto.getString("datetime").substring(10, 12);
  606.  
  607. Dto soItemDto = new Dto(setSoItemList(dto).get(0));
  608. log.info("nettItemAmount : "+soItemDto.getDouble("nettItemAmount")+"\n");
  609.  
  610. String strUang = MoneyFormat.separator(soItemDto.getDouble("nettItemAmount"));
  611. log.info("strUang : "+strUang+"\n");
  612.  
  613. String trxDate = date.concat("-").concat(month).concat("-").concat(year).concat(" ").concat(hour).concat(":").concat(minute);
  614. String totalOrder = soItemDto.getLong("qtySo").toString().concat(" ").concat(soItemDto.getString("uomName"));
  615.  
  616. Dto templateDto = new Dto();
  617. templateDto.put("namaPemesan", dto.getString("customerName"));
  618. templateDto.put("namaToko", dto.getString("merchantName"));
  619. templateDto.put("waktuTransaksi", trxDate);
  620. templateDto.put("noTelpPemesan", dto.getString("customerPhoneNumber"));
  621. templateDto.put("namaMenu", soItemDto.getString("productName"));
  622. templateDto.put("jumlahPemesan", totalOrder);
  623. templateDto.put("totalPembayaran", currency+" "+strUang);
  624. templateDto.put("namaRekening", dto.getString("merchantBank"));
  625. templateDto.put("noRekening", dto.getString("merchantBankAccountNo"));
  626. templateDto.put("namaPenerima", dto.getString("merchantAccountName"));
  627. templateDto.put("noTelpPenerima", dto.getString("merchantPhoneNumber"));
  628.  
  629. log.info("Template Email Dto : "+templateDto+"\n");
  630.  
  631. emailServiceImpl.sendMessageWithTemplate(dto.getString("customerEmail"), "Bukti Pembayaran", "Invoice.html", templateDto);
  632.  
  633. }
  634.  
  635. }
Add Comment
Please, Sign In to add comment