Patch level : 12.0 486
Files correlati : li Commento : - Aggiunto programma per visualizzazione dei plafonds - Aggiornato programma visualizzazioni dichiarazioni intento - Aggiornata libreria lilib: - Creata createTipiStati per generare le TToken_string anche all'esterno della classe TLi_manager - eliminata variabile tipidoc da TLi_manager in quanto inutile, viene solo utilizzata in createTipiStati - Aggiunto controllo anno plafond - Tolta dichiarazione inutilizzata in checkUtilizzo - Aggiunta nuova funzione generaLiStorico() per generare le stringhe "PLAFOND" di documenti antecedenti alla nuova gestione plafond git-svn-id: svn://10.65.10.50/branches/R_10_00@24226 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
2497691d9e
commit
3a0041bf48
@ -10,8 +10,8 @@ int main(int argc,char** argv)
|
||||
case 2: li0300(argc,argv) ; break; // Impostazioni dichiarazione d'intento
|
||||
case 3: li0400(argc,argv) ; break; // Gestione archivio
|
||||
case 4: li0500(argc,argv) ; break; // Stampa archivio
|
||||
case 5:
|
||||
default: li0600(argc,argv) ; break; // Invio dati
|
||||
case 5: li0600(argc,argv) ; break; // Invio dati
|
||||
default: li0100(argc,argv) ; break; // Generatore riferimenti plafond su documenti
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
#ifndef __LI0_H
|
||||
#define __LI0_H
|
||||
|
||||
int li0100(int argc, char* argv[]);
|
||||
int li0200(int argc, char* argv[]);
|
||||
int li0300(int argc, char* argv[]);
|
||||
int li0400(int argc, char* argv[]);
|
||||
|
394
src/li/li0100.cpp
Normal file
394
src/li/li0100.cpp
Normal file
@ -0,0 +1,394 @@
|
||||
#include <automask.h>
|
||||
#include <utility.h>
|
||||
#include <toolfld.h> // TButton_tool
|
||||
#include <urldefid.h> // ID Bottoni
|
||||
|
||||
#include "lilib01.h"
|
||||
|
||||
#include "li0.h"
|
||||
#include "li0100a.h"
|
||||
|
||||
#define PLA_COLS 10 // n° colonne di lettere di intento
|
||||
#define CPC(x) (START_PLA + x*3)
|
||||
|
||||
/* Utility ***********************/
|
||||
|
||||
HIDDEN bool key_handler(TMask& m, KEY k)
|
||||
{
|
||||
// Per ora facciamo che il SHIFT+F12 attiva sempre il campo 3
|
||||
if (k == K_SHIFT+K_F12)
|
||||
m.enable(DLG_OK);
|
||||
return true;
|
||||
}
|
||||
|
||||
/*****************************************************************/
|
||||
|
||||
class TVisLI_mask : public TAutomask
|
||||
{
|
||||
private:
|
||||
void next_page(int p);
|
||||
bool _filter_changed;
|
||||
int _plColumns;
|
||||
void addRow(TSheet_field& sheet, TISAM_recordset& rec);
|
||||
void resetColumns(TSheet_field& sheet);
|
||||
void addColumns(TSheet_field& sheet, const int col);
|
||||
public:
|
||||
void load_sheet();
|
||||
void setFilterChanged() { _filter_changed = true; }
|
||||
bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||
TVisLI_mask();
|
||||
};
|
||||
|
||||
|
||||
TVisLI_mask::TVisLI_mask()
|
||||
: TAutomask("li0100a"), _filter_changed(true)
|
||||
{
|
||||
if(get(F_DATAFIN).empty())
|
||||
set(F_DATAFIN, TDate(TODAY));
|
||||
set_handler(key_handler);
|
||||
disable(DLG_OK);
|
||||
}
|
||||
|
||||
void TVisLI_mask::load_sheet()
|
||||
{
|
||||
_filter_changed = false;
|
||||
TSheet_field& sheet = sfield(F_RIGHE);
|
||||
sheet.hide(); // Nascondo lo sheet per guadagnare un 20% di velocità di caricamento, le ottimizzazioni da PRO!
|
||||
if(!sheet.empty())
|
||||
sheet.destroy();
|
||||
|
||||
resetColumns(sheet);
|
||||
|
||||
TString query = "USE DOC\n";
|
||||
if(get(F_TIPORIC) == "D")
|
||||
{
|
||||
/* Facciamo una scelta intelligente per ottimizzare sempre la chiave da usare
|
||||
* Ho il filtro sul cliente? 2
|
||||
* Ho il filtro sulla data? 3
|
||||
* Ho il filtro sul codice numerazione? 5
|
||||
* In caso di tutto negativo uso la chiave classica
|
||||
*/
|
||||
int key = get(F_DACODCF).full() ? 2 : (get(F_DATAINI).full() ? 3 : (get(F_CODNUM).full() ? 5 : 1));
|
||||
query << "KEY " << key << "\n";
|
||||
TString queryFrom, queryTo;
|
||||
switch (key)
|
||||
{
|
||||
case 2:
|
||||
{
|
||||
// 2: TIPOCF+CODCF+PROVV+ANNO+DATADOC+CODNUM+NDOC
|
||||
queryFrom.cut(0) << "FROM TIPOCF='C' CODCF=#DACODCF PROVV='D'";
|
||||
queryTo.cut(0) << "TO TIPOCF='C' CODCF=#ACODCF PROVV='D'";
|
||||
if(get(F_ANNO).full())
|
||||
{
|
||||
queryFrom << " ANNO=#DAANNO";
|
||||
queryTo << " ANNO=#AANNO";
|
||||
if(get(F_DATAINI).full())
|
||||
{
|
||||
queryFrom << " DATADOC=#DADATA";
|
||||
if(get(F_CODNUM).full())
|
||||
queryFrom << " CODNUM=#DACODNUM";
|
||||
}
|
||||
if(get(F_DATAFIN).full())
|
||||
{
|
||||
queryTo << " DATADOC=#ADATA";
|
||||
if(get(F_CODNUM).full())
|
||||
queryTo << " CODNUM=#ACODNUM";
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
{
|
||||
// 3: DATADOC+PROVV+ANNO+CODNUM+NDOC
|
||||
queryFrom.cut(0) << "DATADOC=#DADATA PROVV='D'";
|
||||
queryTo.cut(0) << "DATADOC=#ADATA PROVV='D'";
|
||||
if(get(F_ANNO).full())
|
||||
{
|
||||
queryFrom << " ANNO=#DAANNO";
|
||||
queryTo << " ANNO=#AANNO";
|
||||
if(get(F_CODNUM).full())
|
||||
{
|
||||
queryFrom << " CODNUM=#DACODNUM";
|
||||
queryTo << " CODNUM=#ACODNUM";
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
{
|
||||
// 5: PROVV+CODNUM+ANNO+NDOC
|
||||
queryFrom.cut(0) << "PROVV='D' CODNUM=#DACODNUM";
|
||||
queryTo.cut(0) << "PROVV='D' CODNUM=#ACODNUM";
|
||||
if(get(F_ANNO).full())
|
||||
{
|
||||
queryFrom << " ANNO=#DAANNO";
|
||||
queryTo << " ANNO=#AANNO";
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
default:
|
||||
{
|
||||
// 1: PROVV+ANNO+CODNUM+NDOC
|
||||
queryFrom.cut(0) << "PROVV='D'";
|
||||
queryTo.cut(0) << "PROVV='D'";
|
||||
if(get(F_ANNO).full())
|
||||
{
|
||||
queryFrom << " ANNO=#DAANNO";
|
||||
queryTo << " ANNO=#AANNO";
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
// Campi solo filtrabili con SELECT **************************
|
||||
// TIPODOC+STATO
|
||||
if(get(F_TIPODOC).full())
|
||||
query << "SELECT TIPODOC==#TIPODOC";
|
||||
if(get(F_STATO).full())
|
||||
query << "SELECT STATO==#STATO";
|
||||
|
||||
// Unisco query
|
||||
query << "FROM " << queryFrom << "\nTO " << queryTo << "\n";
|
||||
|
||||
// Creo recordset
|
||||
TISAM_recordset rec(query);
|
||||
|
||||
// Uso il metodo di TISAM_recordset per valorizzare la query, è più sicuro
|
||||
if(get(F_DATAINI).full())
|
||||
rec.set_var("#DADATA", get_date(F_DATAINI));
|
||||
if(get(F_DATAFIN).full())
|
||||
rec.set_var("#ADATA", get_date(F_DATAFIN));
|
||||
if(get(F_CODNUM).full())
|
||||
{
|
||||
rec.set_var("#DACODNUM", get(F_CODNUM));
|
||||
rec.set_var("#ACODNUM", get(F_CODNUM));
|
||||
}
|
||||
if(get(F_TIPODOC).full())
|
||||
rec.set_var("#TIPODOC", get(F_TIPODOC));
|
||||
if(get(F_ANNO).full())
|
||||
{
|
||||
rec.set_var("#DAANNO", get(F_ANNO));
|
||||
rec.set_var("#AANNO", get(F_ANNO));
|
||||
}
|
||||
if(get(F_STATO).full())
|
||||
rec.set_var("#STATO", get(F_STATO));
|
||||
if(get(F_DACODCF).full())
|
||||
rec.set_var("#DACODCF", get(F_DACODCF));
|
||||
if(get(F_ACODCF).full())
|
||||
rec.set_var("#ACODCF", get(F_ACODCF));
|
||||
|
||||
// Aggiungo le righe allo sheet
|
||||
for(bool ok = rec.move_first(); ok; ok = rec.move_next())
|
||||
addRow(sheet, rec);
|
||||
}
|
||||
else
|
||||
{
|
||||
TString16 key; key << get(F_ANNO) << "|" << get(F_NUMPROT);
|
||||
TRectype letint = cache().get(LF_LETINT, key);
|
||||
// 2: TIPOCF+CODCF+PROVV+ANNO+DATADOC+CODNUM+NDOC
|
||||
query << "KEY 2\n"
|
||||
"FROM TIPOCF='C' CODCF=" << letint.get("CODCLI") << " PROVV='D' ANNO=" << letint.get("ANNO") << " DATADOC=" << letint.get("DAL") << "\n"
|
||||
"TO TIPOCF='C' CODCF=" << letint.get("CODCLI") << " PROVV='D' ANNO=" << letint.get("ANNO") << " DATADOC="<< letint.get("ANNO") << "1231";
|
||||
TISAM_recordset rec(query);
|
||||
for(bool ok = rec.move_first(); ok; ok = rec.move_next())
|
||||
{
|
||||
TToken_string lePlafs(rec.get("G1:PLAFOND").as_string(), ',');
|
||||
for(int i = 0; i < lePlafs.items(); i++)
|
||||
{
|
||||
TToken_string thisPlaf = lePlafs.get(i);
|
||||
if(strcmp(thisPlaf.get(1), get(F_NUMPROT)) == 0) // 1 -> _plnumprot from lilib.h
|
||||
{
|
||||
addRow(sheet, rec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// Forzo aggiornamento e mostro sheet
|
||||
sheet.force_update();
|
||||
sheet.show();
|
||||
}
|
||||
|
||||
void TVisLI_mask::addRow(TSheet_field& sheet, TISAM_recordset& rec)
|
||||
{
|
||||
// Per ogni documento che aggiungo valuto quante lettere di intento utilizzo.
|
||||
// Ogni lettera di intento utilizzerà 2 colonne:
|
||||
// Num protocollo e QTA utilizzata
|
||||
|
||||
// Controllo preventivo che abbia effettivamente il plafond sul documento
|
||||
if(rec.get("G1:PLAFOND").is_empty())
|
||||
return;
|
||||
|
||||
// Creo una nuova riga
|
||||
TToken_string& row = sheet.row(-1);
|
||||
// Data documento
|
||||
row.add(rec.get("DATADOC").as_date(), sheet.cid2index(A_DATADOC));
|
||||
// Anno documento
|
||||
row.add(rec.get("ANNO").as_int(), sheet.cid2index(A_ANNO));
|
||||
// Numero documento
|
||||
row.add(rec.get("NDOC").as_string(), sheet.cid2index(A_NUMDOC));
|
||||
// Numero documento
|
||||
row.add(rec.get("CODNUM").as_string(), sheet.cid2index(A_CODNUM));
|
||||
// Tipo documento
|
||||
row.add(rec.get("TIPODOC").as_string(), sheet.cid2index(A_TIPODOC));
|
||||
// Tipo cliente
|
||||
row.add("C", sheet.cid2index(A_TIPOCF));
|
||||
// Codice cliente
|
||||
row.add(rec.get("CODCF").as_int(), sheet.cid2index(A_CODCF));
|
||||
// Ragione Sociale
|
||||
static TString key; key.cut(0) << "C|" << rec.get("CODCF").as_string();
|
||||
row.add(cache().get(LF_CLIFO, key, "RAGSOC"), sheet.cid2index(A_RAGSOC));
|
||||
// Totale documento
|
||||
row.add(rec.get("G1:TOTDOC").as_real(), sheet.cid2index(A_TOTDOC));
|
||||
|
||||
TToken_string lePlafs(rec.get("G1:PLAFOND").as_string(), ',');
|
||||
// Abilito le colonne che mi servono
|
||||
addColumns(sheet, lePlafs.items());
|
||||
|
||||
for(int i = 0; i < lePlafs.items() && i < PLA_COLS; i++)
|
||||
{
|
||||
TToken_string thisPlaf = lePlafs.get(i);
|
||||
row.add(thisPlaf.get(1), sheet.cid2index(CPC(i))); // _plnumprot
|
||||
row.add(thisPlaf.get(2), sheet.cid2index(CPC(i)+1)); // _plimporto
|
||||
}
|
||||
}
|
||||
|
||||
void TVisLI_mask::resetColumns(TSheet_field& sheet)
|
||||
{
|
||||
return; // Disabled
|
||||
// Disabilito tutte le colonne che non uso
|
||||
for (int i = 0; i < PLA_COLS * 2; i++)
|
||||
sheet.show_column(START_PLA+i, false);
|
||||
}
|
||||
|
||||
void TVisLI_mask::addColumns(TSheet_field& sheet, const int col)
|
||||
{
|
||||
return; // Disabled
|
||||
for(; _plColumns <= col && _plColumns <= PLA_COLS; _plColumns++)
|
||||
{
|
||||
sheet.show_column(CPC(_plColumns), true);
|
||||
sheet.show_column(CPC(_plColumns)+1, true);
|
||||
}
|
||||
}
|
||||
|
||||
void TVisLI_mask::next_page(int p)
|
||||
{
|
||||
TAutomask::next_page(p);
|
||||
if (_filter_changed && curr_win() == sfield(F_RIGHE).parent())
|
||||
{
|
||||
load_sheet();
|
||||
}
|
||||
}
|
||||
|
||||
bool TVisLI_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
{
|
||||
const short id = o.dlg();
|
||||
|
||||
switch(id)
|
||||
{
|
||||
case F_CODNUM:
|
||||
{
|
||||
if(e == fe_modify)
|
||||
{
|
||||
TMask& m = o.mask();
|
||||
const TString4& codnum = o.get();
|
||||
if(codnum.full())
|
||||
{
|
||||
const TCodice_numerazione & cod_num = cached_numerazione(codnum);
|
||||
m.set(F_DESNUM, cod_num.descrizione());
|
||||
m.set(F_TIPODOC, cod_num.tipo_doc(0));
|
||||
const TTipo_documento tipodoc(cod_num.tipo_doc(0));
|
||||
m.set(F_DESTIPODOC, tipodoc.descrizione());
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case F_TIPORIC:
|
||||
if(e == fe_modify)
|
||||
{
|
||||
bool en = o.get() == "D";
|
||||
enable(F_NUMPROT, !en);
|
||||
// Pulisco il campo se devo
|
||||
if(en) reset(F_NUMPROT);
|
||||
for(int i = START_DOC; i <= END_DOC; i++)
|
||||
{
|
||||
enable(i, en);
|
||||
// Pulisco i campi se devo
|
||||
if(!en) reset(i);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case DLG_RECALC:
|
||||
if(e == fe_button)
|
||||
next_page(1);
|
||||
break;
|
||||
case DLG_OK:
|
||||
{
|
||||
// Creo una maschera che richiede la data
|
||||
TMask app("Creazione storico LI", 1, 50, 10);
|
||||
app.add_button_tool(DLG_OK, "Esegui", TOOL_OK);
|
||||
app.add_button_tool(DLG_CANCEL, "Annulla", TOOL_CANCEL);
|
||||
app.add_date(101, 0, "Data iniziale ", 1,1);
|
||||
app.field(101).check_type(CHECK_REQUIRED);
|
||||
// Lancio la maschera
|
||||
if(app.run() == K_ENTER)
|
||||
generaLiStorico(app.get_date(101));
|
||||
break;
|
||||
}
|
||||
case DLG_USER:
|
||||
if (e == fe_button || e == fe_init)
|
||||
{
|
||||
// 1: PROVV+ANNO+CODNUM+NDOC
|
||||
const long anno = o.mask().get_long(A_ANNO);
|
||||
const TString codnum = o.mask().get(A_CODNUM);
|
||||
const long numdoc = o.mask().get_long(A_NUMDOC);
|
||||
const bool enab = numdoc > 0;
|
||||
if (e == fe_button && enab)
|
||||
{
|
||||
o.disable(); // Tecnica anti doppio click!
|
||||
TRectype doc(LF_DOC);
|
||||
doc.put("PROVV", 'D');
|
||||
doc.put("ANNO", anno);
|
||||
doc.put("CODNUM", codnum);
|
||||
doc.put("NDOC", numdoc);
|
||||
doc.edit();
|
||||
o.enable();
|
||||
}
|
||||
else
|
||||
o.enable(enab);
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (e == fe_modify && jolly == 0 && id >= START_MASK && id <= END_MASK)
|
||||
{
|
||||
setFilterChanged();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
class TVisLI_app : public TSkeleton_application
|
||||
{
|
||||
public:
|
||||
void main_loop();
|
||||
};
|
||||
|
||||
void TVisLI_app::main_loop()
|
||||
{
|
||||
open_files(LF_LETINT, LF_DOC, LF_RIGHEDOC);
|
||||
TVisLI_mask m;
|
||||
|
||||
while (m.run() == K_ENTER)
|
||||
{
|
||||
// DO DA TING
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
int li0100(int argc, char* argv[])
|
||||
{
|
||||
TVisLI_app a;
|
||||
a.run(argc, argv, TR("Riferimenti lettere/Documento"));
|
||||
return 0;
|
||||
}
|
7
src/li/li0100.h
Normal file
7
src/li/li0100.h
Normal file
@ -0,0 +1,7 @@
|
||||
|
||||
#define DOCUMENTI_STATO 201
|
||||
|
||||
#define F_DA_DATA 303
|
||||
#define F_A_DATA 303
|
||||
#define F_CODICE_CLIFO_DA 304
|
||||
#define F_CODICE_CLIFO_A 305
|
72
src/li/li0100.msk
Normal file
72
src/li/li0100.msk
Normal file
@ -0,0 +1,72 @@
|
||||
#include "li0100a.h"
|
||||
|
||||
TOOLBAR "topbar" 0 0 0 2
|
||||
#include <stdbar.h>
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Visualizzatore LI per documento" 0 2 0 0
|
||||
|
||||
DATE F_DA_DATA
|
||||
BEGIN
|
||||
PROMPT 1 1 "Da data "
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
DATE F_A_DATA
|
||||
BEGIN
|
||||
PROMPT 20 1 "A data "
|
||||
CHECKTYPE REQUIRED
|
||||
FLAGS "A"
|
||||
END
|
||||
|
||||
NUMBER F_CODICE_CLIFO_DA 6
|
||||
BEGIN
|
||||
PROMPT 1 2 "Da cod. cliente: "
|
||||
FLAG "UR"
|
||||
USE LF_CLIFO
|
||||
INPUT TIPOCF "C"
|
||||
INPUT CODCF F_CODICE_CLIFO_DA
|
||||
DISPLAY "Cliente" CODCF
|
||||
DISPLAY "Ragione sociale@60" RAGSOC
|
||||
OUTPUT F_CODICE_CLIFO_DA CODCF
|
||||
GROUP 1
|
||||
END
|
||||
|
||||
NUMBER F_CODICE_CLIFO_A 6
|
||||
BEGIN
|
||||
PROMPT 32 2 "a: "
|
||||
FLAG "UR"
|
||||
USE LF_CLIFO
|
||||
INPUT TIPOCF "C"
|
||||
INPUT CODCF F_CODICE_CLIFO_A
|
||||
COPY DISPLAY F_CODICE_CLIFO_DA
|
||||
OUTPUT F_CODICE_CLIFO_A CODCF
|
||||
NUM_EXPR #F_CODICE_CLIFO_A>=#F_CODICE_CLIFO_DA
|
||||
WARNING "Digitare un codice maggiore o uguale al campo 'da codice cliente'"
|
||||
GROUP 1
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
||||
|
||||
PAGE "Riga tipo numerazione" -1 -1 78 8
|
||||
|
||||
ENDPAGE
|
||||
|
||||
TOOLBAR "Documento" 0 0 0 2
|
||||
|
||||
BUTTON DLG_OK 2 2
|
||||
BEGIN
|
||||
PROMPT 1 1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_CANCEL 2 2
|
||||
BEGIN
|
||||
PROMPT 1 1 ""
|
||||
END
|
||||
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
59
src/li/li0100a.h
Normal file
59
src/li/li0100a.h
Normal file
@ -0,0 +1,59 @@
|
||||
#define START_MASK 401
|
||||
#define START_DOC 403
|
||||
#define END_DOC 414
|
||||
|
||||
#define F_TIPORIC 401
|
||||
#define F_NUMPROT 402
|
||||
#define F_DATAINI 403
|
||||
#define F_DATAFIN 404
|
||||
#define F_CODNUM 405
|
||||
#define F_DESNUM 406
|
||||
#define F_TIPODOC 407
|
||||
#define F_DESTIPODOC 408
|
||||
#define F_ANNO 409
|
||||
#define F_STATO 410
|
||||
#define F_DACODCF 411
|
||||
#define F_DARAGSOC 412
|
||||
#define F_ACODCF 413
|
||||
#define F_ARAGSOC 414
|
||||
|
||||
#define END_MASK 499
|
||||
|
||||
#define F_RIGHE 301
|
||||
|
||||
#define START_SHEET 101
|
||||
|
||||
#define A_DATADOC 101
|
||||
#define A_ANNO 102
|
||||
#define A_NUMDOC 103
|
||||
#define A_CODNUM 104
|
||||
#define A_TIPODOC 105
|
||||
#define A_TIPOCF 106
|
||||
#define A_CODCF 107
|
||||
#define A_RAGSOC 108
|
||||
#define A_TOTDOC 109
|
||||
// Campi lettere intento
|
||||
#define START_PLA 110
|
||||
|
||||
#define PLA1_NUMPROT 110
|
||||
#define PLA1_QTA 111
|
||||
#define PLA2_NUMPROT 112
|
||||
#define PLA2_QTA 113
|
||||
#define PLA3_NUMPROT 114
|
||||
#define PLA3_QTA 115
|
||||
#define PLA4_NUMPROT 116
|
||||
#define PLA4_QTA 117
|
||||
#define PLA5_NUMPROT 118
|
||||
#define PLA5_QTA 119
|
||||
#define PLA6_NUMPROT 120
|
||||
#define PLA6_QTA 121
|
||||
#define PLA7_NUMPROT 122
|
||||
#define PLA7_QTA 123
|
||||
#define PLA8_NUMPROT 124
|
||||
#define PLA8_QTA 125
|
||||
#define PLA9_NUMPROT 126
|
||||
#define PLA9_QTA 127
|
||||
#define PLA10_NUMPROT 128
|
||||
#define PLA10_QTA 129
|
||||
|
||||
#define END_SHEET 109
|
469
src/li/li0100a.msk
Normal file
469
src/li/li0100a.msk
Normal file
@ -0,0 +1,469 @@
|
||||
#include "li0100a.h"
|
||||
|
||||
TOOLBAR "topbar" 0 0 0 2
|
||||
BUTTON DLG_RECALC 2 2
|
||||
BEGIN
|
||||
PROMPT 1 1 "Carica"
|
||||
PICTURE TOOL_CONVERT
|
||||
END
|
||||
|
||||
BUTTON DLG_OK 2 2
|
||||
BEGIN
|
||||
PROMPT 1 1 "Precarica"
|
||||
PICTURE TOOL_ELABORA
|
||||
END
|
||||
|
||||
#include <helpbar.h>
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Impostazioni" 0 2 0 0
|
||||
|
||||
LISTBOX F_TIPORIC 20
|
||||
BEGIN
|
||||
PROMPT 1 1 "Ricerca per "
|
||||
ITEM "D|Estremi documenti"
|
||||
ITEM "L|Lettera"
|
||||
END
|
||||
|
||||
NUMBER F_NUMPROT 6
|
||||
BEGIN
|
||||
PROMPT 40 1 "Cod. lettera "
|
||||
USE LF_LETINT
|
||||
JOIN LF_CLIFO INTO TIPOCF="C" CODCF=CODCLI
|
||||
KEY 1
|
||||
INPUT ANNO F_ANNO
|
||||
DISPLAY "Anno@6" ANNO
|
||||
DISPLAY "Numprot@8" NUMPROT
|
||||
DISPLAY "Data Reg.@12" DATAREG
|
||||
DISPLAY "Cliente@8" CODCLI
|
||||
DISPLAY "Ragione sociale@50" LF_CLIFO->RAGSOC
|
||||
DISPLAY "Importo" IMPORTO
|
||||
DISPLAY "Chiusa" CHIUSA
|
||||
OUTPUT F_NUMPROT NUMPROT
|
||||
OUTPUT F_ANNO ANNO
|
||||
OUTPUT F_DACODCF CODCLI
|
||||
OUTPUT F_DARAGSOC LF_CLIFO->RAGSOC
|
||||
OUTPUT F_ACODCF CODCLI
|
||||
OUTPUT F_ARAGSOC LF_CLIFO->RAGSOC
|
||||
FLAGS "DU"
|
||||
END
|
||||
|
||||
DATE F_DATAINI
|
||||
BEGIN
|
||||
PROMPT 1 2 "Data iniziale"
|
||||
VALIDATE DATE_CMP_FUNC <= F_DATAFIN
|
||||
WARNING "La data iniziale non può essere maggiore della data finale"
|
||||
END
|
||||
|
||||
DATE F_DATAFIN
|
||||
BEGIN
|
||||
PROMPT 40 2 "Data Finale "
|
||||
VALIDATE DATE_CMP_FUNC >= F_DATAINI
|
||||
WARNING "La data finale non può essere minore della data iniziale"
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 80 5
|
||||
BEGIN
|
||||
PROMPT 0 3 "Documento"
|
||||
END
|
||||
|
||||
STRING F_CODNUM 5
|
||||
BEGIN
|
||||
PROMPT 1 4 "Numerazione "
|
||||
HELP "Codice numerazione"
|
||||
USE %NUM
|
||||
INPUT CODTAB F_CODNUM
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_CODNUM CODTAB
|
||||
OUTPUT F_DESNUM S0
|
||||
FLAG "UPA"
|
||||
WARNING "Numerazione assente"
|
||||
KEY 1 2
|
||||
END
|
||||
|
||||
STRING F_DESNUM 50
|
||||
BEGIN
|
||||
PROMPT 24 4 ""
|
||||
HELP "Descrizione numerazione"
|
||||
USE %NUM KEY 2
|
||||
INPUT S0 F_DESNUM
|
||||
DISPLAY "Descrizione@60" S0
|
||||
DISPLAY "Codice" CODTAB
|
||||
COPY OUTPUT F_CODNUM
|
||||
END
|
||||
|
||||
STRING F_TIPODOC 5
|
||||
BEGIN
|
||||
PROMPT 1 5 "Tipo "
|
||||
HELP "Codice tipo documento"
|
||||
USE %TIP
|
||||
INPUT CODTAB F_TIPODOC
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_TIPODOC CODTAB
|
||||
OUTPUT F_DESTIPODOC S0
|
||||
FLAG "UP"
|
||||
END
|
||||
|
||||
STRING F_DESTIPODOC 50
|
||||
BEGIN
|
||||
PROMPT 24 5 ""
|
||||
HELP "Descrizione tipo documento"
|
||||
USE %TIP KEY 2
|
||||
INPUT S0 F_DESTIPODOC
|
||||
DISPLAY "Descrizione@60" S0
|
||||
DISPLAY "Codice" CODTAB
|
||||
COPY OUTPUT F_TIPODOC
|
||||
END
|
||||
|
||||
NUMBER F_ANNO 4
|
||||
BEGIN
|
||||
PROMPT 1 6 "Esercizio "
|
||||
CHECKTYPE REQUIRED
|
||||
NUM_EXPR #F_ANNO>0
|
||||
FLAG "AP"
|
||||
WARNING "Inserire un anno valido"
|
||||
END
|
||||
|
||||
STRING F_STATO 1
|
||||
BEGIN
|
||||
PROMPT 24 6 "Stato "
|
||||
USE %STD
|
||||
INPUT CODTAB F_STATO
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_STATO CODTAB
|
||||
FLAG "U"
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 80 4
|
||||
BEGIN
|
||||
PROMPT 0 8 "Clienti"
|
||||
END
|
||||
|
||||
NUMBER F_DACODCF 6
|
||||
BEGIN
|
||||
PROMPT 1 9 "Da Codice"
|
||||
USE LF_CLIFO
|
||||
INPUT TIPOCF "C" SELECT
|
||||
INPUT CODCF F_DACODCF
|
||||
DISPLAY "Codice" CODCF
|
||||
DISPLAY "Ragione Sociale@50" RAGSOC
|
||||
DISPLAY "Occasionale@C" OCCAS
|
||||
DISPLAY "Codice Fiscale@16" COFI
|
||||
DISPLAY "Partita IVA@15" PAIV
|
||||
OUTPUT F_DACODCF CODCF
|
||||
OUTPUT F_DARAGSOC RAGSOC
|
||||
CHEKTYPE NORMAL
|
||||
GROUP 1
|
||||
FLAGS ""
|
||||
END
|
||||
|
||||
STRING F_DARAGSOC 50 49
|
||||
BEGIN
|
||||
PROMPT 21 9 "R.Soc"
|
||||
USE LF_CLIFO KEY 2
|
||||
INPUT TIPOCF "C" SELECT
|
||||
INPUT RAGSOC F_DARAGSOC
|
||||
DISPLAY "Ragione Sociale@50" RAGSOC
|
||||
DISPLAY "Codice" CODCF
|
||||
DISPLAY "Codice Fiscale@16" COFI
|
||||
DISPLAY "Partita IVA@15" PAIV
|
||||
COPY OUTPUT F_DACODCF
|
||||
ADD RUN CG0 -1
|
||||
GROUP 1
|
||||
FLAGS ""
|
||||
END
|
||||
|
||||
|
||||
NUMBER F_ACODCF 6
|
||||
BEGIN
|
||||
PROMPT 1 10 "A Codice "
|
||||
USE LF_CLIFO
|
||||
INPUT TIPOCF "C" SELECT
|
||||
INPUT CODCF F_ACODCF
|
||||
DISPLAY "Codice" CODCF
|
||||
DISPLAY "Ragione Sociale@50" RAGSOC
|
||||
DISPLAY "Occasionale@C" OCCAS
|
||||
DISPLAY "Codice Fiscale@16" COFI
|
||||
DISPLAY "Partita IVA@15" PAIV
|
||||
OUTPUT F_ACODCF CODCF
|
||||
OUTPUT F_ARAGSOC RAGSOC
|
||||
CHEKTYPE NORMAL
|
||||
GROUP 1
|
||||
FLAGS ""
|
||||
END
|
||||
|
||||
STRING F_ARAGSOC 50 49
|
||||
BEGIN
|
||||
PROMPT 21 10 "R.Soc"
|
||||
USE LF_CLIFO KEY 2
|
||||
INPUT TIPOCF "C" SELECT
|
||||
INPUT RAGSOC F_ARAGSOC
|
||||
DISPLAY "Ragione Sociale@50" RAGSOC
|
||||
DISPLAY "Codice" CODCF
|
||||
DISPLAY "Codice Fiscale@16" COFI
|
||||
DISPLAY "Partita IVA@15" PAIV
|
||||
COPY OUTPUT F_ACODCF
|
||||
ADD RUN CG0 -1
|
||||
GROUP 1
|
||||
FLAGS ""
|
||||
END
|
||||
|
||||
STRING DLG_PROFILE 256
|
||||
BEGIN
|
||||
PROMPT 1 -1 "Profilo "
|
||||
PSELECT
|
||||
FLAGS "H"
|
||||
END
|
||||
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Documenti/Lettere Intento" 0 2 0 0
|
||||
|
||||
SPREADSHEET F_RIGHE
|
||||
BEGIN
|
||||
PROMPT 0 0 "Righe movimenti"
|
||||
ITEM "Data\n Doc.@8F"
|
||||
ITEM "Anno\nDoc.@5F"
|
||||
ITEM "Numero\nDocum.@5F"
|
||||
ITEM "Cod.\nNum.@8F"
|
||||
ITEM "Tipo\nDoc.@4F"
|
||||
ITEM "C/F@2"
|
||||
ITEM "Codice@6"
|
||||
ITEM "Ragione Sociale@35"
|
||||
ITEM "Tot. Doc.@10"
|
||||
ITEM "Num Prot1@8"
|
||||
ITEM "Utilizzato1@10"
|
||||
ITEM "Num Prot2@8"
|
||||
ITEM "Utilizzato2@10"
|
||||
ITEM "Num Prot3@8"
|
||||
ITEM "Utilizzato3@10"
|
||||
ITEM "Num Prot4@8"
|
||||
ITEM "Utilizzato4@10"
|
||||
ITEM "Num Prot5@8"
|
||||
ITEM "Utilizzato5@10"
|
||||
ITEM "Num Prot6@8"
|
||||
ITEM "Utilizzato6@10"
|
||||
ITEM "Num Prot7@8"
|
||||
ITEM "Utilizzato7@10"
|
||||
ITEM "Num Prot8@8"
|
||||
ITEM "Utilizzato8@10"
|
||||
ITEM "Num Prot9@8"
|
||||
ITEM "Utilizzato9@10"
|
||||
ITEM "Num Prot10@8"
|
||||
ITEM "Utilizzato10@10"
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
||||
|
||||
PAGE "Riga" -1 -1 69 14
|
||||
|
||||
DATE A_DATADOC
|
||||
BEGIN
|
||||
PROMPT 26 0 "Data documento."
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER A_ANNO 4
|
||||
BEGIN
|
||||
PROMPT 1 0 "Anno documento"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER A_NUMDOC 10
|
||||
BEGIN
|
||||
PROMPT 1 0 "Numero documento"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING A_CODNUM 5
|
||||
BEGIN
|
||||
PROMPT 1 0 "Codice numerazione documento"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING A_TIPODOC 5
|
||||
BEGIN
|
||||
PROMPT 23 6 "Tipo doc. "
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING A_TIPOCF 1
|
||||
BEGIN
|
||||
PROMPT 1 1 "Tipo C/F "
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER A_CODCF 6
|
||||
BEGIN
|
||||
PROMPT 26 1 "Cod. C/F"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING A_RAGSOC 50 47
|
||||
BEGIN
|
||||
FIELD RAGSOC
|
||||
PROMPT 1 2 "Ragione Sociale"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER A_TOTDOC 12 2
|
||||
BEGIN
|
||||
PROMPT 42 8 "Imponibile"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER PLA1_NUMPROT 6
|
||||
BEGIN
|
||||
PROMPT 42 8 "Num Prot"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER PLA1_QTA 12 2
|
||||
BEGIN
|
||||
PROMPT 42 8 "Util"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER PLA2_NUMPROT 6
|
||||
BEGIN
|
||||
PROMPT 42 8 "Num Prot"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER PLA2_QTA 12 2
|
||||
BEGIN
|
||||
PROMPT 42 8 "Util"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER PLA3_NUMPROT 6
|
||||
BEGIN
|
||||
PROMPT 42 8 "Num Prot"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER PLA3_QTA 12 2
|
||||
BEGIN
|
||||
PROMPT 42 8 "Util"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER PLA4_NUMPROT 6
|
||||
BEGIN
|
||||
PROMPT 42 8 "Num Prot"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER PLA4_QTA 12 2
|
||||
BEGIN
|
||||
PROMPT 42 8 "Util"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER PLA5_NUMPROT 6
|
||||
BEGIN
|
||||
PROMPT 42 8 "Num Prot"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER PLA5_QTA 12 2
|
||||
BEGIN
|
||||
PROMPT 42 8 "Util"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER PLA6_NUMPROT 6
|
||||
BEGIN
|
||||
PROMPT 42 8 "Num Prot"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER PLA6_QTA 12 2
|
||||
BEGIN
|
||||
PROMPT 42 8 "Util"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER PLA7_NUMPROT 6
|
||||
BEGIN
|
||||
PROMPT 42 8 "Num Prot"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER PLA7_QTA 12 2
|
||||
BEGIN
|
||||
PROMPT 42 8 "Util"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER PLA8_NUMPROT 6
|
||||
BEGIN
|
||||
PROMPT 42 8 "Num Prot"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER PLA8_QTA 12 2
|
||||
BEGIN
|
||||
PROMPT 42 8 "Util"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER PLA9_NUMPROT 6
|
||||
BEGIN
|
||||
PROMPT 42 8 "Num Prot"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER PLA9_QTA 12 2
|
||||
BEGIN
|
||||
PROMPT 42 8 "Util"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER PLA10_NUMPROT 6
|
||||
BEGIN
|
||||
PROMPT 42 8 "Num Prot"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER PLA10_QTA 12 2
|
||||
BEGIN
|
||||
PROMPT 42 8 "Util"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
TOOLBAR "topbar" 0 0 0 2
|
||||
|
||||
BUTTON DLG_OK 2 2
|
||||
BEGIN
|
||||
PROMPT 1 1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_USER 2 2
|
||||
BEGIN
|
||||
PROMPT 2 1 "Collega"
|
||||
PICTURE TOOL_LINK
|
||||
END
|
||||
|
||||
BUTTON DLG_DELREC 2 2
|
||||
BEGIN
|
||||
PROMPT 2 1 "Elimina"
|
||||
PICTURE TOOL_DELREC
|
||||
END
|
||||
|
||||
BUTTON DLG_CANCEL 2 2
|
||||
BEGIN
|
||||
PROMPT 4 1 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
@ -88,8 +88,7 @@ void TResDI_mask::elabTipiDoc(TToken_string& tipi, TToken_string& stati, TToken_
|
||||
}
|
||||
|
||||
class TResDI_app : public TSkeleton_application
|
||||
{
|
||||
|
||||
{
|
||||
void elab(TResDI_mask& m);
|
||||
public:
|
||||
virtual void main_loop();
|
||||
@ -123,7 +122,7 @@ void TResDI_app::elab(TResDI_mask& m)
|
||||
{
|
||||
TRectype row_clifo(c_clifo.curr());
|
||||
|
||||
TLi_manager currentCli(row_clifo.get_char("TIPOCF"), row_clifo.get_long("CODCF")); // Inizializzo l'oggetto per la gestione del plafond
|
||||
TLi_manager currentCli(row_clifo.get_char("TIPOCF"), row_clifo.get_long("CODCF"), aData); // Inizializzo l'oggetto per la gestione del plafond
|
||||
if(currentCli.hasValidPlafond())
|
||||
{
|
||||
real plafond = currentCli.getPlafond();
|
||||
|
@ -1,29 +1,16 @@
|
||||
#include "lilib01.h"
|
||||
#include <recarray.h>
|
||||
#include <utility.h>
|
||||
#include <progind.h>
|
||||
|
||||
#define SOLUZIONE_UNICA 1
|
||||
#define FINO_A_PLAFOND 2
|
||||
|
||||
void TLi_manager::elabTipiStati()
|
||||
{
|
||||
if(tipi.blank() && stati.blank())
|
||||
{
|
||||
for(int i = 0; i < tipidoc.items(); i++)
|
||||
{
|
||||
TString app("");
|
||||
tipidoc.get(i, app);
|
||||
TToken_string statidoc(ini_get_string(CONFIG_DITTA, "li", app), ',');
|
||||
for(int j = statidoc.get_int(0); j <= statidoc.get_int(1); j++)
|
||||
{
|
||||
tipi.add(app);
|
||||
stati.add(j);
|
||||
}
|
||||
}
|
||||
}
|
||||
createTipiStati(tipi, stati);
|
||||
}
|
||||
|
||||
|
||||
const TToken_string& TLi_manager::getUse(TDocumento& d, const bool write)
|
||||
{
|
||||
static TToken_string& ret = get_tmp_string();
|
||||
@ -428,6 +415,12 @@ bool TLi_manager::recalcAfter(const TDocumento& d, TLog_report& lerr)
|
||||
|
||||
void TLi_manager::elabPlafond()
|
||||
{
|
||||
validPlafond = false;
|
||||
|
||||
// Controllo preventivo per evitare di fare calcoli su anni precedenti al plafond
|
||||
if(iniDicInt.year() < 2017)
|
||||
return;
|
||||
|
||||
TRelation letint(LF_LETINT);
|
||||
TRectype filtro(letint.curr());
|
||||
filtro.add("CODCLI", codcli);
|
||||
@ -436,8 +429,6 @@ void TLi_manager::elabPlafond()
|
||||
// Creo un cursore ordinato e prelevo la prima riga non chiusa
|
||||
TCursor c_dicint(&letint, "", 2, &filtro, &filtro);
|
||||
|
||||
validPlafond = false;
|
||||
|
||||
if(c_dicint.items() > 0)
|
||||
{
|
||||
// Cerco finchè non arrivo alla fine o non trovo una soluzione
|
||||
@ -644,8 +635,7 @@ bool TLi_manager::testPlafond(TLista_documenti& dout, TLog_report& lerr)
|
||||
/* Per scelte implementative non ha una accuratezza del 100% */
|
||||
bool TLi_manager::checkUtilizzo(TDocumento& d, real impNC)
|
||||
{
|
||||
TLista_documenti din;
|
||||
bool ok;
|
||||
bool ok = true;
|
||||
TToken_string lePlafs(d.get("PLAFOND"), ',');
|
||||
|
||||
// Se me lo passa la funzione evito di calcolarlo
|
||||
@ -704,7 +694,6 @@ void TLi_manager::revertModifiche()
|
||||
|
||||
TLi_manager::TLi_manager(const char t, const long c, TDate iniDic, TDate finDic)
|
||||
: tipocf (t), codcli(c), iniDicInt(iniDic), finDicInt(finDic),
|
||||
tipidoc(ini_get_string(CONFIG_DITTA, "li", "TIPIDOC")),
|
||||
codivaDef(ini_get_string(CONFIG_DITTA, "li", "CODIVA")),
|
||||
codivaAlt(ini_get_string(CONFIG_DITTA, "li", "CODIVALT")),
|
||||
plafond(ZERO), validPlafond(false), soluzione(false), elabPR(false)
|
||||
@ -715,7 +704,6 @@ TLi_manager::TLi_manager(const char t, const long c, TDate iniDic, TDate finDic)
|
||||
|
||||
TLi_manager::TLi_manager(const char t, const long c, TDate finDic)
|
||||
: tipocf (t), codcli(c), finDicInt(finDic),
|
||||
tipidoc(ini_get_string(CONFIG_DITTA, "li", "TIPIDOC")),
|
||||
codivaDef(ini_get_string(CONFIG_DITTA, "li", "CODIVA")),
|
||||
codivaAlt(ini_get_string(CONFIG_DITTA, "li", "CODIVALT")),
|
||||
plafond(ZERO), validPlafond(false), soluzione(false), elabPR(false)
|
||||
@ -725,4 +713,108 @@ TLi_manager::TLi_manager(const char t, const long c, TDate finDic)
|
||||
iniDicInt.set_year(finDic.year());
|
||||
elabTipiStati();
|
||||
elabPlafond();
|
||||
}
|
||||
|
||||
static void createTipiStati(TToken_string& tipi, TToken_string& stati)
|
||||
{
|
||||
static const TToken_string tipidoc(ini_get_string(CONFIG_DITTA, "li", "TIPIDOC"));
|
||||
if(tipi.blank() && stati.blank())
|
||||
{
|
||||
for(int i = 0; i < tipidoc.items(); i++)
|
||||
{
|
||||
TString app("");
|
||||
tipidoc.get(i, app);
|
||||
TToken_string statidoc(ini_get_string(CONFIG_DITTA, "li", app), ',');
|
||||
for(int j = statidoc.get_int(0); j <= statidoc.get_int(1); j++)
|
||||
{
|
||||
tipi.add(app);
|
||||
stati.add(j);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool generaLiStorico(TDate dataIni)
|
||||
{
|
||||
// Apro la tabella dei plafonds con chiave 2 (CODCLI+ANNO+NUMPROT) e per ogni cliente calcolo i plafond dal 2017
|
||||
TRelation rletint(LF_LETINT);
|
||||
TString filter = "DAL>="; filter << dataIni.date2ansi();
|
||||
TCursor cletint(&rletint, filter, 2);
|
||||
static TToken_string tipi, stati;
|
||||
createTipiStati(tipi, stati);
|
||||
|
||||
static TString codIVAP = ini_get_string(CONFIG_DITTA, "li", "CODIVA");
|
||||
static TString codIVAS = ini_get_string(CONFIG_DITTA, "li", "CODIVALT");
|
||||
|
||||
TProgress_monitor status(cletint.items(), "Aggiornamento plafond");
|
||||
|
||||
for(cletint = 0; cletint.pos() < cletint.items();) // Il cursore avanza sotto
|
||||
{
|
||||
if(!status.add_status())
|
||||
break;
|
||||
TRectype rletint = cletint.curr();
|
||||
++cletint;
|
||||
TRectype rletintn = cletint.curr();
|
||||
|
||||
// Controllo subuto che non sia una dichiarazione a tempo
|
||||
if(rletint.get_int("TIPOOP") == 3)
|
||||
continue;
|
||||
|
||||
// Date
|
||||
TDate startCurr = rletint.get_date("DAL"), endCurr;
|
||||
endCurr = rletint.get_int("CODCLI") == rletintn.get_int("CODCLI") ? rletintn.get_date("DAL")-- : NULLDATE;
|
||||
// Dati lettera
|
||||
real impLI = rletint.get_real("IMPORTO");
|
||||
bool soluzione = rletint.get_int("TIPOOP") == SOLUZIONE_UNICA;
|
||||
|
||||
// Adesso che so le date apro tutti i documenti
|
||||
TLista_documenti din;
|
||||
din.read('D', 'C', rletint.get_long("CODCLI"), startCurr.year(), tipi, stati, startCurr, endCurr);
|
||||
for(int i = 0; i < din.items(); i++)
|
||||
{
|
||||
#ifdef DBG
|
||||
if(din[i].numero() == 1202 && din[i].anno() == 2017)
|
||||
bool tolla = true;
|
||||
#endif
|
||||
real utilizzato = ZERO;
|
||||
TAssoc_array tabIva = din[i].tabella_iva(true);
|
||||
for (TRiepilogo_iva * totali = (TRiepilogo_iva *) tabIva.get(); totali != NULL; totali = (TRiepilogo_iva *) tabIva.get())
|
||||
{
|
||||
if(totali->cod_iva().codice() == codIVAP || totali->cod_iva().codice() == codIVAS)
|
||||
utilizzato += cache().get("%TIP", din[i].tipo().codice()).get_bool("B7") ? -totali->imp_orig() : totali->imp_orig();
|
||||
}
|
||||
|
||||
if(utilizzato.is_zero())
|
||||
{
|
||||
if(DEBUG_ENABLED)
|
||||
{
|
||||
static bool erase = yesno_box("Vuoi resettare anche i documenti con utilizzo a zero?\nCi metterà più tempo");
|
||||
din[i].put("PLAFOND", "");
|
||||
din[i].rewrite();
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
// Controllo di non superare il plafond
|
||||
if(impLI >= utilizzato)
|
||||
{
|
||||
// Creo la chiave da scrivere e metto tutto dentro
|
||||
TString key; key << rletint.get("ANNO") << "|" << rletint.get("NUMPROT") << "|" << utilizzato.string();
|
||||
din[i].put("PLAFOND", key);
|
||||
din[i].rewrite();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Error!
|
||||
if(DEBUG_ENABLED)
|
||||
warning_box("Superato plafond, si passa alla nuova lettera");
|
||||
break;
|
||||
}
|
||||
|
||||
// Solo per una lettera
|
||||
if(soluzione)
|
||||
break;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
@ -35,7 +35,6 @@ class TLi_manager : TObject
|
||||
TDate finDicInt;
|
||||
real plafond;
|
||||
|
||||
const TToken_string tipidoc;
|
||||
const TString codivaDef;
|
||||
const TString codivaAlt;
|
||||
// Elenco di plafond con eventuale
|
||||
@ -100,6 +99,8 @@ public:
|
||||
virtual ~TLi_manager() {}
|
||||
};
|
||||
|
||||
static void createTipiStati(TToken_string& tipi, TToken_string& stati);
|
||||
bool generaLiStorico(TDate dataIni);
|
||||
|
||||
|
||||
#endif
|
Loading…
x
Reference in New Issue
Block a user