Patch level : 10.0 patch ???

Files correlati     : lvmenu lv0400g.msk e rep
Ricompilazione Demo : [ ]
Commento            :
Aggiunta la nuova stampa contratti


git-svn-id: svn://10.65.10.50/branches/R_10_00@21608 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca83 2011-02-09 08:17:41 +00:00
parent c050a7d07a
commit a36c502a4b
6 changed files with 409 additions and 94 deletions

7
lv/lv0400g.h Executable file

@ -0,0 +1,7 @@
//Definizione campi per maschera lv0400g
//Stampa Contratti da Cliente a Cliente
#define F_DACODCF 201
#define F_DARAGSOC 202
#define F_ACODCF 203
#define F_ARAGSOC 204
#define F_ANNOES 207

123
lv/lv0400g.rep Executable file

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="UTF-8" ?>
<report name="lv0400g" lpi="6">
<font face="Courier New" size="10" />
<section type="Head" pattern="1" />
<section type="Head" level="1" pattern="1" />
<section type="Body" pattern="1" />
<section type="Body" level="1" page_break="1" pattern="1">
<field x="1" type="Testo" align="center" width="91" height="1.5" pattern="1" text="Stampa Contratti per Cliente">
<font italic="1" face="Times New Roman" bold="1" size="12" />
</field>
<field border="2" x="1" y="1.75" type="Linea" width="91" height="0" pattern="1" />
<field x="1" y="2.5" type="Testo" width="7" height="1.25" pattern="1" text="Cliente:">
<font face="Times New Roman" size="10" />
</field>
<field x="6.5" y="2.5" type="Numero" align="right" width="6" height="1.25" pattern="1">
<font face="Times New Roman" size="10" />
<source>LVCONDV.CODCF</source>
</field>
<field x="13.5" y="2.5" type="Stringa" width="50" height="1.25" pattern="1">
<font face="Times New Roman" bold="1" size="10" />
<source>CLIFO.RAGSOC</source>
</field>
<field x="76" y="2.5" type="Testo" width="10" height="1.25" pattern="1" text="Sconto:">
<font face="Times New Roman" size="10" />
</field>
<field border="2" x="1" y="4" type="Linea" width="91" height="0" pattern="1" />
<field x="1" y="4.5" type="Testo" align="right" width="10" pattern="1" text="Art.">
<font face="Times New Roman" size="7" />
</field>
<field x="12" y="4.5" type="Testo" width="25" pattern="1" text="Descrizione">
<font face="Times New Roman" size="7" />
</field>
<field x="39" y="4.5" type="Testo" align="right" width="4" pattern="1" text="Col.">
<font face="Times New Roman" size="7" />
</field>
<field x="45" y="4.5" type="Testo" align="right" width="4" pattern="1" text="Dot.">
<font face="Times New Roman" size="7" />
</field>
<field x="51" y="4.5" type="Testo" align="right" width="4" pattern="1" text="D.Temp.">
<font face="Times New Roman" size="7" />
</field>
<field x="57" y="4.5" type="Testo" align="right" width="4" pattern="1" text="C.Mese">
<font face="Times New Roman" size="7" />
</field>
<field x="63" y="4.5" type="Testo" align="right" width="4" pattern="1" text="C.Anno">
<font face="Times New Roman" size="7" />
</field>
<field x="69" y="4.5" type="Testo" align="right" width="4" pattern="1" text="Prz.">
<font face="Times New Roman" size="7" />
</field>
<field x="75" y="4.5" type="Testo" align="right" width="4" pattern="1" text="Cicl.">
<font face="Times New Roman" size="7" />
</field>
<field x="81" y="4.5" type="Testo" align="right" width="4" pattern="1" text="V.Conv.">
<font face="Times New Roman" size="7" />
</field>
<field x="87" y="4.5" type="Testo" align="right" width="4" pattern="1" text="% Forf.">
<font face="Times New Roman" size="7" />
</field>
</section>
<section type="Head" level="11" pattern="1" />
<section type="Body" level="11" pattern="1">
<sql>USE LVRCONDV
JOIN ANAMAG INTO CODART==CODART
FROM CODCF=#PARENT.CODCF CODCONT=#PARENT.CODCONT
TO CODCF=#PARENT.CODCF CODCONT=#PARENT.CODCONT
</sql>
<field x="1" type="Stringa" align="right" width="10" pattern="1">
<font face="Times New Roman" size="7" />
<source>LVRCONDV.CODART</source>
</field>
<field x="12" type="Stringa" dynamic_height="1" width="25" pattern="1">
<font face="Times New Roman" size="7" />
<source>ANAMAG.DESCR+ANAMAG.DESCRAGG</source>
</field>
<field x="39" type="Testo" align="right" width="4" pattern="1" text="0">
<font face="Times New Roman" size="7" />
</field>
<field x="45" type="Numero" align="right" width="4" pattern="1">
<font face="Times New Roman" size="7" />
<source>#DOTOD</source>
</field>
<field x="51" type="Numero" align="right" width="4" pattern="1">
<font face="Times New Roman" size="7" />
<source>#DOTMP</source>
</field>
<field x="57" type="Numero" align="right" width="4" pattern="1">
<font face="Times New Roman" size="7" />
<source>#CONSMESE</source>
</field>
<field x="63" type="Numero" align="right" width="4" pattern="1">
<font face="Times New Roman" size="7" />
<source>#CONSANNO</source>
</field>
<field x="69" type="Prezzo" align="right" width="4" pattern="1" text="#########,@@">
<font face="Times New Roman" size="7" />
<source>LVRCONDV.PREZZO</source>
</field>
<field x="75" type="Numero" align="right" width="4" pattern="1">
<font face="Times New Roman" size="7" />
<source>LVRCONDV.MINCIC</source>
</field>
<field x="81" type="Prezzo" align="right" width="4" pattern="1" text="#########,@@">
<font face="Times New Roman" size="7" />
<source>LVRCONDV.VALCONV</source>
</field>
<field x="87" type="Numero" align="right" width="4" pattern="1">
<font face="Times New Roman" size="7" />
<source>LVRCONDV.FORFPERCL</source>
</field>
</section>
<section type="Foot" level="11" pattern="1">
<field type="Testo" width="10" pattern="1" text="Totale" />
</section>
<section type="Foot" pattern="1" />
<section type="Foot" level="1" pattern="1" />
<sql>USE LVCONDV
JOIN CLIFO INTO TIPOCF=="C" CODCF==CODCF
FROM CODCF=#F_CODCF_FROM
TO CODCF=#F_CODCF_TO
</sql>
</report>

