Patch level : 12.0 1076
Files correlati : ve0.exe ve1.exe ve5.exe ve6.exe fp0.exe li0300a.msk lv2.exe Commento : In fatturazione bolle scritto il cliente originale della fattura nel campo CFORIG quando uso il cliente FATTURARE A per poterlo recuperae nelle lettere d'intento In configurazione delle lettere d'intento c'è il parametro "Uitlizza il cliente originale nelle fatture" per attivare il meccanismo.
This commit is contained in:
parent
6d4be4fadb
commit
7835079aae
@ -6,7 +6,7 @@
|
||||
#include <relapp.h>
|
||||
#include <urldefid.h>
|
||||
|
||||
#include "../cg/cglib01.h"
|
||||
#include "../cg/cglib.h"
|
||||
|
||||
#include "lvcondv.h"
|
||||
#include "lvrcondv.h"
|
||||
|
@ -246,9 +246,9 @@ END
|
||||
|
||||
STRING F_NUM_G 4
|
||||
BEGIN
|
||||
PROMPT 2 16 "Numerazione "
|
||||
PROMPT 2 16 "Numerazione"
|
||||
FIELD #CODNUM_G
|
||||
FLAGS "H"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
||||
#include "../pr/agenti.h"
|
||||
#include "../pr/percprov.h"
|
||||
#include "../cg/cfban.h"
|
||||
#include "../cg/cglib03.h"
|
||||
#include "../cg/cglib.h"
|
||||
|
||||
#include "comuni.h"
|
||||
#include "lvcondv.h"
|
||||
@ -1212,7 +1212,7 @@ void TFatturazione_lavanderie::post_process(TLista_documenti& doc_out, TLista_do
|
||||
|
||||
if (row_has_02)
|
||||
{
|
||||
const TString key = format("%04d%04d", doc.get_int("FATID"), rdoc.get_int(RDOC_IDRIGA));
|
||||
const TString key = format("%04d%04d", doc.get_int(DOC_FATID), rdoc.get_int(RDOC_IDRIGA));
|
||||
real new_qta = real_qta;
|
||||
TCalc_02_data * data = (TCalc_02_data *) _output_rows_02.objptr(key);
|
||||
|
||||
@ -1418,6 +1418,10 @@ void TFatturazione_lavanderie::post_process(TLista_documenti& doc_out, TLista_do
|
||||
|
||||
if (new_cli > 0L)
|
||||
{
|
||||
TToken_string cf_orig = tipocf;
|
||||
|
||||
cf_orig.add(act_cli);
|
||||
doc.put(DOC_CFORIG, cf_orig);
|
||||
doc.put(DOC_CODCF, new_cli);
|
||||
key = tipocf;
|
||||
key.add(new_cli);
|
||||
@ -1583,7 +1587,7 @@ TRiga_documento& TFatturazione_lavanderie::find_or_create_row(TDocumento& doc_ou
|
||||
if (fatt_02())
|
||||
{
|
||||
doc_out.set_row_ids();
|
||||
const TString key = format("%04d%04d", doc_out.get_int("FATID"), doc_out[r].get_int(RDOC_IDRIGA));
|
||||
const TString key = format("%04d%04d", doc_out.get_int(DOC_FATID), doc_out[r].get_int(RDOC_IDRIGA));
|
||||
TCalc_02_data * data = (TCalc_02_data *) _output_rows_02.objptr(key);
|
||||
|
||||
if (data == NULL)
|
||||
@ -2178,21 +2182,22 @@ void TFatturazione_lav_app::main_loop()
|
||||
_msk = new TFatturazione_msk();
|
||||
_msk->show(F_SAVEDATA, lv_is_02_active());
|
||||
|
||||
while (_msk->run()!= K_QUIT)
|
||||
while (_msk->run() != K_QUIT)
|
||||
{
|
||||
_solototali = _msk->get_bool(F_SOLOTOTALI);
|
||||
|
||||
const int annoes = _msk->get_date(F_DATAFAT).year();
|
||||
|
||||
if (!controlli_preliminari())
|
||||
{
|
||||
TString str;
|
||||
|
||||
str << "Prima di poter eseguire la fatturazione è necessario correggere tutti gli errori segnalati.\n"
|
||||
<< "Si prega di controllare i dati di configurazione.";
|
||||
warning_box(str);
|
||||
return;
|
||||
}
|
||||
_log = new TLog_report(TR("Fatturazione"));
|
||||
|
||||
if (_msk->get_bool(F_SAVEDATA))
|
||||
{
|
||||
TFilename src = firm2dir(-1);
|
||||
@ -2200,11 +2205,13 @@ void TFatturazione_lav_app::main_loop()
|
||||
copy_tree(src, dst);
|
||||
}
|
||||
//leggo i dati di primo interesse
|
||||
|
||||
const TString4 mskzona = _msk->get(F_CODZONA);
|
||||
const TString4 mskcat = _msk->get(F_CODCATC);
|
||||
//preparo le date estremi (dal - al) della query e l'anno dell'esercizio
|
||||
TDate al = _msk->get_date(F_ADATA);
|
||||
//se la data "al" non è corretta, la pongo uguale alla data fattura
|
||||
|
||||
if (!al.ok())
|
||||
al = _msk->get_date(F_DATAFAT);
|
||||
|
||||
@ -2212,6 +2219,7 @@ void TFatturazione_lav_app::main_loop()
|
||||
|
||||
TDate dal = _msk->get_date(F_DADATA);
|
||||
//se la data "dal" non è corretta, la pongo uguale a 1/1/annoes
|
||||
|
||||
if (!dal.ok())
|
||||
{
|
||||
dal.set_day(1);
|
||||
@ -2246,15 +2254,11 @@ void TFatturazione_lav_app::main_loop()
|
||||
const TString& fromcod = _msk->get(F_DACODCF);
|
||||
const TString& tocod = _msk->get(F_ACODCF);
|
||||
|
||||
//&&(BETWEEN(DATADOC,#DADATA,#ADATA))&&(STATO==\"2\")&&(TIPODOC==\"B01\")
|
||||
query << "USE DOC KEY 3 SELECT (TIPOCF==\"C\")&&"
|
||||
<< "STR(BETWEEN(CODCF,\"" << fromcod << "\",\"" << tocod << "\"))\n"
|
||||
<< "BY TIPOCF CODCF DATADOC\n"
|
||||
<< "FROM DATADOC=#DAL PROVV=D ANNO=" << year << "\n"
|
||||
<< "TO DATADOC=#AL PROVV=D ANNO=" << year << "\n";
|
||||
// query << "USE DOC KEY 2 SELECT BETWEEN(DATADOC,#DADATA,#ADATA)&&STATO==\"2\")&&(TIPODOC==\"B01\")\n"
|
||||
// << "FROM " << "TIPOCF=C PROVV=D ANNO=#ANNO DATADOC=#DADATA \n"
|
||||
// << "TO " << "TIPOCF=C PROVV=D ANNO=#ANNO DATADOC=#ADATA \n";
|
||||
|
||||
//instanzio il recordset011
|
||||
|
||||
@ -2276,24 +2280,25 @@ void TFatturazione_lav_app::main_loop()
|
||||
//TAssoc_array dei clienti per cui ho generato dei documenti
|
||||
TAssoc_array cliela;
|
||||
//scorro tutti documenti che la query mi restiuisce
|
||||
for (bool ok = recset.move_first(); ok; ok = recset.move_next())
|
||||
|
||||
recset.cursor()->relation()->lfile().set_curr(new TDocumento);
|
||||
for (bool ok = recset.move_first(); ok && pi->add_status(); ok = recset.move_next())
|
||||
{
|
||||
//leggo il codcf
|
||||
const long clifo = recset.get(DOC_CODCF).as_int();
|
||||
if (clifo != last_clifo)
|
||||
TDocumento & doc =(TDocumento &) recset.cursor()->curr();
|
||||
const TCli_for &cli = cached_clifor('C', doc.get_long(DOC_CODCF));
|
||||
//preparo la chiave e recupero da CFVEN i dati di quel cliente
|
||||
|
||||
if (cli.codice() != last_clifo)
|
||||
{
|
||||
key.format("C|%ld", clifo);
|
||||
key.format("C|%ld", cli.codice());
|
||||
TString str;
|
||||
str << TR("Cliente") << ' ' << clifo << ' ' << cache().get(LF_CLIFO, key, CLI_RAGSOC);
|
||||
str << TR("Cliente") << ' ' << cli.codice() << ' ' << cache().get(LF_CLIFO, key, CLI_RAGSOC);
|
||||
pi->set_text(str);
|
||||
last_clifo=clifo;
|
||||
last_clifo = cli.codice();
|
||||
}
|
||||
|
||||
if (!pi->add_status())
|
||||
break;
|
||||
|
||||
//se non è l'ultimo cliente, allora:
|
||||
if (clifo != lastcli)
|
||||
if (cli.codice() != lastcli)
|
||||
{
|
||||
//se effettivamente devo elaborare delle bolle per questo cliente, allora:
|
||||
if (docsin.items() > 0)
|
||||
@ -2339,24 +2344,19 @@ void TFatturazione_lav_app::main_loop()
|
||||
docsin.rewrite();
|
||||
docsin.destroy(-1);
|
||||
}
|
||||
lastcli = clifo;
|
||||
lastcli = cli.codice();
|
||||
}
|
||||
|
||||
//preparo la chiave e recupero da CFVEN i dati di quel cliente
|
||||
key.format("C|%ld", clifo);
|
||||
const TRectype& clienti = cache().get(LF_CFVEN,key);
|
||||
const TRectype& docrec = recset.cursor()->curr();
|
||||
const TRectype& clirec = cache().get(LF_CLIFO,key);
|
||||
|
||||
//se il documento che sto analizzando è corretto, allora:
|
||||
bool cliok = elab.is_document_ok(docrec);
|
||||
bool cliok = elab.is_document_ok(doc);
|
||||
|
||||
if (cliok)
|
||||
{
|
||||
//se il codice di zona è pieno, allora:
|
||||
if (mskzona.full())
|
||||
{
|
||||
//leggo il codice di zona standard di quel cliente e lo confronto con quello della maschera (V o F)
|
||||
const TString& codzona = clienti.get(CFV_CODZONA);
|
||||
const TString& codzona = cli.vendite().get(CFV_CODZONA);
|
||||
cliok = (codzona == mskzona);
|
||||
}
|
||||
|
||||
@ -2364,15 +2364,16 @@ void TFatturazione_lav_app::main_loop()
|
||||
if (cliok && mskcat.full())
|
||||
{
|
||||
//leggo il codice categoria economica standard di quel cliente e lo confronto con quello della maschera (V o F)
|
||||
const TString& codcat = clienti.get(CFV_CODCATC);
|
||||
const TString& codcat = cli.vendite().get(CFV_CODCATC);
|
||||
cliok = (codcat == mskcat);
|
||||
}
|
||||
}
|
||||
else
|
||||
if (!_solototali && elab.is_document_compatible(docrec) && docrec.get(DOC_STATO) < stato_min)
|
||||
if (!_solototali && elab.is_document_compatible(doc) && doc.get(DOC_STATO) < stato_min)
|
||||
{
|
||||
TString msg;
|
||||
msg << "Cli. " << clifo << ' ' << clirec.get(CLI_RICALT) << " Bolla n. " << docrec.get(DOC_NDOC) << " del " << docrec.get(DOC_DATADOC) << " in stato " << docrec.get(DOC_STATO);
|
||||
|
||||
msg << "Cli. " << cli.codice() << ' ' << cli.get(CLI_RICALT) << " Bolla n. " << doc.get(DOC_NDOC) << " del " << doc.get(DOC_DATADOC) << " in stato " << doc.get(DOC_STATO);
|
||||
log(msg);
|
||||
}
|
||||
|
||||
@ -2380,33 +2381,34 @@ void TFatturazione_lav_app::main_loop()
|
||||
if (cliok)
|
||||
{
|
||||
//cerco sul contratto qual'è il periodo di fatturazione di quel cliente
|
||||
indsped = recset.get(DOC_CODINDSP).as_int();
|
||||
TLaundry_contract contr(clifo, indsped, datafat);
|
||||
indsped = doc.get_int(DOC_CODINDSP);
|
||||
|
||||
TLaundry_contract contr(cli.codice(), indsped, datafat);
|
||||
|
||||
if(!contr.ok())
|
||||
{
|
||||
TString msg;
|
||||
msg << TR("Non ci sono contratti in essere per il cliente ") << clifo << " " << clirec.get(CLI_RICALT) << TR(" in data ") << datafat.string();
|
||||
|
||||
msg << TR("Non ci sono contratti in essere per il cliente ") << cli.codice() << " " << cli.get(CLI_RICALT) << TR(" in data ") << datafat.string();
|
||||
log(msg);
|
||||
continue;
|
||||
}
|
||||
|
||||
const int contrper = contr.get_int(LVCONDV_PERFAT);
|
||||
|
||||
//se il cliente non è sospeso e se si è nel periodo di fatturazione giusto, aggiungo il documento alla
|
||||
//lista dei documenti da elaborare
|
||||
if (!contr.get_bool(LVCONDV_FATTSOSP) && contrper <= period)
|
||||
{
|
||||
TDocumento * doc = new TDocumento(recset.cursor()->curr());
|
||||
|
||||
// if (aggcli && !_solototali && doc->get(DOC_CODNUM) == num_buoni && doc->tipo().codice() == tipo_buoni)
|
||||
if (aggcli && !_solototali)
|
||||
{
|
||||
bool doc_updated = false;
|
||||
// banche
|
||||
|
||||
|
||||
key.cut(0);
|
||||
key.add(clirec.get(CLI_TIPOCF));
|
||||
key.add(clirec.get(CLI_CODCF));
|
||||
key.add(cli.get(CLI_TIPOCF));
|
||||
key.add(cli.get(CLI_CODCF));
|
||||
key.add("V");
|
||||
key.add("1");
|
||||
|
||||
@ -2417,9 +2419,9 @@ void TFatturazione_lav_app::main_loop()
|
||||
|
||||
if (cfban.empty())
|
||||
{
|
||||
abi = clirec.get(CLI_CODABI);
|
||||
cab = clirec.get(CLI_CODCAB);
|
||||
iban = clirec.get(CLI_IBAN);
|
||||
abi = cli.get(CLI_CODABI);
|
||||
cab = cli.get(CLI_CODCAB);
|
||||
iban = cli.get(CLI_IBAN);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -2435,8 +2437,8 @@ void TFatturazione_lav_app::main_loop()
|
||||
doc->put(DOC_IBAN, iban);
|
||||
}
|
||||
key.cut(0);
|
||||
key.add(clirec.get(CLI_TIPOCF));
|
||||
key.add(clirec.get(CLI_CODCF));
|
||||
key.add(cli.get(CLI_TIPOCF));
|
||||
key.add(cli.get(CLI_CODCF));
|
||||
key.add("N");
|
||||
key.add("1");
|
||||
|
||||
@ -2445,8 +2447,8 @@ void TFatturazione_lav_app::main_loop()
|
||||
|
||||
if (cfbanpr.empty())
|
||||
{
|
||||
abi = clienti.get(CFV_CODABIPR);
|
||||
cab = clienti.get(CFV_CODCABPR);
|
||||
abi = cli.vendite().get(CFV_CODABIPR);
|
||||
cab = cli.vendite().get(CFV_CODCABPR);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -2486,26 +2488,27 @@ void TFatturazione_lav_app::main_loop()
|
||||
if (doc_updated)
|
||||
{
|
||||
TString msg(" Cli.");
|
||||
msg << clifo << " " << clirec.get(CLI_RICALT) << "Bolla " << docrec.get(DOC_CODNUM) << ' ' << docrec.get(DOC_TIPODOC)
|
||||
<< ' ' << docrec.get(DOC_NDOC) << " del " << docrec.get(DOC_DATADOC) << " aggiornata la testata ";
|
||||
|
||||
msg << cli.codice() << " " << cli.get(CLI_RICALT) << "Bolla " << doc.get(DOC_CODNUM) << ' ' << doc.get(DOC_TIPODOC)
|
||||
<< ' ' << doc.get(DOC_NDOC) << " del " << doc.get(DOC_DATADOC) << " aggiornata la testata ";
|
||||
log(msg);
|
||||
}
|
||||
}
|
||||
for (int r = 1; !_solototali && r <= doc->physical_rows(); r++)
|
||||
for (int r = 1; !_solototali && r <= doc.physical_rows(); r++)
|
||||
{
|
||||
const TRiga_documento& rdoc = (*doc)[r];
|
||||
const TRiga_documento& rdoc = doc[r];
|
||||
const TCodice_articolo codart = rdoc.get(RDOC_CODARTMAG);
|
||||
|
||||
if (codart.full())
|
||||
{
|
||||
const TRectype & rcont = contr.row(codart);
|
||||
const TArticolo_lavanderie& art = cached_article_laundry(codart, 'C', clifo, use_indsp ? indsped : 0);
|
||||
const TArticolo_lavanderie& art = cached_article_laundry(codart, 'C', cli.codice(), use_indsp ? indsped : 0);
|
||||
//estraggo il record corrispondente su LF_CLIFOGIAC
|
||||
const TRecmag_lavanderie& rec = art.find_rec(annoes);
|
||||
|
||||
TString str;
|
||||
str << "Cli." << clifo << ' ' << clirec.get(CLI_RICALT) << " Bolla " << docrec.get(DOC_CODNUM) << ' ' << docrec.get(DOC_TIPODOC)
|
||||
<< ' ' << docrec.get(DOC_NDOC) << " del " << docrec.get(DOC_DATADOC) << " art." << codart << " - ";
|
||||
str << "Cli." << cli.codice() << ' ' << cli.get(CLI_RICALT) << " Bolla " << doc.get(DOC_CODNUM) << ' ' << doc.get(DOC_TIPODOC)
|
||||
<< ' ' << doc.get(DOC_NDOC) << " del " << doc.get(DOC_DATADOC) << " art." << codart << " - ";
|
||||
|
||||
if (rec.get_real("DOTOD") < ZERO)
|
||||
{
|
||||
@ -2521,15 +2524,11 @@ void TFatturazione_lav_app::main_loop()
|
||||
}
|
||||
|
||||
bool prezzo_nullo = false;
|
||||
|
||||
if (prezzo_da_contratto)
|
||||
{
|
||||
// Segnalo prezzo nullo solo se il contratto non è ad importo fisso (07/11/2011)
|
||||
prezzo_nullo = rcont.get_real(LVRCONDV_PREZZO).is_zero() && contr.get_real(LVCONDV_IMPFIX).is_zero();
|
||||
}
|
||||
prezzo_nullo = rcont.get_real(LVRCONDV_PREZZO) == ZERO && contr.get_real(LVCONDV_IMPFIX) == ZERO; // Segnalo prezzo nullo solo se il contratto non è ad importo fisso (07/11/2011)
|
||||
else
|
||||
{
|
||||
prezzo_nullo = rdoc.get_real(RDOC_PREZZO).is_zero(); // Prezzo sulla bolla
|
||||
}
|
||||
prezzo_nullo = rdoc.get_real(RDOC_PREZZO) == ZERO; // Prezzo sulla bolla
|
||||
if (prezzo_nullo)
|
||||
{
|
||||
const TString8 causale = rdoc.get(RDOC_CODAGG1);
|
||||
@ -2547,17 +2546,11 @@ void TFatturazione_lav_app::main_loop()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
docsin.add(doc);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Forzo l'eliminazione
|
||||
if(pi != NULL)
|
||||
delete pi;
|
||||
|
||||
//se ho dei documenti in lista li elaboro e poi svuoto le TList_file
|
||||
safe_delete(pi); // se ho dei documenti in lista li elaboro e poi svuoto le TList_file
|
||||
if (docsin.items() != 0)
|
||||
{
|
||||
if (ini_get_bool(CONFIG_DITTA, "lv", "RifTest"))
|
||||
@ -2611,9 +2604,15 @@ void TFatturazione_lav_app::main_loop()
|
||||
|
||||
switch (numdocgen)
|
||||
{
|
||||
case 0: str << TR("Non è stata ") << parolasi << TR(" alcuna fattura"); break;
|
||||
case 1: str << TR("E' stata ") << parolasi << TR(" una fattura"); break;
|
||||
default: str << TR("Sono state ") << parolapl << ' ' << numdocgen << TR(" fatture"); break;
|
||||
case 0:
|
||||
str << TR("Non è stata ") << parolasi << TR(" alcuna fattura");
|
||||
break;
|
||||
case 1:
|
||||
str << TR("E' stata ") << parolasi << TR(" una fattura");
|
||||
break;
|
||||
default:
|
||||
str << TR("Sono state ") << parolapl << ' ' << numdocgen << TR(" fatture");
|
||||
break;
|
||||
}
|
||||
if (numdocgen <= 0)
|
||||
warning_box(str);
|
||||
|
Loading…
x
Reference in New Issue
Block a user