campo-sirio/ve/velib06.cpp
alex c067cee054 Aggiunto campo raggruppamento effetti
git-svn-id: svn://10.65.10.50/trunk@5699 c028cbd2-c16b-5b4b-a496-9718f37d4682
1997-12-05 11:55:02 +00:00

327 lines
9.5 KiB
C++
Executable File
Raw Blame History

#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
#ifndef __TABUTIL_H
#include <tabutil.h>
#endif
#ifndef __UTILITY_H
#include <utility.h>
#endif
#ifndef __VEINI_H
#include "veini.h"
#endif
#ifndef __SCONTI_H
#include "sconti.h"
#endif
TDocumento_mask::TDocumento_mask(const char* name, TDocumento * doc, TRelation * rel,
int num, int max)
: TVariable_mask(name, num, max), _progs_page(-1), _last_prog(-1),
_doc(doc), _rel(rel)
{
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)
{
begin_wait();
TDocumento & curr_doc = doc();
TDocumento & rel_doc = (TDocumento &) _rel->curr();
rel_doc = curr_doc;
autosave(*_rel);
for (int i = _last_prog; i > 0; i--)
{
const short id = BASE_PIEDE + i;
const TString16 name(field(id).field()->name());
set(id , rel_doc.get(name));
}
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);
if (id2pos(F_CODINDSP) >= 0)
reset(F_CODINDSP);
// Sugli occasionali non c'<27> la localit<69>
const TString & localita = o.get(OCC_LOCALITA);
set(F_LOCALITACF, localita);
set(F_LOCALITASP, localita);
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);
if (!occas)
reset(F_OCFPI);
show(F_OCFPI, occas);
// 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));
set(F_RAGGREFF, ven_rec.get(CFV_RAGGEFF));
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()))
fld(pos).reset();
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
set( F_SCONTOPERC, c.vendite().get(CFV_SCONTO));
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
{
TString16 cod;
const TRectype & ven_rec = c.vendite();
TLocalisamfile sconti(LF_SCONTI );
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);
}
// autosave(*_rel);
doc().put("SPESEUPD", FALSE);
doc().update_spese_aut(spese, FALSE, &sh);
sh.force_update();
}