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);