#include #include #include #include #include #include #include #include "vbusiness/vframe/listwin.vframe.vbusiness.hpp" #include "vbusiness/vframe/maint.vframe.vbusiness.hpp" #include using xml = KXMLDOMDocument; class __declspec(dllexport) PaymentTermEdit : public maint { public: xdwtable dw_base; xdwtable dw_p; xcell dw_cell; xstring sCryno; public: PaymentTermEdit(void* implPtr, HWND hWnd) :maint(implPtr, hWnd) {} public: static PaymentTermEdit* CreateInstance(void* implPtr, void* hWnd) { PaymentTermEdit* pWin = new PaymentTermEdit(implPtr, (HWND)hWnd); return pWin; } int OnAddrow() { dw_p = dw_base.FindDwTable(L"line"); int i; double dDueAmount = 0; double dPercnet = 100; for (i = 1 ; i <= dw_p.GetRowCount();i++) { dDueAmount = dw_p.GetItemDouble(i,L"DueAmount"); if (dDueAmount > 0) break; dPercnet = dPercnet - dw_p.GetItemDouble(i,L"DuePercent"); } int irow = dw_p.InsertRow(0); dw_p.SetItemString(irow,L"SeqNo",xstring(irow)); if (dDueAmount <= 0) dw_p.SetItemDouble(irow,L"DuePercent",dPercnet); return 1; } int OnDeleterow() { dw_p = dw_base.FindDwTable(L"line"); int row2 = dw_p.GetRow(); if (row2 < 1) return 0; dw_p.DeleteRow(row2); return 1; } xstring OnCreateTxt() { //dw_1.AcceptText(); //²»Äܼӻᱨ´í int irow; //int icnt = dw_1.GetRowCount(); dw_p = dw_base.FindDwTable(L"line"); int icnt = dw_p.GetRowCount(); if (icnt < 1) return L""; xstring sTxt; //double dPercnet = 100; for (irow = 1;irow <= icnt ;irow ++) { xstring sPaymentMethod = dw_p.GetItemString(irow,L"PaymentMethod"); //Ö§¸¶·½Ê½ //xstring sDueDays = dw_p.GetItemDisplayString(irow,L"DueDays"); xstring sDueDays = dw_p.GetItemString(irow,L"DueDays"); //ÆÚÏÞ xstring sDuePercent = dw_p.GetItemString(irow,L"DuePercent"); //±ÈÀý xstring sDueAmount = dw_p.GetItemString(irow,L"DueAmount"); //½ð¶î if (!sPaymentMethod || sPaymentMethod == L"") sTxt = sTxt + L""; if (!sDueDays || sDueDays == L"") sTxt = sTxt + L""; else { if (sDueDays == L"-1") sDueDays = L" IN ADVANCE"; else if (sDueDays == L"0") sDueDays = L" AT SIGHT"; else { if (sPaymentMethod == L"T/T") sDueDays = L" WITHIN "+sDueDays + L" DAYS AFTER SHIPMENT"; else sDueDays = L" AT "+sDueDays + L" DAYS"; } if (!sDuePercent || sDuePercent == L"") { if (!sDueAmount || sDueAmount == L"") sTxt = sTxt + L""; else { sTxt = sTxt + sCryno + L" " + sDueAmount + L" " + sPaymentMethod + sDueDays + L";"; } } else { if (sDuePercent.find(L".",0) >= 0) { while (sDuePercent.right(1) == L"0") { sDuePercent = sDuePercent.left(sDuePercent.length() - 1); } if (sDuePercent.right(1) == L".") sDuePercent = sDuePercent.left(sDuePercent.length() - 1); } sTxt = sTxt + sDuePercent + L"% " + sPaymentMethod+ sDueDays + L";"; } } } sTxt = sTxt.mid(0,sTxt.length() - 1); if (sTxt != L"") sTxt = sTxt + L"."; return sTxt; } int OnOk() { dw_base.AcceptText(); //ÅжÏÊÇ·ñÓбØÊäֵΪ¿Õ dw_p = dw_base.FindDwTable(L"line"); double dPercnet = 0; double dAmount = 0; xstring sChargeAll = L""; if (dw_p) { int i; for (i=1;i <= dw_p.GetRowCount();i++) { xstring seqNo = dw_p.GetItemString(i,L"SeqNo"); xstring sPaymentMethod = dw_p.GetItemString(i,L"PaymentMethod"); xstring sDueDays = dw_p.GetItemString(i,L"DueDays"); xstring sDuePercent = dw_p.GetItemString(i,L"DuePercent"); dPercnet = dPercnet + sDuePercent.toDouble(); xstring sDueAmount = dw_p.GetItemString(i,L"DueAmount"); dAmount = dAmount + sDueAmount.toDouble(); if (!seqNo) seqNo = L""; if (!sPaymentMethod) sPaymentMethod = L""; if (!sDueDays) sDueDays = L""; if (!sDuePercent) sDuePercent = L""; if (!sDueAmount) sDueAmount = L""; dw_p.SetItemString(i,L"SeqNo",xstring(i)); sChargeAll = sPaymentMethod + sDueDays + sDuePercent + sDueAmount; if (sChargeAll != L"") { if (sPaymentMethod == L"") { alert(L"Ö§¸¶·½Ê½²»ÄÜΪ¿Õ£¡"); return 0; } if (sDueDays == L"") { alert(L"ÆÚÏÞ²»ÄÜΪ¿Õ£¡"); return 0; } } } } //°Ù·Ö±ÈУÑé if (dw_p.GetRowCount() <= 1 && sChargeAll == L"") {} else { if (dPercnet != 100) { if (dAmount <= 0) { alert(L"±ÈÂʲ»µÈÓÚ100£¡"); return 0; } } } xstring sTxt = OnCreateTxt(); dw_base.SetItemString(1,L"PaymentTermEx",sTxt); //CloseWindow(); return 1; } int OnItemChanged(TEvent* evt, LPARAM p) { DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh; xstring colname=hdr.colname; xstring value = hdr.data; int row = hdr.row; if (colname == L"DueDays") { xdwtable dw; dw = dw_base.FindDwTable(L"line"); if (dw) { xstring sPaymentMethod = dw.GetItemString(row,L"PaymentMethod"); if (value == L"0") { if (sPaymentMethod == L"T/T") { //alert(L"´ËÖ§¸¶·½Ê½ÆÚÏÞ²»ÄÜΪ 0 £¨AT SIGHT£©"); //return -1; } } else if (value == L"-1") { if (sPaymentMethod != L"T/T") { alert(L"´ËÖ§¸¶·½Ê½ÆÚÏÞ²»ÄÜΪ -1£¨IN ADVANCE£©"); return -1; } } } } //Éú³ÉÖ§¸¶Ìõ¿îÎı¾ if (colname == L"PaymentMethod" || colname == L"DueDays" || colname == L"DuePercent" || colname == L"DueAmount") { xstring sTxt = OnCreateTxt(); dw_base.SetItemString(1,L"Description",sTxt); } return 1; } int OnClick(TEvent* evt, LPARAM p) { DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh; xstring value = hdr.data; xstring colname = hdr.colname; int row = hdr.row; xaserverarg arg; //alert(row.toString()); xdwtable dw; dw = dw_base.FindDwTable(L"line"); //alert(colname); if (dw) { if (colname == L"DuePercent") { int i; int icnt = dw.GetRowCount(); if (icnt < 1) return 0; double dDueAmount = 0; for (i = 1 ; i <= icnt ; i++) { dDueAmount = dw.GetItemDouble(i,L"DueAmount"); if (dDueAmount > 0) break; } dw_cell.setNativePointer(dw_base.QueryItem(L"ixcell")); if (dDueAmount > 0) { dw.SetColumnProp(L"DuePercent",L"cellprotect",L"±£»¤");//±£»¤ÖÐÎĹæ¸ñ } else { dw.SetColumnProp(L"DuePercent",L"cellprotect",L"²»±£»¤");//±£»¤ÖÐÎĹæ¸ñ } } if (colname == L"DueAmount") { int j; int jcnt = dw.GetRowCount(); if (jcnt < 1) return 0; double dDuePercent = 0; for (j = 1 ; j <= jcnt ; j++) { dDuePercent = dw.GetItemDouble(j,L"DuePercent"); if (dDuePercent > 0) break; } if (dDuePercent > 0) { dw.SetColumnProp(L"DueAmount",L"cellprotect",L"±£»¤");//±£»¤ÖÐÎĹæ¸ñ } else { dw.SetColumnProp(L"DueAmount",L"cellprotect",L"²»±£»¤");//±£»¤ÖÐÎĹæ¸ñ } } } return 1; } //±£´æÊ¼þ int OnSave() { if(OnOk()<1)return 0; dw_base = GetControl(L"dw_base"); dw_base.AcceptText(); //dw_bank.AcceptText(); xml x ; xaserverarg arg ; dw_base.DwUpdateAllTo(x); //dw_bank.DwUpdateAllTo(x); //alert(x.xml()); arg.AddArg(L"content",x.xml()); arg.AddArg(L"dbmap",L"FND_PaymentTerm.dbmap"); //return 0; if (getUrl(L"/sale/data/PaymentTerm/entity/company/save",arg.GetString(),x) != 1) { alert(L"±£´æÊ§°Ü!"); return 0; } else { //alert(x.xml()); if(x.selectSingleNode(L"error")) { alert(L"±£´æ³ö´í2!"); return 0; } arg.AddArg(L"ret",L"Ok"); MessageBox(GetHWND(),L"±£´æ³É¹¦£¡",L"Ìáʾ",0); //alert(L"±£´æ³É¹¦"); dw_base.ResetUpdateStatus(); //dw_bank.ResetUpdateStatus(); //xwin::SendMessage(parenthwnd, 0x401, L"maintsave", 0);//֪ͨlist´°¿Ú¸üÐÂÊý¾Ý } //alert(L"±£´æ³É¹¦"); dw_base.Redraw(); //dw_bank.Redraw(); CloseWindow(); return 0; } int OnCmdDispatch(xstring comdid) { //alert(comdid); if(comdid==L"xmOk") OnSave(); else if(comdid==L"addrow") OnAddrow(); else if(comdid==L"deleterow") OnDeleterow(); //else if(comdid==L"AddRow") OnAddRow(); //else if(comdid==L"InsertRow") OnInsertRow(); //else if(comdid==L"DeleteRow")OnDeleteRow(); return 1; } //°´Å¥Ê¼þ int OnXCommand(TEvent* evt, LPARAM param) { return OnCmdDispatch(evt->xcommand.pStrID); } int OnAttachEvent() { //°´Å¥Ê¼þ AttachEvent(L"WM_XCOMMAND", (FEvent)&PaymentTermEdit::OnXCommand); //»ñÈ¡½¹µãʼþ£¬ÓÃÓÚÖØÖù¤¾ßÌõ //AttachEvent(L"WM_SETFOCUS",OnSetFocus); AttachEvent(L"dw_base",L"DWV_ITEMCHANGED", (FEvent)&PaymentTermEdit::OnItemChanged); AttachEvent(L"dw_base",L"DWV_CLICKED", (FEvent)&PaymentTermEdit::OnClick); return 1; } int OnRetrieve() { if(GetWinParam()) { int p = GetArg(); xaserverarg args ; xstring id = args.GetArgString(L"EntityID"); //alert(id); if(id==L"new") { //OnAddNew(); } else { xml x ; if(getUrl(L"/sale/data/PaymentTerm/entity/base12", args.GetString(), x) != 1) { alert(L"´íÎó"); return -1; } //alert(x.xml()); dw_base.Retrieve(x); //dw_bank.Retrieve(x); dw_base.Redraw(); //dw_bank.Redraw(); } } return 1; } int onload() { SetArg(); //maint::onload(); //maint::onloaded(); dw_base = GetControl(L"dw_base"); dw_base.openUrl(L"/sale/view/Payment/template/Payment/maint"); dw_cell = dw_base.QueryItem(L"ixcell"); //alert(L"1233"); OnRetrieve(); OnAttachEvent(); //dw_base = GetControl(L"dw_base"); return 1; } int onloaded() { //maint::onloaded(); //alert(L"response"); //dw_base = GetControl(L"dw_base"); //dw_cell = new xcell; //dw_cell.setNativePointer(dw_base.QueryItem(L"ixcell")); return -1; } };