Patch level : 12.0 1086

Files correlati     : ci1300ab.rep ci1300bb.rep ci1300a.rep ci1300a.msk ci1300b.rep ci1.exe

Commento        :

Aggiunti report per beneficiario alla stampa ore per risorsa/attrezzatura

aggiunto logo del beneficiario

sintassi da mettere nel prescript del campo immagine :
LOGO_BENEF
#THIS !

L'Id dell'immagine deve essere LOGO+<codice tipo lavoro>
This commit is contained in:
Alessandro Bonazzi 2021-10-10 22:07:22 +02:00
parent f09652c549
commit 8e4d68a734
6 changed files with 112 additions and 45 deletions

View File

@ -11,6 +11,7 @@
#include "../ca/cfcms.h" #include "../ca/cfcms.h"
#include "rilore.h" #include "rilore.h"
#include "cilib.h"
#include "ci1350.h" #include "ci1350.h"
#include "ci1300a.h" #include "ci1300a.h"
@ -34,7 +35,7 @@ protected:
public: public:
void set_codcf(long codcf) { _codcf = codcf; } void set_codcf(long codcf) { _codcf = codcf; }
void set_codtpl(const char *cod) { _codtpl = cod; } void set_codtpl(const char *cod) { _codtpl = cod; }
TRil_ore_ris_report(const TString & tipostampa); TRil_ore_ris_report(bool mensile, bool beneficiario);
}; };
size_t TRil_ore_ris_report::get_usr_words(TString_array& words) const size_t TRil_ore_ris_report::get_usr_words(TString_array& words) const
@ -87,15 +88,15 @@ bool TRil_ore_ris_report::execute_usr_word(unsigned int opcode, TVariant_stack&
return ok; return ok;
} }
TRil_ore_ris_report::TRil_ore_ris_report(const TString & tipostampa) : _codcf(0L) TRil_ore_ris_report::TRil_ore_ris_report(bool mensile, bool beneficiario) : _codcf(0L)
{ {
TFilename report_name; TFilename report_name;
if (tipostampa[1] == 'M') if (mensile)
report_name = "ci1300a"; report_name = "ci1300a";
else else
report_name = "ci1300b"; report_name = "ci1300b";
if (tipostampa[0] == 'B') if (beneficiario)
report_name << "b"; report_name << "b";
load(report_name); load(report_name);
set_recordset(new TRil_ore_recordset); set_recordset(new TRil_ore_recordset);
@ -105,14 +106,17 @@ TRil_ore_ris_report::TRil_ore_ris_report(const TString & tipostampa) : _codcf(0L
// Maschera // Maschera
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
class TRil_ore_ris_mask : public TAutomask class TRil_ore_ris_mask : public TSimpleAutomask
{ {
protected: protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); // virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
void elabora_risorsa(const TString& curr_risorsa, const int curr_mese, const bool ignore, TReport& rep) const; void elabora_risorsa(const TString& curr_risorsa, const int curr_mese, const bool ignore, TReport& rep) const;
const bool mensile() const { return get(F_TIPOSTAMPA)[1] == 'M';} const TString & tipostampa() const { return get(F_TIPOSTAMPA); }
const bool per_beneficiario() const { return get(F_TIPOSTAMPA)[0] == 'B'; } const bool mensile() const { return tipostampa() == "M";}
const bool per_beneficiario() const { return get_bool(F_BENEFICIARIO); }
const real proponi_costo(const char *codlist, const char * tipo, const char * codice, const char * tpora, int mese, int anno) const ;
public: public:
void elabora() const; void elabora() const;
@ -121,19 +125,48 @@ public:
virtual ~TRil_ore_ris_mask() {} virtual ~TRil_ore_ris_mask() {}
}; };
TRil_ore_ris_mask::TRil_ore_ris_mask() : TAutomask("ci1300a") TRil_ore_ris_mask::TRil_ore_ris_mask() : TSimpleAutomask("ci1300a")
{ {
} }
bool TRil_ore_ris_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) /*bool TRil_ore_ris_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{ {
return true; return true;
} }
*/
const real TRil_ore_ris_mask::proponi_costo(const char *codlist, const char * tipo, const char * codice, const char * tpora, int mese, int anno) const
{
real r;
const TDate dal(1, mese, anno);
TRisoatt_key chiave(codlist, tipo[0], codice, dal, tpora);
const TRectype & rec = cache().get("&ROA", chiave);
if (rec.empty())
{
if (chiave.cod().full() && chiave.tpora().full())
{
TModule_table tab("ROA");
tab.put("CODTAB", chiave);
const int err = tab.read();
if (err != _isemptyfile)
{
chiave.overwrite("????????", 21, 8);
if (err != _iseof)
tab.prev();
if (tab.get("CODTAB").match(chiave))
r = tab.get_real("R1");
}
}
}
else
r = rec.get_real("R1");
return r;
}
void TRil_ore_ris_mask::elabora_risorsa(const TString& curr_risorsa, const int curr_mese, const bool ignore, TReport& rep) const void TRil_ore_ris_mask::elabora_risorsa(const TString& curr_risorsa, const int curr_mese, const bool ignore, TReport& rep) const
{ {
const int tipo_ordinamento = get_int(F_ORDINAMENTO); const int tipo_ordinamento = get_int(F_ORDINAMENTO);
const TString4 tipo_stampa = get(F_TIPOSTAMPA);
const int anno = get_int(F_ANNO); const int anno = get_int(F_ANNO);
const int mese = mensile() ? curr_mese : 0; const int mese = mensile() ? curr_mese : 0;
const bool calc_ore_lav = rep.field("F1.98") != NULL; const bool calc_ore_lav = rep.field("F1.98") != NULL;
@ -207,13 +240,13 @@ void TRil_ore_ris_mask::elabora_risorsa(const TString& curr_risorsa, const int c
for (bool ok = rilore_recset.move_first(); ok; ok = rilore_recset.move_next()) for (bool ok = rilore_recset.move_first(); ok; ok = rilore_recset.move_next())
{ {
const TString80 codcosto = rilore_recset.get(RILORE_CODCOSTO).as_string(); const TString80 codcosto = rilore_recset.get_string(RILORE_CODCOSTO);
TString80 codcms = rilore_recset.get(RILORE_CODCMS).as_string(); TString80 codcms = rilore_recset.get_string(RILORE_CODCMS);
const TString16 codfase = rilore_recset.get(RILORE_CODFASE).as_string(); const TString16 codfase = rilore_recset.get_string(RILORE_CODFASE);
//date limite qta ore sul record del file LF_RILORE //date limite qta ore sul record del file LF_RILORE
TDate ini_rilore = rilore_recset.get(RILORE_DADATA).as_date(); TDate ini_rilore = rilore_recset.get_date(RILORE_DADATA);
TDate fine_rilore = rilore_recset.get(RILORE_ADATA).as_date(); TDate fine_rilore = rilore_recset.get_date(RILORE_ADATA);
//adatta le date alla commessa se quest'ultima è contenuta nell'intervallo (può essere più breve.. //adatta le date alla commessa se quest'ultima è contenuta nell'intervallo (può essere più breve..
//..dell'intervallo selezionato, oppure sovrapporsi solo parzialmente) //..dell'intervallo selezionato, oppure sovrapporsi solo parzialmente)
@ -229,10 +262,10 @@ void TRil_ore_ris_mask::elabora_risorsa(const TString& curr_risorsa, const int c
if (giorni_lavorativi_rilore > 0) if (giorni_lavorativi_rilore > 0)
{ {
const real tot_ore = rilore_recset.get(RILORE_QTAORE).as_real(); const real tot_ore = rilore_recset.get_real(RILORE_QTAORE);
const real tot_ore_uso_risorsa_nel_periodo = tot_ore * giorni_lavorativi / giorni_lavorativi_rilore; const real tot_ore_uso_risorsa_nel_periodo = tot_ore * giorni_lavorativi / giorni_lavorativi_rilore;
const TString8 tpora = rilore_recset.get(RILORE_TPORA).as_string(); const TString8 tpora = rilore_recset.get_string(RILORE_TPORA);
const TString8 tpassenza = cache().get("&ORE", tpora, "S2"); const TString8 tpassenza = cache().get("&ORE", tpora, "S2");
//crea la chiave per l'assoc_array //crea la chiave per l'assoc_array
@ -297,7 +330,7 @@ void TRil_ore_ris_mask::elabora_risorsa(const TString& curr_risorsa, const int c
{ {
if (giorni_lavorativi_rilore == 1 || ci_is_ferial_day(data)) if (giorni_lavorativi_rilore == 1 || ci_is_ferial_day(data))
{ {
const int index = tipo_stampa == 'M' ? data.day() : data.month(); const int index = mensile() ? data.day() : data.month();
real prev = record->get(index); real prev = record->get(index);
prev += ore_al_giorno; prev += ore_al_giorno;
record->add(prev.string(), index); record->add(prev.string(), index);
@ -305,6 +338,17 @@ void TRil_ore_ris_mask::elabora_risorsa(const TString& curr_risorsa, const int c
tot += ore_al_giorno; tot += ore_al_giorno;
record->add(tot.string(), 32); record->add(tot.string(), 32);
real totcosto = record->get(34);
real costo = rilore_recset.get_real(RILORE_COSTO);
if (costo == ZERO)
costo = proponi_costo(rilore_recset.get_string(RILORE_CODLIST),
rilore_recset.get_string(RILORE_TIPORA),
rilore_recset.get_string(RILORE_CODICE),
tpora, data.month(), data.year());
totcosto += ore_al_giorno * costo;
record->add(totcosto.string(), 34);
int i = data - inizio_periodo + 1; int i = data - inizio_periodo + 1;
if (tpassenza.full()) if (tpassenza.full())
{ {
@ -372,14 +416,13 @@ void TRil_ore_ris_mask::elabora() const
//book di stampa //book di stampa
TReport_book book; TReport_book book;
//stampa mensile o annuale? //stampa mensile o annuale?
const TString4 tipostampa = get(F_TIPOSTAMPA); TRil_ore_ris_report rep(mensile(), per_beneficiario());
TRil_ore_ris_report rep(tipostampa);
rep.set_codcf(get_long(F_CODFIN)); rep.set_codcf(get_long(F_CODFIN));
rep.set_codtpl(get(F_CODTPL)); rep.set_codtpl(get(F_CODTPL));
int da_mese = 1; int da_mese = 1;
int a_mese = 1; int a_mese = 1;
if (tipostampa[1] == 'M') if (mensile())
{ {
da_mese = get_int(F_DA_MESE); da_mese = get_int(F_DA_MESE);
a_mese = get_int(F_A_MESE); a_mese = get_int(F_A_MESE);
@ -395,7 +438,7 @@ void TRil_ore_ris_mask::elabora() const
//giro su tutti i mesi; se stampa annuale o mese unico -> un giro solo //giro su tutti i mesi; se stampa annuale o mese unico -> un giro solo
for (int m = da_mese; m <= a_mese; m++) for (int m = da_mese; m <= a_mese; m++)
{ {
if (tipostampa[1] == 'M') if (mensile())
format_report_month(get_int(F_ANNO), m, rep); format_report_month(get_int(F_ANNO), m, rep);
//query sulla tabella interessata (risorse o attrezzature) //query sulla tabella interessata (risorse o attrezzature)

View File

@ -20,6 +20,7 @@
#define F_CODFIN 219 #define F_CODFIN 219
#define F_RAGFIN 220 #define F_RAGFIN 220
#define F_RIGHE 221 #define F_RIGHE 221
#define F_BENEFICIARIO 222
//campi riga sheet //campi riga sheet
#define S_CODCMS 101 #define S_CODCMS 101

View File

@ -131,21 +131,25 @@ BEGIN
PROMPT 1 6 "@bFiltri su anno / mese" PROMPT 1 6 "@bFiltri su anno / mese"
END END
LISTBOX F_TIPOSTAMPA 25 LISTBOX F_TIPOSTAMPA 1 8
BEGIN BEGIN
PROMPT 2 7 "Tipo di stampa " PROMPT 2 7 "Tipo di stampa "
ITEM "AM|Mensile" ITEM "M|Mensile"
MESSAGE SHOW,F_DA_MESE|SHOW,F_A_MESE|CLEAR,4@ MESSAGE SHOW,F_DA_MESE|SHOW,F_A_MESE
ITEM "AA|Annuale" ITEM "A|Annuale"
MESSAGE HIDE,F_DA_MESE|HIDE,F_A_MESE|CLEAR,4@ MESSAGE HIDE,F_DA_MESE|HIDE,F_A_MESE
ITEM "BM|Per Beneficiario Mensile"
MESSAGE SHOW,F_DA_MESE|SHOW,F_A_MESE|ENABLE,4@
ITEM "BA|Per Beneficiario Annuale"
MESSAGE HIDE,F_DA_MESE|HIDE,F_A_MESE|ENABLE,4@
FLAGS "Z" FLAGS "Z"
FIELD #TIPOSTAMPA FIELD #TIPOSTAMPA
END END
BOOLEAN F_BENEFICIARIO
BEGIN
PROMPT 32 7 "Per Beneficiario"
MESSAGE FALSE CLEAR,4@
MESSAGE TRUE ENABLE,4@
FIELD #BENEFICIARIO
END
NUMBER F_ANNO 4 NUMBER F_ANNO 4
BEGIN BEGIN
PROMPT 2 8 "Anno " PROMPT 2 8 "Anno "

View File

@ -121,9 +121,23 @@
<field border="1" x="2" y="14" deactivated="" type="Testo" valign="center" hidden="" link="" dynamic_height="" shade_offset="" width="12" codval="" id="" pattern="2" hide_zero="" text=" MESE"> <field border="1" x="2" y="14" deactivated="" type="Testo" valign="center" hidden="" link="" dynamic_height="" shade_offset="" width="12" codval="" id="" pattern="2" hide_zero="" text=" MESE">
<font face="Arial" bold="1" size="8" /> <font face="Arial" bold="1" size="8" />
</field> </field>
<field border="1" x="14" y="14" deactivated="" type="Numero" valign="center" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="8" codval="" id="" pattern="2" hide_zero="" text=""> <field border="1" x="14" y="14" deactivated="" type="Array" valign="center" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="8" codval="" id="" pattern="2" hide_zero="" text="">
<font face="Arial" bold="1" size="8" /> <font face="Arial" bold="1" size="8" />
<source>#MESE</source> <source>#MESE</source>
<list>
<li Value="Gennaio" Code="01" />
<li Value="Febbraio" Code="02" />
<li Value="Marzo" Code="03" />
<li Value="Aprile" Code="04" />
<li Value="Maggio" Code="05" />
<li Value="Giugno" Code="06" />
<li Value="Luglio" Code="07" />
<li Value="Agosto" Code="08" />
<li Value="Settembre" Code="09" />
<li Value="Ottobre" Code="10" />
<li Value="Novembre" Code="11" />
<li Value="Dicembre" Code="12" />
</list>
</field> </field>
<field border="2" x="1" y="16" deactivated="" type="Linea" hidden="" link="" dynamic_height="" shade_offset="" width="166" codval="" height="0" id="" pattern="1" hide_zero="" text="" /> <field border="2" x="1" y="16" deactivated="" type="Linea" hidden="" link="" dynamic_height="" shade_offset="" width="166" codval="" height="0" id="" pattern="1" hide_zero="" text="" />
<field x="76" y="8.25" deactivated="" type="Stringa" hidden="1" link="" dynamic_height="" shade_offset="" width="7" codval="" id="90" pattern="2" hide_zero="" text=""> <field x="76" y="8.25" deactivated="" type="Stringa" hidden="1" link="" dynamic_height="" shade_offset="" width="7" codval="" id="90" pattern="2" hide_zero="" text="">
@ -150,8 +164,7 @@
#THIS !</prescript> #THIS !</prescript>
</field> </field>
<field x="111" y="1" deactivated="" type="Immagine" hidden="" link="" dynamic_height="" shade_offset="" width="40" codval="" height="4" id="111" pattern="1" hide_zero="" text=""> <field x="111" y="1" deactivated="" type="Immagine" hidden="" link="" dynamic_height="" shade_offset="" width="40" codval="" height="4" id="111" pattern="1" hide_zero="" text="">
<prescript description="H1.111 PRESCRIPT">LOGO <prescript description="H1.111 PRESCRIPT">LOGO #THIS !</prescript>
#THIS !</prescript>
</field> </field>
</section> </section>
<section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Head" level="2" hidden="" page_break="" can_break="" pattern="1"> <section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Head" level="2" hidden="" page_break="" can_break="" pattern="1">
@ -182,8 +195,8 @@
<section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Body" level="" hidden="" page_break="" can_break="" pattern="1" /> <section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Body" level="" hidden="" page_break="" can_break="" pattern="1" />
<section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Body" level="1" hidden="" page_break="" can_break="" pattern="1"> <section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Body" level="1" hidden="" page_break="" can_break="" pattern="1">
<font face="Arial Narrow" size="7" /> <font face="Arial Narrow" size="7" />
<field border="1" x="43.5" deactivated="" type="Numero" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="6" codval="" id="" pattern="1" hide_zero="" text=".2"> <field border="1" x="43.5" deactivated="" type="Numero" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="6" codval="" id="" pattern="1" hide_zero="1" text=".2">
<source>Costo</source> <source>TotCostoCons</source>
<prescript description="B1.0 PRESCRIPT">MESSAGE ADD,F1.99</prescript> <prescript description="B1.0 PRESCRIPT">MESSAGE ADD,F1.99</prescript>
</field> </field>
<field border="1" x="50" deactivated="" type="Numero" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="6" codval="" id="" pattern="1" hide_zero="" text=".2"> <field border="1" x="50" deactivated="" type="Numero" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="6" codval="" id="" pattern="1" hide_zero="" text=".2">

View File

@ -116,12 +116,10 @@
<font face="Arial" bold="1" size="8" /> <font face="Arial" bold="1" size="8" />
</field> </field>
<field x="3" y="1" deactivated="" type="Immagine" hidden="" link="" dynamic_height="" shade_offset="" width="80" codval="" height="4" id="110" pattern="1" hide_zero="" text=""> <field x="3" y="1" deactivated="" type="Immagine" hidden="" link="" dynamic_height="" shade_offset="" width="80" codval="" height="4" id="110" pattern="1" hide_zero="" text="">
<prescript description="H1.110 PRESCRIPT">LOGO_BENEF <prescript description="H1.110 PRESCRIPT">LOGO_BENEF #THIS !</prescript>
#THIS !</prescript>
</field> </field>
<field x="82" y="1" deactivated="" type="Immagine" hidden="" link="" dynamic_height="" shade_offset="" width="40" codval="" height="4" id="111" pattern="1" hide_zero="" text=""> <field x="82" y="1" deactivated="" type="Immagine" hidden="" link="" dynamic_height="" shade_offset="" width="40" codval="" height="4" id="111" pattern="1" hide_zero="" text="">
<prescript description="H1.111 PRESCRIPT">LOGO <prescript description="H1.111 PRESCRIPT">LOGO #THIS !</prescript>
#THIS !</prescript>
</field> </field>
</section> </section>
<section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Head" level="2" hidden="" page_break="" can_break="" pattern="1"> <section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Head" level="2" hidden="" page_break="" can_break="" pattern="1">
@ -152,8 +150,8 @@
<section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Body" level="" hidden="" page_break="" can_break="" pattern="1" /> <section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Body" level="" hidden="" page_break="" can_break="" pattern="1" />
<section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Body" level="1" hidden="" page_break="" can_break="" pattern="1"> <section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Body" level="1" hidden="" page_break="" can_break="" pattern="1">
<font face="Arial Narrow" size="7" /> <font face="Arial Narrow" size="7" />
<field border="1" x="44" deactivated="" type="Numero" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="6" codval="" id="" pattern="1" hide_zero="" text=".2"> <field border="1" x="44" deactivated="" type="Numero" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="6" codval="" id="" pattern="1" hide_zero="1" text=".2">
<source>Costo</source> <source>TotCostoCons</source>
<prescript description="B1.0 PRESCRIPT">MESSAGE ADD,F1.99</prescript> <prescript description="B1.0 PRESCRIPT">MESSAGE ADD,F1.99</prescript>
</field> </field>
<field border="1" x="50.5" deactivated="" type="Numero" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="6" codval="" id="" pattern="1" hide_zero="" text=".2"> <field border="1" x="50.5" deactivated="" type="Numero" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="6" codval="" id="" pattern="1" hide_zero="" text=".2">

View File

@ -26,6 +26,7 @@ TRil_ore_recordset::TRil_ore_recordset() : TAS400_recordset("AS400(512)")
create_field("TotPrev", -1, 7, _realfld, false); create_field("TotPrev", -1, 7, _realfld, false);
create_field("TotCons", -1, 7, _realfld, false); create_field("TotCons", -1, 7, _realfld, false);
create_field("TotOreLav", -1, 7, _realfld, false); create_field("TotOreLav", -1, 7, _realfld, false);
create_field("TotCostoCons", -1, 7, _realfld, false);
TString4 name; TString4 name;
for (int i = 1; i <= 31; i++) for (int i = 1; i <= 31; i++)
@ -176,15 +177,22 @@ void ci_fill_recset_from_ass(TAssoc_array& ass, TReport& rep)
real totale_p = record_ass.get(0); real totale_p = record_ass.get(0);
totale_p.round(2); totale_p.round(2);
recset->set("TotPrev", totale_p); recset->set("TotPrev", totale_p);
// Totale consuntivo (lo prende dall'assoc_array e lo butta nel recset appena arrotondato) // Totale consuntivo (lo prende dall'assoc_array e lo butta nel recset appena arrotondato)
real totale_c = record_ass.get(32); real totale_c = record_ass.get(32);
totale_c.round(2); totale_c.round(2);
recset->set("TotCons", totale_c); recset->set("TotCons", totale_c);
// Totale ore lavorat (lo prende dall'assoc_array e lo butta nel recset appena arrotondato) // Totale ore lavorat (lo prende dall'assoc_array e lo butta nel recset appena arrotondato)
real totale_o = record_ass.get(33); real totale_o = record_ass.get(33);
totale_o.round(2); totale_o.round(2);
recset->set("TotOreLav", totale_o); recset->set("TotOreLav", totale_o);
// Totale costo consuntivo (lo prende dall'assoc_array e lo butta nel recset appena arrotondato)
real tot_costo = record_ass.get(34);
tot_costo.round(2);
recset->set("TotCostoCons", tot_costo);
//per avere una distribuzione di ore giornaliera che faccia ritornare il totale consuntivo.. //per avere una distribuzione di ore giornaliera che faccia ritornare il totale consuntivo..
//..indipendentemente da arrotondamenti e troncamenti, si ricorre al mitico TGeneric_distrib... //..indipendentemente da arrotondamenti e troncamenti, si ricorre al mitico TGeneric_distrib...
TGeneric_distrib esso(totale_c, 2); TGeneric_distrib esso(totale_c, 2);