1997-06-12 16:15:09 +00:00
|
|
|
|
#include "velib.h"
|
|
|
|
|
#include "vepriv.h"
|
|
|
|
|
|
|
|
|
|
#ifndef __APPLICAT_H
|
|
|
|
|
#include <applicat.h>
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef __VEUML_H
|
|
|
|
|
#include "veuml.h"
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef __VEUML1_H
|
|
|
|
|
#include "veuml1.h"
|
|
|
|
|
#endif
|
|
|
|
|
|
1997-06-27 09:21:13 +00:00
|
|
|
|
#ifndef __TABUTIL_H
|
|
|
|
|
#include <tabutil.h>
|
|
|
|
|
#endif
|
|
|
|
|
|
1997-06-12 16:15:09 +00:00
|
|
|
|
#ifndef __UTILITY_H
|
|
|
|
|
#include <utility.h>
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef __VEINI_H
|
|
|
|
|
#include "veini.h"
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef __SCONTI_H
|
|
|
|
|
#include "sconti.h"
|
|
|
|
|
#endif
|
|
|
|
|
|
1997-08-06 12:31:10 +00:00
|
|
|
|
TDocumento_mask::TDocumento_mask(const char* name, TDocumento * doc, TRelation * rel,
|
|
|
|
|
int num, int max)
|
1997-06-12 16:15:09 +00:00
|
|
|
|
: TVariable_mask(name, num, max), _progs_page(-1), _last_prog(-1),
|
1997-08-06 12:31:10 +00:00
|
|
|
|
_doc(doc), _rel(rel)
|
1997-06-12 16:15:09 +00:00
|
|
|
|
{
|
|
|
|
|
const int pos = id2pos(BASE_PIEDE + 1);
|
|
|
|
|
|
|
|
|
|
if (pos >= 0)
|
|
|
|
|
{
|
|
|
|
|
_progs_page = find_parent_page(fld(pos));
|
|
|
|
|
_last_prog = 0;
|
|
|
|
|
while (id2pos(BASE_PIEDE + _last_prog + 1) >= 0)
|
|
|
|
|
_last_prog++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TDocumento_mask::next_page(int p)
|
|
|
|
|
{
|
|
|
|
|
TMask::next_page(p);
|
|
|
|
|
if (curr_page() == _progs_page)
|
|
|
|
|
{
|
1997-08-06 12:31:10 +00:00
|
|
|
|
begin_wait();
|
|
|
|
|
TDocumento & curr_doc = doc();
|
|
|
|
|
TDocumento & rel_doc = (TDocumento &) _rel->curr();
|
|
|
|
|
|
|
|
|
|
rel_doc = curr_doc;
|
|
|
|
|
autosave(*_rel);
|
1997-06-12 16:15:09 +00:00
|
|
|
|
for (int i = _last_prog; i > 0; i--)
|
|
|
|
|
{
|
|
|
|
|
const short id = BASE_PIEDE + i;
|
|
|
|
|
const TString16 name(field(id).field()->name());
|
|
|
|
|
|
1997-08-06 12:31:10 +00:00
|
|
|
|
set(id , rel_doc.get(name));
|
1997-06-12 16:15:09 +00:00
|
|
|
|
}
|
|
|
|
|
end_wait();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool TDocumento_mask::on_key(KEY key)
|
|
|
|
|
{
|
|
|
|
|
if (key == K_SHIFT + K_F12)
|
|
|
|
|
{
|
|
|
|
|
field(F_STATO).enable(!field(F_STATO).enabled());
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
return TVariable_mask::on_key(key);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TDocumento_mask::occ2mask(TOccasionale & o)
|
|
|
|
|
{
|
|
|
|
|
reset(F_COFI);
|
|
|
|
|
reset(F_PAIVA);
|
|
|
|
|
set(F_OCFPI, o.get(OCC_CFPI));
|
|
|
|
|
const TString & ragsoc = o.get(OCC_RAGSOC);
|
|
|
|
|
set(F_RAGSOC, ragsoc);
|
|
|
|
|
set(F_RAGSOCSP, ragsoc);
|
|
|
|
|
const TString & indir = o.get(OCC_INDIR);
|
|
|
|
|
set(F_INDCF, indir);
|
|
|
|
|
set(F_INDSP, indir);
|
|
|
|
|
const TString & civ = o.get(OCC_CIV);
|
|
|
|
|
set(F_CIVCF, civ);
|
|
|
|
|
set(F_CIVSP, civ);
|
|
|
|
|
const TString & cap = o.get(OCC_CAP);
|
|
|
|
|
set(F_CAPCF, cap);
|
|
|
|
|
set(F_CAPSP, cap);
|
|
|
|
|
const TString & com = o.get(OCC_COM);
|
|
|
|
|
set(F_COMCF, com);
|
|
|
|
|
set( F_COMSP, com);
|
|
|
|
|
const TString & stato = o.get(OCC_STATO);
|
|
|
|
|
set(F_STATOCF, stato);
|
|
|
|
|
set( F_STATOSP, stato);
|
1997-08-04 13:52:55 +00:00
|
|
|
|
if (id2pos(F_CODINDSP) >= 0)
|
|
|
|
|
reset(F_CODINDSP);
|
1997-06-12 16:15:09 +00:00
|
|
|
|
// Sugli occasionali non c'<27> la localit<69>
|
1997-08-04 13:52:55 +00:00
|
|
|
|
const TString & localita = o.get(OCC_LOCALITA);
|
|
|
|
|
set(F_LOCALITACF, localita);
|
|
|
|
|
set(F_LOCALITASP, localita);
|
1997-06-12 16:15:09 +00:00
|
|
|
|
check_field(F_COMSP);
|
|
|
|
|
check_field(F_STATOSP);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TDocumento_mask::cli2mask( TCli_for & c, TOccasionale & o, TConfig & ditta)
|
|
|
|
|
{
|
|
|
|
|
const bool onload = !is_running();
|
|
|
|
|
const TString16 codval(get(F_CODVAL));
|
|
|
|
|
const TString16 datacambio(get(F_DATACAMBIO1));
|
|
|
|
|
|
|
|
|
|
// Setta i campi che appartengono al file LF_CLIFO
|
|
|
|
|
const bool occas = c.occasionale();
|
|
|
|
|
|
|
|
|
|
show(F_OCCASEDIT, occas);
|
1997-08-04 13:52:55 +00:00
|
|
|
|
if (!occas)
|
|
|
|
|
reset(F_OCFPI);
|
|
|
|
|
show(F_OCFPI, occas);
|
1997-06-12 16:15:09 +00:00
|
|
|
|
// In forse per l'Occasionale, sicuri per il Normale
|
|
|
|
|
show(F_COFI, !occas);
|
|
|
|
|
show(F_STATOPAIVA, !occas);
|
|
|
|
|
show(F_PAIVA, !occas);
|
|
|
|
|
set(F_RAGSOC, c.get(CLI_RAGSOC));
|
|
|
|
|
enable(F_RAGSOC, !occas);
|
|
|
|
|
|
|
|
|
|
const TRectype & ven_rec = c.vendite();
|
|
|
|
|
|
|
|
|
|
if(!onload)
|
|
|
|
|
{
|
|
|
|
|
short pos = id2pos(F_CODVAL);
|
|
|
|
|
const TString & codval = c.get(CLI_CODVAL);
|
|
|
|
|
|
|
|
|
|
if (pos >= 0 && fld(pos).active())
|
|
|
|
|
fld(pos).set(codval);
|
|
|
|
|
pos = id2pos(F_CODVAL1);
|
|
|
|
|
if (pos >= 0 && fld(pos).active())
|
|
|
|
|
fld(pos).set(codval);
|
|
|
|
|
pos = id2pos(F_CODLIN);
|
|
|
|
|
if (pos >= 0 && fld(pos).active())
|
|
|
|
|
fld(pos).set(c.get(CLI_CODLIN));
|
|
|
|
|
set(F_CODPAG, c.get(CLI_CODPAG));
|
|
|
|
|
set(F_CODABIA, c.get(CLI_CODABI));
|
|
|
|
|
set(F_CODCABA, c.get(CLI_CODCAB));
|
|
|
|
|
// Setta i campi che appartengono al file LF_CFVEN
|
|
|
|
|
set(F_CODABIP, ven_rec.get(CFV_CODABIPR));
|
|
|
|
|
set(F_CODCABP, ven_rec.get(CFV_CODCABPR));
|
|
|
|
|
set(F_RAGGR, ven_rec.get(CFV_RAGGDOC));
|
1997-12-05 11:55:02 +00:00
|
|
|
|
set(F_RAGGREFF, ven_rec.get(CFV_RAGGEFF));
|
1997-06-12 16:15:09 +00:00
|
|
|
|
set(F_CODINDSP, ven_rec.get(CFV_CODINDSP));
|
|
|
|
|
set(F_CODAG, ven_rec.get(CFV_CODAG));
|
|
|
|
|
set(F_CODSPMEZZO, ven_rec.get(CFV_CODSPMEZZO));
|
|
|
|
|
set(F_CODPORTO, ven_rec.get(CFV_CODPORTO));
|
|
|
|
|
set(F_CODNOTESP1, ven_rec.get(CFV_CODNOTESP1));
|
|
|
|
|
set(F_CODNOTESP2, ven_rec.get(CFV_CODNOTESP2));
|
|
|
|
|
set(F_CODNOTE, ven_rec.get(CFV_CODNOTE));
|
|
|
|
|
set(F_CODVETT1, ven_rec.get(CFV_CODVETT1));
|
|
|
|
|
set(F_CODVETT2, ven_rec.get(CFV_CODVETT2));
|
|
|
|
|
set(F_CODVETT3, ven_rec.get(CFV_CODVETT3));
|
|
|
|
|
set(F_SPESEINC, ven_rec.get(CFV_PERCSPINC));
|
|
|
|
|
set(F_ADDBOLLI, ven_rec.get(CFV_ADDBOLLI));
|
|
|
|
|
set(F_CATVEN, ven_rec.get(CFV_CATVEN));
|
|
|
|
|
pos = id2pos(F_CODLIST);
|
|
|
|
|
const TString & codlist = ven_rec.get(CFV_CODLIST);
|
|
|
|
|
if (pos >= 0 && fld(pos).active())
|
|
|
|
|
fld(pos).set(codlist);
|
|
|
|
|
pos = id2pos(F_CODLIST1);
|
|
|
|
|
if (pos >= 0 && fld(pos).active())
|
|
|
|
|
fld(pos).set(codlist);
|
|
|
|
|
pos = id2pos(F_CODAG);
|
|
|
|
|
if (pos >= 0 && fld(pos).active())
|
|
|
|
|
fld(pos).set(ven_rec.get(CFV_CODAG));
|
|
|
|
|
set(F_CODZON, ven_rec.get(CFV_CODZONA));
|
|
|
|
|
set(F_RAGGR, ven_rec.get(CFV_RAGGDOC));
|
|
|
|
|
sconto_testa2mask(c, ditta);
|
|
|
|
|
spese2mask(c);
|
|
|
|
|
}
|
|
|
|
|
enable( F_CODINDSP , !occas);
|
|
|
|
|
if (occas)
|
|
|
|
|
occ2mask(o);
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
set(F_COFI, c.get(CLI_COFI));
|
|
|
|
|
set(F_INDCF, c.get(CLI_INDCF));
|
|
|
|
|
set(F_CIVCF, c.get(CLI_CIVCF));
|
|
|
|
|
set(F_STATOPAIVA, c.get(CLI_STATOPAIV));
|
|
|
|
|
set(F_PAIVA, c.get(CLI_PAIV));
|
|
|
|
|
set(F_LOCALITACF, c.get(CLI_LOCCF));
|
|
|
|
|
set(F_CAPCF, c.get(CLI_CAPCF));
|
|
|
|
|
set(F_COMCF, c.get(CLI_COMCF));
|
|
|
|
|
set(F_STATOCF, c.get(CLI_STATOCF));
|
|
|
|
|
check_field( F_CODINDSP );
|
|
|
|
|
}
|
|
|
|
|
const TString16 newcodval(get(F_CODVAL));
|
|
|
|
|
const TString16 newdatacambio(get(F_DATACAMBIO1));
|
|
|
|
|
|
|
|
|
|
short pos = id2pos(F_CAMBIO);
|
|
|
|
|
if ((pos >= 0) && (newcodval.empty() || newdatacambio.empty()))
|
1997-08-18 16:06:51 +00:00
|
|
|
|
fld(pos).reset();
|
1997-06-12 16:15:09 +00:00
|
|
|
|
pos = id2pos(F_CODVAL);
|
|
|
|
|
if (pos >= 0 && fld(pos).active())
|
|
|
|
|
fld(pos).check();
|
|
|
|
|
pos = id2pos(F_CODVAL1);
|
|
|
|
|
if (pos >= 0 && fld(pos).active())
|
|
|
|
|
fld(pos).check();
|
|
|
|
|
pos = id2pos(F_DATACAMBIO1);
|
|
|
|
|
if (pos >= 0 && fld(pos).active() &&
|
|
|
|
|
(codval != newcodval || datacambio != newdatacambio))
|
|
|
|
|
fld(pos).check();
|
|
|
|
|
check_field(F_COMCF);
|
|
|
|
|
check_field(F_STATOCF);
|
|
|
|
|
check_field( F_CODPAG );
|
|
|
|
|
pos = id2pos(F_CODLIN);
|
|
|
|
|
if (pos >= 0 && fld(pos).active())
|
|
|
|
|
fld(pos).check();
|
|
|
|
|
check_field( F_CODCABA );
|
|
|
|
|
pos = id2pos(F_CODLIST);
|
|
|
|
|
if (pos >= 0 && fld(pos).active())
|
|
|
|
|
fld(pos).check();
|
|
|
|
|
pos = id2pos(F_CODLIST1);
|
|
|
|
|
if (pos >= 0 && fld(pos).active())
|
|
|
|
|
fld(pos).check();
|
|
|
|
|
check_field( F_CODCABP );
|
|
|
|
|
pos = id2pos(F_CODAG);
|
|
|
|
|
if (pos >= 0 && fld(pos).active())
|
|
|
|
|
fld(pos).check();
|
|
|
|
|
check_field( F_CODSPMEZZO );
|
|
|
|
|
check_field( F_CODPORTO );
|
|
|
|
|
check_field( F_CODNOTESP1 );
|
|
|
|
|
check_field( F_CODNOTESP2 );
|
|
|
|
|
check_field( F_CODNOTE );
|
|
|
|
|
check_field( F_CODVETT1 );
|
|
|
|
|
check_field( F_CODVETT2 );
|
|
|
|
|
check_field( F_CODVETT3 );
|
|
|
|
|
check_field( F_CATVEN );
|
|
|
|
|
check_field( F_CODZON );
|
|
|
|
|
const bool gescontr = ditta.get_bool("GES", "ve", 2);
|
|
|
|
|
const bool contr_enabled = ven_rec.get_bool(CFV_GESTCONTR);
|
|
|
|
|
|
|
|
|
|
enable(F_CODCONT1, contr_enabled && gescontr);
|
|
|
|
|
enable(F_CODCONT, contr_enabled && gescontr);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TDocumento_mask::sconto_testa2mask( TCli_for & c, TConfig & ditta )
|
|
|
|
|
{
|
|
|
|
|
const char tipogestione = ditta.get("GESSCO", "ve")[ 0 ];
|
|
|
|
|
switch( tipogestione )
|
|
|
|
|
{
|
|
|
|
|
case 'N': // Sconti non gestiti: pussa via!
|
|
|
|
|
break;
|
|
|
|
|
case 'P': // Percentuale su anagrafica cliente
|
1997-08-18 16:06:51 +00:00
|
|
|
|
set( F_SCONTOPERC, c.vendite().get(CFV_SCONTO));
|
1997-06-12 16:15:09 +00:00
|
|
|
|
break;
|
|
|
|
|
case 'T': // Gestione tabella sconti
|
|
|
|
|
{
|
|
|
|
|
const TString16 codsconto(c.vendite().get(CFV_CODSCC));
|
|
|
|
|
|
|
|
|
|
if (codsconto.not_empty())
|
|
|
|
|
{
|
|
|
|
|
TTable sconti("%SCC");
|
|
|
|
|
sconti.setkey(1);
|
|
|
|
|
sconti.zero();
|
|
|
|
|
sconti.put("CODTAB", codsconto);
|
|
|
|
|
if (sconti.read( ) == NOERR)
|
|
|
|
|
set(F_SCONTOPERC, sconti.get("S1"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 'A': // Gestione archivio sconti
|
|
|
|
|
{
|
1997-08-29 16:42:42 +00:00
|
|
|
|
TString16 cod;
|
1997-06-12 16:15:09 +00:00
|
|
|
|
const TRectype & ven_rec = c.vendite();
|
|
|
|
|
TLocalisamfile sconti(LF_SCONTI );
|
1997-08-29 16:42:42 +00:00
|
|
|
|
|
1997-06-12 16:15:09 +00:00
|
|
|
|
sconti.setkey(1);
|
|
|
|
|
sconti.zero();
|
|
|
|
|
sconti.put("TIPO", "I");
|
|
|
|
|
if(ditta.get_bool("SCOKEY", "ve", 1))
|
|
|
|
|
sconti.put("CODCAT", ven_rec.get(CFV_CATVEN));
|
|
|
|
|
if(ditta.get_bool("SCOKEY", "ve", 2))
|
|
|
|
|
cod.format("%-2s", (const char *)ven_rec.get(CFV_CODSCC));
|
|
|
|
|
else
|
|
|
|
|
cod = " ";
|
|
|
|
|
if( ditta.get_bool("SCOKEY", "ve", 3))
|
|
|
|
|
cod << format("%-2s", (const char *)ven_rec.get(CFV_CODZONA));
|
|
|
|
|
else
|
|
|
|
|
cod << " ";
|
|
|
|
|
if( ditta.get_bool("SCOKEY", "ve", 4))
|
|
|
|
|
cod << c.get(CLI_CODPAG);
|
|
|
|
|
sconti.put("CODART", cod);
|
|
|
|
|
if(sconti.read() == NOERR)
|
|
|
|
|
set(F_SCONTOPERC, sconti.get( "SCONTO"));
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TDocumento_mask::spese2mask(TCli_for & c)
|
|
|
|
|
{
|
|
|
|
|
TSheet_field & sh = (TSheet_field &) field(F_SHEET);
|
|
|
|
|
|
|
|
|
|
TString16 name("CODSP0");
|
|
|
|
|
TString_array spese;
|
|
|
|
|
TRectype & ven_rec = c.vendite();
|
|
|
|
|
for (int i = 1; i <= 4; i++)
|
|
|
|
|
{
|
|
|
|
|
name.rtrim(1); name << i;
|
|
|
|
|
const TString16 s(ven_rec.get(name));
|
|
|
|
|
|
|
|
|
|
if (s.not_empty())
|
|
|
|
|
spese.add(s);
|
|
|
|
|
}
|
1997-10-02 16:57:49 +00:00
|
|
|
|
// autosave(*_rel);
|
1997-08-01 09:20:02 +00:00
|
|
|
|
doc().put("SPESEUPD", FALSE);
|
1997-06-12 16:15:09 +00:00
|
|
|
|
doc().update_spese_aut(spese, FALSE, &sh);
|
|
|
|
|
sh.force_update();
|
|
|
|
|
}
|