Patch level : 2.2

Files correlati     : indovinala grillo
Ricompilazione Demo : [ ]
Commento            :

Migliorata fatturazione bolle in modo da preservare le commesse delle singole righe.


git-svn-id: svn://10.65.10.50/trunk@13360 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2005-09-20 12:51:40 +00:00
parent 1eb3f02883
commit 2eba28d858
3 changed files with 44 additions and 26 deletions

View File

@ -37,6 +37,7 @@ bool TLista_documenti::find(char provv, int anno, const char * codnum, long ndoc
}
return found;
}
int TLista_documenti::read(char provv, char tipocf, long clifo, int anno,
TToken_string& tipidoc, TToken_string& statidoc,
const TDate& dd, const TDate& ad,

View File

@ -1,3 +1,6 @@
#include <dongle.h>
#include <modaut.h>
#include "velib04.h"
///////////////////////////////////////////////////////////
@ -12,7 +15,7 @@ TFatturazione_bolle::TFatturazione_bolle(const char* cod)
void TFatturazione_bolle::tipi_validi(TToken_string& tipi) const
{
tipi.cut(0);
TString16 t;
TString4 t;
for (int i = 0; i < TElaborazione::_max_tipi_doc_elab; i++)
{
t = tipo_iniziale(i);
@ -38,7 +41,7 @@ void TFatturazione_bolle::stati_validi(TToken_string& stati) const
bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out)
{
#ifdef DBG
const TString16 tipodoc = doc_in.tipo().codice();
const TString4 tipodoc = doc_in.tipo().codice();
int i;
for (i = 0; i < TElaborazione::_max_tipi_doc_elab; i++)
@ -131,13 +134,28 @@ bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out)
const bool ragg_rig = raggruppa_righe();
if (ragg_rig)
{
campi_riga = "CODART|UMQTA"; // Uguali sempre
// Uguali sempre
campi_riga.add(RDOC_CODART);
campi_riga.add(RDOC_UMQTA);
// Uguali se commesse attive
if (dongle().active(CAAUT) || dongle().active(CMAUT))
{
campi_riga.add(RDOC_CODCMS);
campi_riga.add(RDOC_FASCMS);
campi_riga.add(RDOC_CODCOSTO);
}
// Uguali opzionalmente
if (riga_uguale(0)) campi_riga.add("CODMAG");
if (riga_uguale(1)) campi_riga.add("CODIVA");
if (riga_uguale(2)) campi_riga.add("PREZZO|SCONTO");
if (riga_uguale(0))
campi_riga.add(RDOC_CODMAG);
if (riga_uguale(1))
campi_riga.add(RDOC_CODIVA);
if (riga_uguale(2))
{
campi_riga.add(RDOC_PREZZO);
campi_riga.add(RDOC_SCONTO);
}
}
for (int r = 1; r <= doc_in.physical_rows(); r++)
{
TRiga_documento & rin = doc_in[r];
@ -154,13 +172,12 @@ bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out)
if (ddoc < data_cons || rin.get_bool(RDOC_RIGAEVASA))
continue;
real q = rin.get_real(RDOC_QTA);
const real q = rin.get(RDOC_QTA);
rin.put(RDOC_QTAEVASA, q);
rin.put(RDOC_RIGAEVASA, true);
}
bool elaborata = FALSE;
bool elaborata = false;
// Raggruppo le righe se e' settato il flag di raggruppamento e
// se la riga non contiene solo una descrizione
@ -176,7 +193,7 @@ bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out)
if (rin.raggruppabile(rout, campi_riga)) // Se esiste una riga compatibile ...
{
rout += rin; // ... sommaci la quantita' ecc.
elaborata = TRUE; // Ricorda di averla gia' elaborata
elaborata = true; // Ricorda di averla gia' elaborata
break;
}
}
@ -246,7 +263,7 @@ bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out)
bool TFatturazione_bolle::elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
const TDate& data_elab, bool interattivo)
{
TWait_cursor hourglass;
TToken_string campi_doc(128); // Lista di campi che devono essere uguali
campi_doc = "TIPOCF|CODCF|CODVAL|CODLIN"; // Uguali sempre

View File

@ -521,12 +521,11 @@ void TDocumento_mask::update_progs(bool stop_run)
if ((page == field_page || stop_run) && id > BASE_PIEDE)
{
const TFieldref * recfld = mf.field();
const TFieldref* recfld = mf.field();
if (recfld != NULL)
{
const TString & name = recfld->name();
const TString & val = _doc.get(name);
const TString& val = _doc.get(name);
set(id, val, true);
}
}
@ -2746,17 +2745,17 @@ bool TDocumento_mask::elabora_handler( TMask_field& f, KEY key )
if (m.check_fields()) // Check values
{
TElabora_mask* selection = new TElabora_mask(m); // No woman no stack
bool update_mask = FALSE;
bool do_checks = false;
const char stato_iniziale = m.doc().stato();
while (selection->run() == K_ENTER)
{
m.mask2doc();
update_mask |= selection->elabora();
const bool processed = selection->elabora();
do_checks |= processed;
if (m.doc().stato() != stato_iniziale)
break;
if (update_mask)
if (processed)
{
m.doc2mask(FALSE);
TSheet_field& ss = m.sfield(F_SHEET);
@ -2770,17 +2769,18 @@ bool TDocumento_mask::elabora_handler( TMask_field& f, KEY key )
if (!m.get_bool(F_TYPE)) // non aggiunge al documento attuale
break;
}
if (update_mask)
if (do_checks)
{
m.doc2mask(FALSE);
// Provoca decodifiche necessarie
const int last = m.id2pos(BASE_PIEDE + 1);
for (int p = 0; p < last; p++)
const int tutti = m.fields();
int i;
for (i = 0; i < tutti; i++)
{
TMask_field& f = m.fld(p);
f.check(STARTING_CHECK);
TMask_field& f = m.fld(i);
if (f.dlg() <= BASE_PIEDE)
f.check(STARTING_CHECK);
}
for (int i = m.fields() - 1; i >= 0; i--)
for (i = tutti-1; i >= 0; i--)
m.fld(i).set_dirty(FALSE);
}
delete selection;