From 6888f5a1dd9f5b0745329486d44f13a3d26a619f Mon Sep 17 00:00:00 2001 From: luca83 Date: Wed, 27 Jan 2010 16:30:42 +0000 Subject: [PATCH] =?UTF-8?q?Patch=20level=20=20=20=20=20=20=20=20=20:=2010.?= =?UTF-8?q?0=20patch=20592=20Files=20correlati=20=20=20=20=20:=20lv3=20Ric?= =?UTF-8?q?ompilazione=20Demo=20:=20[=20]=20Commento=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20:=20Adesso=20la=20quantit=C3=A0=20da=20consegnar?= =?UTF-8?q?e=20sulle=20righe=20spezzate=20viene=20arrotondata?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: svn://10.65.10.50/trunk@19999 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- lv/lv3200.cpp | 46 +++++++++++++++++++++++++++++++++++++++++++--- lv/lv3400.cpp | 49 ++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 91 insertions(+), 4 deletions(-) diff --git a/lv/lv3200.cpp b/lv/lv3200.cpp index c54db9b53..163a9eb0c 100755 --- a/lv/lv3200.cpp +++ b/lv/lv3200.cpp @@ -42,6 +42,7 @@ protected: void riordina_righe(); void genera_documento(); void evadi_tutto(); + int arrotonda(const int quantita); void spezza_riga(); void salva(); void annulla_operazioni(); @@ -165,7 +166,7 @@ void TEvasione_msk::setta_campi_cliente() TString query = "USE LVRCONSPLAN KEY 3\n"; query << "FROM CODCF=" << get(F_CODCF) << " CODCONT=" << get(F_CODCONT) << " DTCONS=" << data << "\n"; - query << "TO CODCF=" << get(F_CODCF) << " CODCONT=" << get(F_CODCONT) << " DTCONS=" << adata << "\n"; + query << "TO CODCF=" << get(F_CODCF) << " CODCONT=" << get(F_CODCONT) << " DTCONS=" << adata << "\n"; TISAM_recordset consegne(query); if (consegne.items() >= 2) @@ -655,6 +656,45 @@ void TEvasione_msk::evadi_tutto() genera_documento(); } +int TEvasione_msk::arrotonda(const int quantita) +{ + int perarr = ini_get_int(CONFIG_DITTA, "lv", "Perarr"); + int qta = quantita; + + const TString& codart = get(FR_CODART); + //instanzio una cache sulla tabella del magazzino + const TRectype& anamag = cache().get(LF_ANAMAG,codart); + //recupero i dati di interesse dall'anagrafica di magazzino + const long ppconf = anamag.get_long(ANAMAG_PPCONF); + if (ppconf > 0) + { + //recupero dal documento i dati di interesse per recuperare... + //...i dati dalla riga contratto + const long codcf = get_long(F_CODCF); + const long codcn = get_long(F_CODCONT); + + const TLaundry_contract cont(codcf, codcn); + //leggo la riga del contratto per l'articolo corrente + const TRectype& rcont = cont.row(codart); + //recupero i dati di interesse dalla riga del contratto + if (rcont.get_int(LVRCONDV_CALCCONS) == 1) + { + //calcolo di quanti pezzi sforo + long arr = quantita % ppconf; + + //calcolo quanti pezzi in pił o in meno gli devo dare e aggiorno la quantitą + if (arr > ppconf * perarr / 100) //arr <= ppconf*perarr/100 -> formula calcolo congualgio di Tassan + { + arr = ppconf - arr; + qta += arr; + } + else + qta -= arr; + } + } + return qta; +} + //SPEZZA_RIGA: metodo che spezza una riga del buono in due righe, una per la quota evasa e una per la quota da evadere void TEvasione_msk::spezza_riga() { @@ -668,8 +708,8 @@ void TEvasione_msk::spezza_riga() TToken_string& riga2 = sheet.row(-1); riga2 = *riga1; - //scrivi le quantitą sulla seconda riga - const int dacons2 = riga2.get_int(sheet.cid2index(S_RITIRATO)) - riga2.get_int(sheet.cid2index(S_CONSEGNATO)); + //scrivi le quantitą sulla seconda riga + const int dacons2 = arrotonda(riga2.get_int(sheet.cid2index(S_RITIRATO)) - riga2.get_int(sheet.cid2index(S_CONSEGNATO))); riga2.add(dacons2, sheet.cid2index(S_RITIRATO)); riga2.add(dacons2, sheet.cid2index(S_DACONS)); riga2.add(0L, sheet.cid2index(S_CONSEGNATO)); diff --git a/lv/lv3400.cpp b/lv/lv3400.cpp index a8b0a26e6..8970a6c98 100755 --- a/lv/lv3400.cpp +++ b/lv/lv3400.cpp @@ -198,6 +198,7 @@ protected: void registra(); void riempi_sheet(); + int arrotonda(int quantita); void spezza_riga(); bool controlla(); @@ -793,6 +794,52 @@ void TEvasione_ter_msk::riempi_sheet() sheet.force_update(); } +int TEvasione_ter_msk::arrotonda(const int quantita) +{ + int perarr = ini_get_int(CONFIG_DITTA, "lv", "Perarr"); + int qta = quantita; + + const TString& codart = get(FR_CODART); + //instanzio una cache sulla tabella del magazzino + const TRectype& anamag = cache().get(LF_ANAMAG,codart); + //recupero i dati di interesse dall'anagrafica di magazzino + const long ppconf = anamag.get_long(ANAMAG_PPCONF); + if (ppconf > 0) + { + //recupero dal documento i dati di interesse per recuperare... + //...i dati dalla riga contratto + const long codcf = get_long(F_TCODCF); + const TDate data = get_date(F_TDATADOC); + + TToken_string key; + key.add('C'); + key.add(codcf); + const int codindsp = atoi(cache().get(LF_CFVEN, key, CFV_CODINDSP)); + const TLaundry_contract cont(codcf, codindsp, data); + const long codcn = cont.get_int(LVCONDV_CODCONT); + + + //leggo la riga del contratto per l'articolo corrente + const TRectype& rcont = cont.row(codart); + //recupero i dati di interesse dalla riga del contratto + if (rcont.get_int(LVRCONDV_CALCCONS) == 1) + { + //calcolo di quanti pezzi sforo + long arr = quantita % ppconf; + + //calcolo quanti pezzi in pił o in meno gli devo dare e aggiorno la quantitą + if (arr > ppconf * perarr / 100) //arr <= ppconf*perarr/100 -> formula calcolo congualgio di Tassan + { + arr = ppconf - arr; + qta += arr; + } + else + qta -= arr; + } + } + return qta; +} + //SPEZZA_RIGHE: metodo che spezza le righe documento se richiesto void TEvasione_ter_msk::spezza_riga() { @@ -822,7 +869,7 @@ void TEvasione_ter_msk::spezza_riga() TQuantita_riga qr1; qr1.set_evaso(false); qr1.set_qta_rit(qtadacon - qtacon); - qr1.set_qta_da_con(qtadacon - qtacon); + qr1.set_qta_da_con(arrotonda(qtadacon.integer() - qtacon.integer())); qr1.set_qta_con(ZERO); qr1.set_pacchi(0);