campo-sirio/ve/clifor.cpp

328 lines
7.9 KiB
C++
Raw Normal View History

#include <applicat.h>
#include <modaut.h>
#include <relation.h>
#include "clifor.h"
#include "condv.h"
#include "velib.h"
#include "../li/letint.h"
Patch level : 10.0 870 Files correlati : ef0.exe Ricompilazione Demo : [ ] Commento : Gestione CUP Verificare che i profili persnalizzati continuino a funzionare Nella gestione profili e documenti aggiunti i campi per gestire piu banche di appoggio e presentazione dei clienti/ fornitori La ricerca e sulla tabella se il cliente / fornitore non ha banche altrimenti e sulle banche del cliente/fornitore. Ai profili personalizzati vanno aggiunti-modificati e posizionati i campi : NU 117 5 BE PR 2 11 "Banca appoggio : Cod. ABI " FL "Z" CH NORMAL FI CODABIA US %BAN SE CODTAB?="?????" IN CODTAB[1,5] 117 DI "Cod. Istit." CODTAB[1,5] DI "Cod. Fil." CODTAB[6,10] DI "Denominazione@50" S0 OU 117 CODTAB[1,5] OU 336 S0 OU 197 CODTAB[1,5] ME CO,220 EN NU 118 5 BE PR 42 11 "Cod. CAB " FL "Z" CH NORMAL FI CODCABA US %BAN SE CODTAB?="??????????" IN CODTAB[1,5] 117 IN CODTAB[6,10] 118 CO DI 117 OU 117 CODTAB[1,5] OU 118 CODTAB[6,10] OU 336 S0 OU 198 CODTAB[6,10] ME CO,221 EN NU 220 5 BE PR 2 11 "Banca appoggio : Cod. ABI " FL "ZH" CH NORMAL FI CODABIA US 98 KEY 2 JOIN %BAN INTO CODTAB[1,5]==ABI CODTAB[6,10]==CAB IN TIPOCF 107 SE IN CODCF 108 SE IN TIPOBAN "V" IN ABI 220 IN CAB 221 IN PROGPR "" DI "Cod. Istit." ABI DI "Cod. Fil." CAB DI "IBAN@27" IBAN DI "Denominazione@50" %BAN->S0 OU 220 ABI OU 221 CAB OU 336 %BAN->S0 OU 192 IBAN OU 197 ABI OU 198 CAB EN NU 221 5 BE PR 42 11 "Cod. CAB " FL "ZH" CH NORMAL FI CODCABA CO US 220 CO IN 220 CO DI 220 CO OU 220 EN per la banca di appoggio NU 119 5 BE PR 2 14 "Banca presentazione : Cod. ABI " FL "Z" CH NORMAL FI CODABIP CO US 117 IN CODTAB[1,5] 119 DI "Cod. Istit." CODTAB[1,5] DI "Cod. Fil." CODTAB[6,10] DI "Denominazione@50" S0 OU 119 CODTAB[1,5] OU 338 S0 ME CO,222 EN NU 120 5 BE PR 42 14 "Cod. CAB " FL "Z" CH NORMAL FI CODCABP CO US 118 IN CODTAB[1,5] 119 IN CODTAB[6,10] 120 CO DI 119 OU 119 CODTAB[1,5] OU 120 CODTAB[6,10] OU 338 S0 ME CO,223 EN NU 214 2 BE PR 60 14 "Progressivo " FL "Z" FI PROGBNP US BNP JOIN %BAN ALIAS 100 INTO CODTAB=CODTAB[1,10] IN CODTAB[1,5] 119 IN CODTAB[6,10] 120 IN CODTAB[11,12] 214 DI "Cod. Istit." CODTAB[1,5] DI "Cod. Fil." CODTAB[6,10] DI "Progr." CODTAB[11,12] DI "IBAN@27" S3 DI "Denominazione@50" 100@->S0 OU 119 CODTAB[1,5] OU 120 CODTAB[6,10] OU 214 CODTAB[11,12] OU 338 100@->S0 ME CO,224 EN NU 222 5 BE PR 2 14 "Banca presentazione : Cod. ABI " FL "ZH" CH NORMAL FI CODABIP US 98 KEY 2 JOIN %BAN INTO CODTAB[1,5]==ABI CODTAB[6,10]==CAB IN TIPOCF 107 SE IN CODCF 108 SE IN TIPOBAN "N" IN ABI 222 IN CAB 223 IN PROGPR 224 DI "Cod. Istit." ABI DI "Cod. Fil." CAB DI "Progr." PROGPR DI "IBAN@27" IBAN DI "Denominazione@50" %BAN->S0 OU 222 ABI OU 223 CAB OU 224 PROGPR OU 338 %BAN->S0 OU 192 IBAN EN NU 223 5 BE PR 42 14 "Cod. CAB " FL "ZH" CH NORMAL FI CODCABP CO US 222 CO IN 222 CO DI 222 CO OU 222 EN NU 224 2 BE PR 60 14 "Progressivo " FL "ZH" CH NORMAL FI PROGBNP CO US 222 CO IN 222 CO DI 222 CO OU 222 EN per la banca di presentazione. Sono stati aggiunti campi CUP e CIG che hanno la ricerca sulla tabella ne caso normale e la ricerca sul file commesse clienti nel caso sia presente l'analitica Vanno aggiunti e posizionati ai profili personalizzati nel caso servano: ST 215 15 BE PR 2 11 "Cod.Unico Prog." FL "U" CH NORMAL FI CUP US %CUP IN CODTAB 215 DI "Codice@15" CODTAB DI "Descrizione@50" S0 OU 215 CODTAB OU 216 S0 HE "Inserisci il Codice Unico di Progetto" WA "Codice Unico di Progetto non trovato" CH NORMAL EN ST 216 50 BE PR 35 11 "" FL "" CH NORMAL US %CUP KEY 2 IN S0 216 DI "Descrizione@50" S0 DI "Codice@15" CODTAB CO OU 215 EN ST 217 15 BE PR 2 12 "Cod.Ident.Gara " FL "U" CH NORMAL FI CIG US %CIG IN CODTAB 217 DI "Codice@15" CODTAB DI "Descrizione@50" S0 OU 217 CODTAB OU 218 S0 HE "Inserisci il Codice Identificativo Gara" WA "Codice Identificativo Gara non trovato" CH NORMAL EN ST 218 50 BE PR 35 12 "" FL "" CH NORMAL US %CIG KEY 2 IN S0 218 DI "Descrizione@50" S0 DI "Codice@15" CODTAB CO OU 217 EN ST 219 20 BE PR 2 13 "" FL "H" FI CODCMS EN La generazione effetti scrive il CUP e il CIG sull'effetto. La contabilizzazione scrive il CUP e il CIG sulle righe contabili. git-svn-id: svn://10.65.10.50/branches/R_10_00@21374 c028cbd2-c16b-5b4b-a496-9718f37d4682
2010-12-28 08:28:47 +00:00
#include "../cg/cfban.h"
TOccasionale::TOccasionale() : TRectype(LF_OCCAS)
{ }
TOccasionale::TOccasionale(const TRectype& r) : TRectype(r)
{ }
TOccasionale::TOccasionale(const TOccasionale& r) : TRectype(r)
{
}
TRectype& TOccasionale::operator=(const TRectype& r)
{
return TRectype::operator=(r);
}
TOccasionale& TOccasionale::operator=(const TOccasionale& r)
{
TRectype::operator=(r);
return *this;
}
TOccasionale::~TOccasionale()
{ }
int TCli_for::write_rewrite(TBaseisamfile& f, bool re) const
{
int err = TMultiple_rectype::write_rewrite(f, re);
if (err == NOERR)
{
TLocalisamfile v(LF_CFVEN);
TRectype & v_rec = vendite();
err = v.write(v_rec);
if (err == _isreinsert)
err = v.write(v_rec);
}
return err;
}
TRectype& TCli_for::vendite() const
{
const char t = tipo();
const long c = codice();
if (_ven_rec.empty() || t != *(const char *) (*_ven_tipo) || c != (long) *_ven_codice)
{
TLocalisamfile v(LF_CFVEN);
TRectype& vr = ((TCli_for *)this)->_ven_rec; // fool const
vr.zero();
vr.put(CFV_TIPOCF,t);
vr.put(CFV_CODCF, c);
const TRectype v_rec(vr);
if (vr.read(v) != NOERR)
vr = v_rec;
}
return (TRectype &) _ven_rec;
}
bool TCli_for::read_lettera(const TDate & data, bool extended)
{
if (_use_lettere)
{
if (data != _last_data)
{
_letint.zero();
TRelation * r = new TRelation(LF_LETINT);
TRectype to(r->curr());
to.put(LETINT_ANNO, data.year());
to.put(LETINT_CODCLI, codice());
TRectype from(to);
from.put(LETINT_ANNO, data.year() - 1);
TCursor c(r, "", 2 ,&from, &to);
const int items = c.items();
if (items > 0)
{
TDate dal;
TDate al(31, 12, data.year());
for (long pos = items - 1; pos >= 0L; pos--)
{
c = pos;
const int tipo = c.curr().get_int(LETINT_TIPOOP);
if (tipo == 3)
{
dal = c.curr().get_date(LETINT_DAL);
al = c.curr().get_date(LETINT_AL);
}
else
{
dal = c.curr().get_date(LETINT_VSDATA);
if (c.pos() < items - 1)
{
++c;
const int tipo_next = c.curr().get_int(LETINT_TIPOOP);
if (tipo_next == 3)
al = c.curr().get_date(LETINT_DAL);
else
al = c.curr().get_date(LETINT_VSDATA);
--c;
}
}
if (dal <= data)
{
_letint = c.curr();
break;
}
}
_lettera_found = !_letint.empty();
if (_lettera_found && !extended)
_lettera_found = data <= al;
}
_last_data = data;
}
}
return _lettera_found;
}
int TCli_for::read(const TRectype & rec, word op, word lockop)
{
_ven_rec.zero();
int err = TMultiple_rectype::read(rec, op, lockop);
_last_data = botime;
return err;
}
int TCli_for::read(char tipo, long codice, word op, word lockop)
{
int err = NOERR;
_ven_rec.zero();
zero();
if (tipo > ' ' && codice > 0L)
{
put(CLI_TIPOCF, tipo);
put(CLI_CODCF, codice);
err = TMultiple_rectype::read(op, lockop);
}
_last_data = botime;
return err;
}
int TCli_for::remove(TBaseisamfile& f) const
{
TLocalisamfile v(LF_CFVEN);
const int err = vendite().remove(v);
if (err != NOERR && err != _iskeynotfound)
return err;
return TMultiple_rectype:: remove(f);
}
void TCli_for::init()
{
_tipo = new TRecfield(*this, CLI_TIPOCF);
_codice = new TRecfield(*this, CLI_CODCF);
_ven_tipo = new TRecfield(_ven_rec, CFV_TIPOCF);
_ven_codice = new TRecfield(_ven_rec, CFV_CODCF);
_use_lettere = main_app().has_module(LIAUT, CHK_DONGLE);
if (_use_lettere)
_use_lettere = ini_get_bool(CONFIG_DITTA, "ve", "USELETTERE");
}
const TString& TCli_for::find_listino_al(const TDate& datadoc) const
{
const bool gest_list_catven = ini_get_bool(CONFIG_DITTA, "ve", "GESLISCV", false, 1);
const TRectype& v = vendite();
TString4 listino = v.get(CFV_CODLIST);
//se il cliente ha un listino specificato -> va usato (previo controllo validit<69>)
while (listino.full())
{
TToken_string key_condv;
key_condv.add("L");
if (gest_list_catven)
key_condv.add(v.get(CFV_CATVEN));
else
key_condv.add("");
key_condv.add("");
key_condv.add("");
key_condv.add(listino);
const TRectype& rec_condv = cache().get(LF_CONDV, key_condv);
const TDate inizio_validita = rec_condv.get_date(CONDV_VALIN);
const TDate fine_validita = rec_condv.get_date(CONDV_VALFIN);
//usa il listino indicato sul cliente solo se <20> valido per la data del documento
if (datadoc >= inizio_validita && (datadoc <= fine_validita || !fine_validita.ok()))
break;
else
listino = rec_condv.get(CONDV_CODLISSUCC);
}
return get_tmp_string() = listino;
}
void TCli_for::cli2doc(TDocumento & doc)
{
const TRectype & v = vendite();
doc.put(DOC_CODVAL, get(CLI_CODVAL));
doc.put(DOC_CODLIN, get(CLI_CODLIN));
doc.put(DOC_CODPAG, get(CLI_CODPAG));
Patch level : 10.0 870 Files correlati : ef0.exe Ricompilazione Demo : [ ] Commento : Gestione CUP Verificare che i profili persnalizzati continuino a funzionare Nella gestione profili e documenti aggiunti i campi per gestire piu banche di appoggio e presentazione dei clienti/ fornitori La ricerca e sulla tabella se il cliente / fornitore non ha banche altrimenti e sulle banche del cliente/fornitore. Ai profili personalizzati vanno aggiunti-modificati e posizionati i campi : NU 117 5 BE PR 2 11 "Banca appoggio : Cod. ABI " FL "Z" CH NORMAL FI CODABIA US %BAN SE CODTAB?="?????" IN CODTAB[1,5] 117 DI "Cod. Istit." CODTAB[1,5] DI "Cod. Fil." CODTAB[6,10] DI "Denominazione@50" S0 OU 117 CODTAB[1,5] OU 336 S0 OU 197 CODTAB[1,5] ME CO,220 EN NU 118 5 BE PR 42 11 "Cod. CAB " FL "Z" CH NORMAL FI CODCABA US %BAN SE CODTAB?="??????????" IN CODTAB[1,5] 117 IN CODTAB[6,10] 118 CO DI 117 OU 117 CODTAB[1,5] OU 118 CODTAB[6,10] OU 336 S0 OU 198 CODTAB[6,10] ME CO,221 EN NU 220 5 BE PR 2 11 "Banca appoggio : Cod. ABI " FL "ZH" CH NORMAL FI CODABIA US 98 KEY 2 JOIN %BAN INTO CODTAB[1,5]==ABI CODTAB[6,10]==CAB IN TIPOCF 107 SE IN CODCF 108 SE IN TIPOBAN "V" IN ABI 220 IN CAB 221 IN PROGPR "" DI "Cod. Istit." ABI DI "Cod. Fil." CAB DI "IBAN@27" IBAN DI "Denominazione@50" %BAN->S0 OU 220 ABI OU 221 CAB OU 336 %BAN->S0 OU 192 IBAN OU 197 ABI OU 198 CAB EN NU 221 5 BE PR 42 11 "Cod. CAB " FL "ZH" CH NORMAL FI CODCABA CO US 220 CO IN 220 CO DI 220 CO OU 220 EN per la banca di appoggio NU 119 5 BE PR 2 14 "Banca presentazione : Cod. ABI " FL "Z" CH NORMAL FI CODABIP CO US 117 IN CODTAB[1,5] 119 DI "Cod. Istit." CODTAB[1,5] DI "Cod. Fil." CODTAB[6,10] DI "Denominazione@50" S0 OU 119 CODTAB[1,5] OU 338 S0 ME CO,222 EN NU 120 5 BE PR 42 14 "Cod. CAB " FL "Z" CH NORMAL FI CODCABP CO US 118 IN CODTAB[1,5] 119 IN CODTAB[6,10] 120 CO DI 119 OU 119 CODTAB[1,5] OU 120 CODTAB[6,10] OU 338 S0 ME CO,223 EN NU 214 2 BE PR 60 14 "Progressivo " FL "Z" FI PROGBNP US BNP JOIN %BAN ALIAS 100 INTO CODTAB=CODTAB[1,10] IN CODTAB[1,5] 119 IN CODTAB[6,10] 120 IN CODTAB[11,12] 214 DI "Cod. Istit." CODTAB[1,5] DI "Cod. Fil." CODTAB[6,10] DI "Progr." CODTAB[11,12] DI "IBAN@27" S3 DI "Denominazione@50" 100@->S0 OU 119 CODTAB[1,5] OU 120 CODTAB[6,10] OU 214 CODTAB[11,12] OU 338 100@->S0 ME CO,224 EN NU 222 5 BE PR 2 14 "Banca presentazione : Cod. ABI " FL "ZH" CH NORMAL FI CODABIP US 98 KEY 2 JOIN %BAN INTO CODTAB[1,5]==ABI CODTAB[6,10]==CAB IN TIPOCF 107 SE IN CODCF 108 SE IN TIPOBAN "N" IN ABI 222 IN CAB 223 IN PROGPR 224 DI "Cod. Istit." ABI DI "Cod. Fil." CAB DI "Progr." PROGPR DI "IBAN@27" IBAN DI "Denominazione@50" %BAN->S0 OU 222 ABI OU 223 CAB OU 224 PROGPR OU 338 %BAN->S0 OU 192 IBAN EN NU 223 5 BE PR 42 14 "Cod. CAB " FL "ZH" CH NORMAL FI CODCABP CO US 222 CO IN 222 CO DI 222 CO OU 222 EN NU 224 2 BE PR 60 14 "Progressivo " FL "ZH" CH NORMAL FI PROGBNP CO US 222 CO IN 222 CO DI 222 CO OU 222 EN per la banca di presentazione. Sono stati aggiunti campi CUP e CIG che hanno la ricerca sulla tabella ne caso normale e la ricerca sul file commesse clienti nel caso sia presente l'analitica Vanno aggiunti e posizionati ai profili personalizzati nel caso servano: ST 215 15 BE PR 2 11 "Cod.Unico Prog." FL "U" CH NORMAL FI CUP US %CUP IN CODTAB 215 DI "Codice@15" CODTAB DI "Descrizione@50" S0 OU 215 CODTAB OU 216 S0 HE "Inserisci il Codice Unico di Progetto" WA "Codice Unico di Progetto non trovato" CH NORMAL EN ST 216 50 BE PR 35 11 "" FL "" CH NORMAL US %CUP KEY 2 IN S0 216 DI "Descrizione@50" S0 DI "Codice@15" CODTAB CO OU 215 EN ST 217 15 BE PR 2 12 "Cod.Ident.Gara " FL "U" CH NORMAL FI CIG US %CIG IN CODTAB 217 DI "Codice@15" CODTAB DI "Descrizione@50" S0 OU 217 CODTAB OU 218 S0 HE "Inserisci il Codice Identificativo Gara" WA "Codice Identificativo Gara non trovato" CH NORMAL EN ST 218 50 BE PR 35 12 "" FL "" CH NORMAL US %CIG KEY 2 IN S0 218 DI "Descrizione@50" S0 DI "Codice@15" CODTAB CO OU 217 EN ST 219 20 BE PR 2 13 "" FL "H" FI CODCMS EN La generazione effetti scrive il CUP e il CIG sull'effetto. La contabilizzazione scrive il CUP e il CIG sulle righe contabili. git-svn-id: svn://10.65.10.50/branches/R_10_00@21374 c028cbd2-c16b-5b4b-a496-9718f37d4682
2010-12-28 08:28:47 +00:00
TToken_string key;
key.add(get(CLI_TIPOCF));
key.add(get(CLI_CODCF));
key.add("V");
key.add("1");
const TRectype & cfban = cache().get(LF_CFBAN, key);
if (cfban.empty())
{
doc.put(DOC_CODCABA, get(CLI_CODCAB));
doc.put(DOC_CODABIA, get(CLI_CODABI));
doc.put(DOC_IBAN, get(CLI_IBAN));
}
else
{
doc.put(DOC_CODABIA, cfban.get(CFBAN_ABI));
doc.put(DOC_CODCABA, cfban.get(CFBAN_CAB));
doc.put(DOC_IBAN, get(CFBAN_IBAN));
}
key.cut(0);
key.add(get(CLI_TIPOCF));
key.add(get(CLI_CODCF));
key.add("N");
key.add("1");
const TRectype & cfbanpr = cache().get(LF_CFBAN, key);
// Setta i campi che appartengono al file LF_CFVEN
if (cfbanpr.empty())
{
doc.put(DOC_CODABIP, v.get(CFV_CODABIPR));
doc.put(DOC_CODCABP, v.get(CFV_CODCABPR));
}
else
{
doc.put(DOC_CODABIP, cfbanpr.get(CFBAN_ABI));
doc.put(DOC_CODCABP, cfbanpr.get(CFBAN_CAB));
doc.put(DOC_PROGBNP, cfbanpr.get(CFBAN_PROGPR));
}
doc.put(DOC_RAGGR, v.get(CFV_RAGGDOC));
doc.put(DOC_RAGGREFF, v.get(CFV_RAGGEFF));
doc.put(DOC_CODINDSP, v.get(CFV_CODINDSP));
doc.put(DOC_CODAG, v.get(CFV_CODAG));
doc.put(DOC_CODAGVIS, v.get(CFV_CODAG1));
doc.put(DOC_CODSPMEZZO, v.get(CFV_CODSPMEZZO));
doc.put(DOC_CODPORTO, v.get(CFV_CODPORTO));
doc.put(DOC_CODNOTESP1, v.get(CFV_CODNOTESP1));
doc.put(DOC_CODNOTESP2, v.get(CFV_CODNOTESP2));
doc.put(DOC_CODNOTE, v.get(CFV_CODNOTE));
doc.put(DOC_CODVETT1, v.get(CFV_CODVETT1));
doc.put(DOC_CODVETT2, v.get(CFV_CODVETT2));
doc.put(DOC_CODVETT3, v.get(CFV_CODVETT3));
doc.put(DOC_PERCSPINC, v.get(CFV_PERCSPINC));
doc.put(DOC_ADDBOLLI, v.get(CFV_ADDBOLLI));
doc.put(DOC_CATVEN, v.get(CFV_CATVEN));
doc.put(DOC_LIQDIFF, get_int(CLI_ALLEG) == 7 && v.get_bool(CFV_FATTSOSP) ? "X" : "");
//listino: deve essere attiva la gestione listini nella ditta
const bool gest_listini = ini_get_bool(CONFIG_DITTA, "ve", "GES", false, 1);
if (gest_listini)
{
const TDate datadoc = doc.get_date(DOC_DATADOC);
const TString& listino = find_listino_al(datadoc);
doc.put(DOC_CODLIST, listino);
}
doc.put(DOC_ZONA, v.get(CFV_CODZONA));
doc.put(DOC_RAGGR, v.get(CFV_RAGGDOC));
//aggiungere gestione spese e bolli???
}
TCli_for::TCli_for(char tipo, long codice) : TMultiple_rectype( LF_CLIFO ), _ven_rec(LF_CFVEN),
_letint(LF_LETINT), _use_lettere(false), _lettera_found(false)
{
init();
add_file(LF_INDSP, IND_CODIND);
if (tipo > ' ' && codice > 0L)
read(tipo, codice);
}
TCli_for::TCli_for(const TRectype & rec) : TMultiple_rectype(rec), _ven_rec(LF_CFVEN),
_letint(LF_LETINT), _use_lettere(false), _lettera_found(false)
{
init();
add_file(LF_INDSP, IND_CODIND);
read(rec);
}
TCli_for::TCli_for(const TCli_for & c) : TMultiple_rectype(c), _ven_rec(c._ven_rec),
_letint(LF_LETINT), _use_lettere(false), _lettera_found(false)
{
init();
}
TCli_for::~TCli_for()
{
delete _tipo;
delete _codice;
delete _ven_tipo;
delete _ven_codice;
}