pada ax 2012, customer membutuhkan sebuah validasi pada saat setelah sales order selesai, user yang mau membuat picking list harus ada validasi bahwa sudah ada dilakukan advance payment
yang perlu diketahui:
- pada salestable form dan salestablelistpage form menggunakan interaction class
- salestable form -> salestableinteraction class
- salestablelistpage form -> salestablelistpageinteraction
berikut ini adalah sedikit customnya:
- perhatikan gambar di bawah
- ada object dengan nama buttonUpdatePickingList
- pada object tersebut, perhatikan bahwa ini yang akan dibuat enable disable, maka harus di check bahwa object ini status autodeclarationnya true
- perhatikan pada salestable:active, pada modul ini menandakan “ketika mencapai record ini maka akan terjadi bla bla”
- nah di sana tinggal cari relasi object buttonUpdatePickingList yang terbuat dari method active dan ditemukan lah fungsi ini, toc_setbuttonpickandpack
- kita periksa code ini, dia akan menuju ke source lain yaitu
public void TOC_SetButtonPickAndPack() { SDX_CustDOJour doJour; select firstOnly firstFast * from doJour where doJour.SalesId == SalesTable.SalesId; //added by toc rny on feb 17, 2015 if(SalesParameters::find().TOC_DOEnhancement && !doJour) { buttonUpdateDeliveryOrder.enabled(false); buttonProformaDeliveryOrder.enabled(false); if(salestable.SalesOrderWorkflowState < SalesOrderWorkflowState::Approved) { buttonUpdatePickingList.enabled(false); } else { if(!salestable.SDX_RequireAdvance) buttonUpdatePickingList.enabled(true); else if(TOC_DO_Enhancement::CheckAdvancePaymentSettle(salestable.SalesId)) buttonUpdatePickingList.enabled(true); else buttonUpdatePickingList.enabled(false); } } }
pada code ini, kita bisa lihat, bila buttonUpdatePickingList akan di enable true false bila:
- salesorderworkflow nya belum di approve maka false
- bila ada field sdx_requireadvance statusnya NoYes::Yes maka true
- bila fungsi cekadvancepaymentsettle mengatakan sdh ada advance payment maka true
- sisanya di set false
- karena kita akan membuat custom bila cekadvancepaymentsettle maka kita langsung ke modul tsb
- pada code tsb berisi:
public static boolean CheckAdvancePaymentSettle(salesId _salesId) { boolean status = false; boolean isSettle = false; LedgerJournalTable ledgerJournalTable; LedgerJournalTrans ledgerjournalTrans; SalesTable salesTable = SalesTable::find(_salesId); CustTrans custtrans; select firstOnly firstFast * from LedgerJournalTable where LedgerJournalTable.SDX_SalesId == _salesId //tambahan di sini ronny 20250613-1502 perbaikan dp && ledgerJournalTable.SDX_AdvanceAmount ; while select * from LedgerJournalTrans where LedgerJournalTrans.JournalNum == LedgerJournalTable.JournalNum { select firstonly firstfast * from custtrans where custtrans.Voucher == ledgerjournalTrans.Voucher && custtrans.AmountCur > 0; if(custtrans.LastSettleVoucher) { isSettle = true; break; } } return isSettle; }
ini adalah logic di mana pada journal payment sdh dilakukan atau belum jika sdh dilakukan dan sudah di settle maka dianggap bisa enable picking listnya