83
lv/lv0400g.uml Executable file

@ -0,0 +1,83 @@
#include "lv0400g.h"
TOOLBAR "topbar" 0 0 0 2
#include "printbar.h"
ENDPAGE
PAGE "Stampa Contratti per Cliente" -1 -1 40 5
GROUPBOX DLG_NULL 85 5
BEGIN
PROMPT 1 1 "@b Parametri Estrazione"
END
NUMBER F_DACODCF 6
BEGIN
PROMPT 2 2 "Da Cliente "
FLAGS "U"
KEY 1
USE LF_CLIFO
INPUT TIPOCF "C"
INPUT CODCF F_DACODCF
DISPLAY "Codice" CODCF
DISPLAY "Ragione Sociale@50" RAGSOC
OUTPUT F_DACODCF CODCF
OUTPUT F_DARAGSOC RAGSOC
CHECKTYPE REQUIRED
FIELD #F_CODCF_FROM
END
STRING F_DARAGSOC 50
BEGIN
PROMPT 30 2 ""
KEY 2
USE LF_CLIFO KEY 2
INPUT TIPOCF "C"
INPUT RAGSOC F_DARAGSOC
DISPLAY "Ragione Sociale@50" RAGSOC
DISPLAY "Codice" CODCF
COPY OUTPUT F_DACODCF
CHECKTYPE REQUIRED
END
NUMBER F_ACODCF 6
BEGIN
PROMPT 2 3 "A Cliente "
FLAGS "U"
KEY 1
USE LF_CLIFO
INPUT TIPOCF "C"
INPUT CODCF F_ACODCF
DISPLAY "Codice" CODCF
DISPLAY "Ragione Sociale@50" RAGSOC
OUTPUT F_ACODCF CODCF
OUTPUT F_ARAGSOC RAGSOC
CHECKTYPE REQUIRED
FIELD #F_CODCF_TO
END
STRING F_ARAGSOC 50
BEGIN
PROMPT 30 3 ""
KEY 2
USE LF_CLIFO KEY 2
INPUT TIPOCF "C"
INPUT RAGSOC F_ARAGSOC
DISPLAY "Ragione Sociale@50" RAGSOC
DISPLAY "Codice" CODCF
COPY OUTPUT F_ACODCF
CHECKTYPE REQUIRED
END
NUMBER F_ANNOES 4
BEGIN
PROMPT 2 6 "Anno Es"
FLAGS "A"
FIELD #F_ANNO
FLAGS "H"
END
ENDPAGE
ENDMASK

