Patch level : 10.0 patch 592

Files correlati     : lv3
Ricompilazione Demo : [ ]
Commento            :
Adesso la quantità da consegnare sulle righe spezzate viene arrotondata


git-svn-id: svn://10.65.10.50/trunk@19999 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca83 2010-01-27 16:30:42 +00:00
parent 28354c9e34
commit 6888f5a1dd
2 changed files with 91 additions and 4 deletions

View File

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

View File

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