@ -364,77 +364,6 @@ int TRecmag_lavanderie::readat(TBaseisamfile& f, TRecnotype nrec, word lockop)
return TVariable_rectype::readat(f, nrec, lockop);
}
void TRecmag_lavanderie::update()
{
if (_update_time > 0L)
return;
_update_time = 1L;
TString query, filter;
const int anno = get_int(CLIFOGIAC_ANNOES);
const TString4 tipocf(get(CLIFOGIAC_TIPOCF));
const long codcf = get_long(CLIFOGIAC_CODCF);
const int indsped = get_int(CLIFOGIAC_INDSPED);
const TString80 codart(get(CLIFOGIAC_CODART));
const TString80 livello(get(CLIFOGIAC_LIVELLO));
const TDate oggi(TODAY);
TDate imese;
TEsercizi_contabili & esc = esercizi();
const TArticolo & artrec = cached_article(codart);
if (anno >= esc.date2esc(oggi))
{
imese = oggi;
imese.set_day(1);
}
else
imese = esc.esercizio(anno).fine();
/* query="USE MOVMAG KEY 2\n";
query << "SELECT (TIPOCF='C')&&(CODCF==" << codcf << ")&&(STR(CODINDSP==" << indsped << "))&&(BETWEEN(DATACOMP," << imese.date2ansi() << "," << oggi.date2ansi() << "))\n";
query << "FROM ANNOES=" << anno << "\n";
query << "TO ANNOES=" << anno << "\n"; */
query="USE MOVMAG KEY 5\n";
query << "FROM TIPOCF='C'"
<< " CODCF=" << codcf
<< " CODINDSP=" << indsped
<< " DATACOMP=" << imese.string() << "\n";
query << "TO TIPOCF='C'"
<< " CODCF=" << codcf
<< " CODINDSP=" << indsped
<< " DATACOMP=" << oggi.string() << "\n";
TISAM_recordset recmag(query);
TString8 codcausmov;
_consmese = ZERO;
for (bool ok = recmag.move_first(); ok; ok = recmag.move_next())
{
TString queryrmag("USE RMOVMAG\n");
queryrmag << " SELECT (CODART=\"" << codart << "\")&&(LIVGIAC=\"" << livello << "\")\n";
queryrmag << "FROM NUMREG=" << recmag.get(MOVMAG_NUMREG) << "\n"
<< "TO NUMREG=" << recmag.get(MOVMAG_NUMREG) << "\n";
codcausmov = recmag.get(MOVMAG_CODCAUS).as_string();
TISAM_recordset recrmag(queryrmag);
for (bool ok=recrmag.move_first(); ok; ok=recrmag.move_next())
{
const TString& codcaus = recrmag.get(RMOVMAG_CODCAUS).as_string();
const TCausale_magazzino & tcaus = cached_causale_magazzino(codcaus.full() ? codcaus : codcausmov);
int sgn_consmese = tcaus.sgn(s_consmese);
if (sgn_consmese != 0)
{
const real qta = ((TArticolo &)artrec).convert_to_um(recrmag.get(RMOVMAG_QUANT).as_real(), NULL, recrmag.get(RMOVMAG_UM).as_string());
_consmese += real(qta * sgn_consmese);
}
}
}
}
int TRecmag_lavanderie::name2index(const char* fieldname) const
{
if (strcmp(fieldname, "CONSMESE") == 0)
@ -491,6 +420,84 @@ const TString & TRecmag_lavanderie::get_str(const char* fieldname) const
return TVariable_rectype::get_str(fieldname);
}
const real TRecmag_lavanderie::consmese(const TDate& dadata, const TDate& adata) const
{
TString query;
const int anno = get_int(CLIFOGIAC_ANNOES);
const long codcf = get_long(CLIFOGIAC_CODCF);
const int indsped = get_int(CLIFOGIAC_INDSPED);
const TString80 codart(get(CLIFOGIAC_CODART));
const TString80 livello(get(CLIFOGIAC_LIVELLO));
const TArticolo & artrec = cached_article(codart);
/* query="USE MOVMAG KEY 2\n";
query << "SELECT (TIPOCF='C')&&(CODCF==" << codcf << ")&&(STR(CODINDSP==" << indsped << "))&&(BETWEEN(DATACOMP," << imese.date2ansi() << "," << oggi.date2ansi() << "))\n";
query << "FROM ANNOES=" << anno << "\n";
query << "TO ANNOES=" << anno << "\n"; */
query << "USE MOVMAG KEY 5\n"
<< "FROM TIPOCF=C CODCF=" << codcf << " CODINDSP=" << indsped << " DATACOMP=#DADATA\n"
<< "TO TIPOCF=C CODCF=" << codcf << " CODINDSP=" << indsped << " DATACOMP=#ADATA\n";
TISAM_recordset recmag(query);
recmag.set_var("#DADATA", dadata);
recmag.set_var("#ADATA", adata);
TString8 codcausmov;
real consmese = ZERO;
for (bool ok = recmag.move_first(); ok; ok = recmag.move_next())
{
TString queryrmag("USE RMOVMAG\n");
queryrmag << " SELECT (CODART=\"" << codart << "\")&&(LIVGIAC=\"" << livello << "\")\n";
queryrmag << "FROM NUMREG=" << recmag.get(MOVMAG_NUMREG) << "\n"
<< "TO NUMREG=" << recmag.get(MOVMAG_NUMREG) << "\n";
codcausmov = recmag.get(MOVMAG_CODCAUS).as_string();
TISAM_recordset recrmag(queryrmag);
for (bool ok = recrmag.move_first(); ok; ok = recrmag.move_next())
{
const TString& codcaus = recrmag.get(RMOVMAG_CODCAUS).as_string();
const TCausale_magazzino& tcaus = cached_causale_magazzino(codcaus.full() ? codcaus : codcausmov);
int sgn_consmese = tcaus.sgn(s_consmese);
if (sgn_consmese != 0)
{
const real qta = ((TArticolo &)artrec).convert_to_um(recrmag.get(RMOVMAG_QUANT).as_real(), NULL, recrmag.get(RMOVMAG_UM).as_string());
consmese += real(qta * sgn_consmese);
}
}
}
return consmese;
}
void TRecmag_lavanderie::update()
{
if (_update_time > 0L)
return;
_update_time = 1L;
const int anno = get_int(CLIFOGIAC_ANNOES);
TEsercizi_contabili & esc = esercizi();
const TDate oggi(TODAY);
TDate imese;
if (anno >= esc.date2esc(oggi))
{
imese = oggi;
imese.set_day(1);
}
else
imese = esc.esercizio(anno).fine();
_consmese = consmese(imese, oggi);
}
TRecmag_lavanderie::TRecmag_lavanderie()
: TVariable_rectype(LF_CLIFOGIAC)
{
@ -1668,14 +1675,14 @@ TGiac_per_cli::TGiac_per_cli()
return true;
}*/
bool TLV_report::get_usr_val(const TString& name, TVariant& var) const
bool TLV_report::msg_lv_nextcons(TVariant& var) const
{
if(name == "#NEXTCONS")
TRecordset* recset = recordset();
if(recset != NULL)
{
TRecordset& recset = *recordset();
const long clifo = recset.get("CODCF").as_int();
const long contr = recset.get("CODCONT").as_int();
const TDate dtcons = recset.get("DTCONS").as_date();
const long clifo = recset->get("CODCF").as_int();
const long contr = recset->get("CODCONT").as_int();
const TDate dtcons = recset->get("DTCONS").as_date();
if (clifo > 0 && contr > 0 && dtcons.ok())
{
// Scrivere qui il calcolo della prossima data di consegna ...
@ -1683,19 +1690,22 @@ bool TLV_report::get_usr_val(const TString& name, TVariant& var) const
TDate next_dtcons = dtcons;
next_dtcons += 7;
var = next_dtcons;
return true;
}
return true;
}
}
return false;
}
if(name.starts_with("#DOTOD"))
{
TReport_field& cf = *curr_field();
TRecordset* row_recset = cf.section().recordset();
TRecordset& recset = *recordset();
const long codcf = recset.get("CODCF").as_int();
const long codcont = recset.get("CODCONT").as_int();
const TString80 codart = row_recset != NULL ? row_recset->get("CODART").as_string() : recset.get("CODART").as_string();
bool TLV_report::msg_lv_dot(TVariant& var, const char tipo) const
{
TRecordset* recset = recordset();
TReport_field* cf = curr_field();
if(recset != NULL && cf != NULL)
{
TRecordset* row_recset = cf->section().recordset();
const long codcf = recset->get("CODCF").as_int();
const long codcont = recset->get("CODCONT").as_int();
const TString80 codart = row_recset != NULL ? row_recset->get("CODART").as_string() : recset->get("CODART").as_string();
//instanzio un TArticolo_lavanderie per poter recuperare i dati di interesse
TArticolo_lavanderie& artrec = cached_article_laundry(codart, 'C', codcf, 0); //per adesso 0, poi lo modifico
@ -1706,10 +1716,97 @@ bool TLV_report::get_usr_val(const TString& name, TVariant& var) const
//estraggo il record corrispondente su LF_CLIFOGIAC
const TRecmag_lavanderie& reclav = artrec.find_rec(last_esc);
const TVariant x = reclav.get("DOTOD");
cf.set(x);
switch(tipo)
{
case 'C': var = reclav.get(CLIFOGIAC_CONSANNO); break;
case 'O': var = reclav.get(CLIFOGIAC_DOTOD); break;
case 'T': var = reclav.get(CLIFOGIAC_DOTTM); break;
default : break;
}
return true;
}
return false;
}
bool TLV_report::msg_lv_consmese(TVariant& var) const
{
TRecordset* recset = recordset();
TReport_field* cf = curr_field();
if(recset != NULL && cf != NULL)
{
TRecordset* row_recset = cf->section().recordset();
const long codcf = recset->get("CODCF").as_int();
const TString80 codart = row_recset != NULL ? row_recset->get("CODART").as_string() : recset->get("CODART").as_string();
TArticolo_lavanderie& artrec = cached_article_laundry(codart, 'C', codcf, 0);
//setto datasc a oggi e fisso l'anno esercizio
TEsercizi_contabili& esc = esercizi();
const int last_esc = esc.last();
const TDate oggi(TODAY);
//cerco la data di inizio dell'ultimo periodo di fatturazione;
//in pratica devo cercare la data dell'ultima bolla di questo cliente fatturata e incrementarla di un giorno
TString query;
query << "USE DOC KEY 4\n"
<< "FROM TIPOCF=C CODCF=" << codcf << " PROVV=D ANNO=" << last_esc << "CODNUM=\"F01\"\n"
<< "TO TIPOCF=C CODCF=" << codcf << " PROVV=D ANNO=" << last_esc << "CODNUM=\"F01\"\n";
TISAM_recordset fatture(query);
if(fatture.empty())
{
query.cut(0);
query << "USE DOC KEY 4\n"
<< "FROM TIPOCF=C CODCF=" << codcf << " PROVV=D ANNO=" << last_esc - 1 << "CODNUM=\"F01\"\n"
<< "TO TIPOCF=C CODCF=" << codcf << " PROVV=D ANNO=" << last_esc - 1 << "CODNUM=\"F01\"\n";
TISAM_recordset tmp(query);
fatture = tmp;
}
TString note = fatture.get(DOC_NOTE).as_string(); note.strip_spaces();
TString16 data = note.right(10);
TString4 anno = "20"; anno << data.right(2);
TDate dadata(atoi(data.left(2)), atoi(data.mid(2,3)), atoi(anno));
if (dadata.ok())
++dadata;
else
{
dadata = oggi;
dadata.set_day(1);
}
//estraggo il record corrispondente su LF_CLIFOGIAC
const TRecmag_lavanderie& reclav = artrec.find_rec(last_esc);
var = reclav.consmese(dadata, oggi);
return true;
}
return false;
}
bool TLV_report::get_usr_val(const TString& name, TVariant& var) const
{
if(name == "#NEXTCONS")
return msg_lv_nextcons(var);
if(name.starts_with("#DOTOD"))
return msg_lv_dot(var, 'O');
if(name.starts_with("#DOTMP"))
return msg_lv_dot(var, 'T');
if(name.starts_with("#CONSMESE"))
return msg_lv_consmese(var);
if(name.starts_with("#CONSANNO"))
return msg_lv_dot(var, 'C');
return TDocument_report::get_usr_val(name, var);
}

@ -77,7 +77,6 @@ class TRecmag_lavanderie : public TVariable_rectype
protected:
virtual const TString & get_str(const char* fieldname) const ;
virtual void put_str(const char* fieldname, const char* val) { return TRectype::put_str(fieldname, val);}
void update();
public:
virtual int read(TBaseisamfile& f, word op = _isequal, word lockop = _nolock);
@ -89,6 +88,10 @@ public:
virtual int ndec(const char* fieldname) const;
virtual bool exist(const char* fieldname) const;
virtual TObject* dup() const;
void update();
const real consmese(const TDate& dadata, const TDate& adata) const;
TRecmag_lavanderie();
TRecmag_lavanderie(const TRecmag_lavanderie & rec) : TVariable_rectype(rec), _update_time(0L) {}
TRecmag_lavanderie(const TRectype & rec) : TVariable_rectype(rec), _update_time(0L) {}
@ -349,8 +352,9 @@ class TLV_report : public TDocument_report
//size_t _first_lv_msg;
protected:
//bool msg_lv_nexcons(TVariant& var);
//void msg_lv_dot(const TString& name, TVariant& var);
bool msg_lv_nextcons(TVariant& var) const;
bool msg_lv_dot(TVariant& var, const char tipo) const;
bool msg_lv_consmese(TVariant& var) const;
//virtual size_t get_usr_words(TString_array& words) const;
//virtual bool execute_usr_word(unsigned int opcode, TVariant_stack& stack);

@ -73,6 +73,7 @@ Item_04 = "Periodi di sospensione", "lv0 -1 lv0500d", "F"
Item_05 = "Elenco Clienti per Articolo", "lv0 -1 lv0400d", "F"
Item_06 = "Contratti in scadenza Da/A", "lv0 -1 lv0400b", "F"
Item_07 = "Stampa lista dotazioni temporanee scadute", "lv0 -1 lv0400e", "F"
Item_08 = "Contratti Cogeco", "lv0 -1 lv0400g", "F"
[LVMENU_030]
@ -96,7 +97,7 @@ Caption = "Stampe"
Picture = <ba03>
Module = 41
Flags = ""
Item_01 = "Giri", "lv2 -2 lv2300a", "F"
Item_01 = "Giri", "lv2 -2", "F"
[LVMENU_040]
Caption = "Documenti"