Patch level :10.0 1028

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :
altre aggiunte alle stampe della rilevazione ore (sheet cms speciali anche nella stampa per risorsa)


git-svn-id: svn://10.65.10.50/branches/R_10_00@22279 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2011-06-17 09:47:02 +00:00
parent 003d4820db
commit 63e847f578
7 changed files with 180 additions and 61 deletions

View File

@ -47,7 +47,7 @@ class TRil_ore_ris_mask : public TAutomask
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, TReport& rep) const; void elabora_risorsa(const TString& curr_risorsa, const int curr_mese, const bool ignore, TReport& rep) const;
public: public:
void elabora() const; void elabora() const;
@ -65,7 +65,7 @@ bool TRil_ore_ris_mask::on_field_event(TOperable_field& o, TField_event e, long
return true; return true;
} }
void TRil_ore_ris_mask::elabora_risorsa(const TString& curr_risorsa, const int curr_mese, 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 char tipo_stampa = get(F_TIPOSTAMPA)[0]; const char tipo_stampa = get(F_TIPOSTAMPA)[0];
@ -91,10 +91,16 @@ void TRil_ore_ris_mask::elabora_risorsa(const TString& curr_risorsa, const int c
query << "\nFROM TIPO=#TIPO TIPORA=#TPRA CODICE=#CODICE"; query << "\nFROM TIPO=#TIPO TIPORA=#TPRA CODICE=#CODICE";
query << "\nTO TIPO=#TIPO TIPORA=#TPRA CODICE=#CODICE"; query << "\nTO TIPO=#TIPO TIPORA=#TPRA CODICE=#CODICE";
TISAM_recordset rilore_recset(query); TRil_ore_cms_recordset rilore_recset(query);
rilore_recset.set_var("#TPRA", tiporisorsa); rilore_recset.set_var("#TPRA", tiporisorsa);
rilore_recset.set_var("#CODICE", curr_risorsa); rilore_recset.set_var("#CODICE", curr_risorsa);
//aggiunta Adolfica: lista di commesse da considerare separatamente più commessa borraccione..
//..con tutte le altre
TSheet_field& lista = sfield(F_RIGHE);
rilore_recset.set_list(lista.rows_array(), ignore);
//un giro con le ore a 'P'reventivo, uno con quelle a 'C'onsuntivo //un giro con le ore a 'P'reventivo, uno con quelle a 'C'onsuntivo
for (int i = 0; i < 2; i++) for (int i = 0; i < 2; i++)
{ {
@ -254,6 +260,22 @@ void TRil_ore_ris_mask::elabora() const
recset_ris_att.set_var("#ACODICE", a_ris_att); recset_ris_att.set_var("#ACODICE", a_ris_att);
const long recset_ris_att_items = recset_ris_att.items(); const long recset_ris_att_items = recset_ris_att.items();
TSheet_field& lista = sfield(F_RIGHE);
//se la stampa ha come chiave principale il CDC, lo sheet (che e' nascosto!) va vuotato in quanto potrebbe avere elementi..
//..dovuti al profilo della maschera che produrrebbero una stampa non desiderata (per ora!, verra' il momento in cui il CRPA..
//..cambiera' idea..)
const int tipo_ordinamento = get_int(F_ORDINAMENTO);
if (tipo_ordinamento >= 5)
lista.reset();
//Come gestire la lista delle commesse particolari
//a) nel caso la lista sia vuota il giro di stampa è unico, considerando tutte le cms/cdc
//b) nel caso la lista abbia elementi(cms/cdc), viene fatto un primo giro sui soli elementi della lista,...
//poi un successivo su tutte le cms/cdc che non apparivano nella lista
const int ignore_start = 0;
const int ignore_end = !lista.empty();
for (int ignore = ignore_start; ignore <= ignore_end; ignore++)
{
TProgind pi(recset_ris_att_items, msg, true, true); TProgind pi(recset_ris_att_items, msg, true, true);
//per ogni risorsa/attrezzatura dell'elenco genera un report singolo che viene riempito nella elabora_risorsa e.. //per ogni risorsa/attrezzatura dell'elenco genera un report singolo che viene riempito nella elabora_risorsa e..
@ -265,10 +287,12 @@ void TRil_ore_ris_mask::elabora() const
const TString80 curr_risorsa = recset_ris_att.cursor()->curr().get("CODTAB"); const TString80 curr_risorsa = recset_ris_att.cursor()->curr().get("CODTAB");
elabora_risorsa(curr_risorsa, m, rep); elabora_risorsa(curr_risorsa, m, ignore!=0, rep);
book.add(rep); book.add(rep);
} //for (bool ok = recset_ris_att.move_first()... } //for (bool ok = recset_ris_att.move_first()...
}
} //for (int m = da_mese; .. } //for (int m = da_mese; ..
//e alla fine stampa il book //e alla fine stampa il book
book.preview(); book.preview();

View File

@ -14,3 +14,9 @@
#define F_A_MESE 213 #define F_A_MESE 213
#define F_ORDINAMENTO 214 #define F_ORDINAMENTO 214
#define F_SHOW_FASI 215 #define F_SHOW_FASI 215
#define F_RIGHE 220
//campi riga sheet
#define S_CODCMS 101
#define S_DESCRCMS 102

View File

@ -164,20 +164,97 @@ BEGIN
FLAGS "AM" FLAGS "AM"
END END
RADIOBUTTON F_ORDINAMENTO 40 RADIOBUTTON F_ORDINAMENTO 25
BEGIN BEGIN
PROMPT 1 10 "@bStampa e ordina per:" PROMPT 1 10 "@bStampa e ordina per:"
ITEM "1|Commessa" ITEM "1|Commessa"
MESSAGE SHOW,3@
ITEM "2|Commessa - CdC" ITEM "2|Commessa - CdC"
MESSAGE SHOW,3@
ITEM "3|Commessa - Fase" ITEM "3|Commessa - Fase"
MESSAGE SHOW,3@
ITEM "4|Commessa - CdC - Fase" ITEM "4|Commessa - CdC - Fase"
MESSAGE SHOW,3@
ITEM "5|CdC" ITEM "5|CdC"
MESSAGE HIDE,3@
ITEM "6|CdC - Commessa" ITEM "6|CdC - Commessa"
MESSAGE HIDE,3@
ITEM "7|CdC - Fase" ITEM "7|CdC - Fase"
MESSAGE HIDE,3@
ITEM "8|CdC - Commessa - Fase" ITEM "8|CdC - Commessa - Fase"
MESSAGE HIDE,3@
FIELD #ORDINAMENTO FIELD #ORDINAMENTO
END END
TEXT DLG_NULL
BEGIN
PROMPT 27 10 "@bCommesse da considerare separatamente"
GROUP 3
END
SPREADSHEET F_RIGHE 50 9
BEGIN
PROMPT 27 11 ""
ITEM "Codice@20"
ITEM "Descrizione@50"
GROUP 3
END
STRING DLG_PROFILE 50
BEGIN
PROMPT 1 -1 "Profilo "
PSELECT
END
ENDPAGE
ENDMASK
//maschera di riga dello sheet
PAGE "Riga commessa" -1 -1 72 3
STRING S_CODCMS 20
BEGIN
PROMPT 1 1 "Codice "
USE LF_COMMESSE
INPUT CODCMS S_CODCMS
DISPLAY "Codice@20" CODCMS
DISPLAY "Descrizione@50" DESCRIZ
OUTPUT S_CODCMS CODCMS
OUTPUT S_DESCRCMS DESCRIZ
CHECKTYPE NORMAL
END
STRING S_DESCRCMS 50
BEGIN
PROMPT 1 2 "Descrizione "
USE LF_COMMESSE KEY 2
INPUT DESCRIZ S_DESCRCMS
DISPLAY "Descrizione@50" DESCRIZ
DISPLAY "Codice@20" CODCMS
COPY OUTPUT S_CODCMS
CHECKTYPE NORMAL
END
ENDPAGE
TOOLBAR "topbar" 0 0 0 2
BUTTON DLG_OK 2 2
BEGIN
PROMPT 1 1 ""
END
BUTTON DLG_DELREC 2 2
BEGIN
PROMPT 2 1 ""
END
BUTTON DLG_CANCEL 2 2
BEGIN
PROMPT 3 1 ""
END
ENDPAGE ENDPAGE
ENDMASK ENDMASK

View File

@ -1,7 +1,11 @@
#include <relation.h>
#include "../ca/commesse.h" #include "../ca/commesse.h"
#include "../ca/cdc.h" #include "../ca/cdc.h"
#include "../ca/fasi.h" #include "../ca/fasi.h"
#include "rilore.h"
#include "ci1350.h" #include "ci1350.h"
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
@ -31,6 +35,38 @@ TRil_ore_recordset::TRil_ore_recordset()
} }
///////////////////////////////////////////////////////////
// Recordset
///////////////////////////////////////////////////////////
TString_array TRil_ore_cms_recordset::_list;
bool TRil_ore_cms_recordset::_ignore;
//cerca se la commessa sulla riga di rilore in questione è nella lista..
//..delle commesse da ignorare
bool TRil_ore_cms_recordset::cms_cdc_filter(const TRelation* rel)
{
const TRectype& curr_rec = rel->curr();
const TString& curr_codcms = curr_rec.get(RILORE_CODCMS);
FOR_EACH_ARRAY_ROW(_list, r, riga)
{
const char* lista_codcms = riga->get(0);
if (curr_codcms == lista_codcms)
return !_ignore;
}
return _ignore;
}
void TRil_ore_cms_recordset::set_custom_filter(TCursor& cursor) const
{
//se la lista non c'è -> niente filtri
if (_list.empty())
cursor.set_filterfunction(NULL);
else
cursor.set_filterfunction(cms_cdc_filter);
}
/////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////
// Metodi liberi per determinare giorni lavorativi e feriali (nati per ci1300 ci1400) // Metodi liberi per determinare giorni lavorativi e feriali (nati per ci1300 ci1400)
/////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////

View File

@ -15,6 +15,20 @@ public:
}; };
class TRil_ore_cms_recordset : public TISAM_recordset
{
static TString_array _list;
static bool _ignore;
static bool cms_cdc_filter(const TRelation* rel);
protected:
virtual void set_custom_filter(TCursor& cursor) const;
public:
void set_list(const TString_array& list, bool ignore) { _list = list; _ignore = ignore; }
TRil_ore_cms_recordset(const char* query) : TISAM_recordset(query) {}
};
/////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////
// Metodi liberi per determinare giorni lavorativi e feriali (nati per ci1300 ci1400) // Metodi liberi per determinare giorni lavorativi e feriali (nati per ci1300 ci1400)
// e per formattare e riempire i report corrispondenti // e per formattare e riempire i report corrispondenti

View File

@ -13,47 +13,6 @@
#include "ci1350.h" #include "ci1350.h"
#include "ci1400a.h" #include "ci1400a.h"
///////////////////////////////////////////////////////////
// Recordset
///////////////////////////////////////////////////////////
class TRil_ore_cms_recordset : public TISAM_recordset
{
static TString_array _ignore_list;
static bool cms_cdc_ignore(const TRelation* rel);
protected:
virtual void set_custom_filter(TCursor& cursor) const;
public:
void ignore(const TString_array& list) { _ignore_list = list; }
TRil_ore_cms_recordset(const char* query) : TISAM_recordset(query) {}
};
TString_array TRil_ore_cms_recordset::_ignore_list;
//cerca se la commessa sulla riga di rilore in questione è nella lista..
//..delle commesse da ignorare
bool TRil_ore_cms_recordset::cms_cdc_ignore(const TRelation* rel)
{
const TRectype& curr_rec = rel->curr();
const TString& curr_codcms = curr_rec.get(RILORE_CODCMS);
FOR_EACH_ARRAY_ROW(_ignore_list, r, riga)
{
const char* lista_codcms = riga->get(0);
if (curr_codcms == lista_codcms)
return false;
}
return true;
}
void TRil_ore_cms_recordset::set_custom_filter(TCursor& cursor) const
{
if (!_ignore_list.empty())
{
cursor.set_filterfunction(cms_cdc_ignore);
}
}
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// Report // Report
@ -160,13 +119,13 @@ bool TRil_ore_cms_mask::elabora_commessa(const TString& curr_commessa, const int
{ {
rilore_recset.set_var("#CODICE", ""); rilore_recset.set_var("#CODICE", "");
const TSheet_field& lista = sfield(F_RIGHE); const TSheet_field& lista = sfield(F_RIGHE);
rilore_recset.ignore(lista.rows_array()); rilore_recset.set_list(lista.rows_array(), true);
} }
else else
{ {
rilore_recset.set_var("#CODICE", curr_commessa); rilore_recset.set_var("#CODICE", curr_commessa);
TString_array lista_vuota; TString_array lista_vuota;
rilore_recset.ignore(lista_vuota); //azzera la lista di ignoramento nel caso standard e la resetta! rilore_recset.set_list(lista_vuota, true); //azzera la lista di ignoramento nel caso standard e la resetta!
} }
//un giro con le ore a 'P'reventivo, uno con quelle a 'C'onsuntivo //un giro con le ore a 'P'reventivo, uno con quelle a 'C'onsuntivo
@ -315,6 +274,9 @@ void TRil_ore_cms_mask::elabora() const
//aggiunta Adolfica: lista di commesse da considerare separatamente più commessa borraccione.. //aggiunta Adolfica: lista di commesse da considerare separatamente più commessa borraccione..
//..con tutte le altre //..con tutte le altre
// a) se la lista commesse da considerare separatamente ha elementi, lancia l'elaborazione..
//....di una commessa alla volta della lista, che generera' una pagina per commessa, poi considerera'...
//....una commessa virtuale finale in cui ricadono tutte le commesse che non sono nella lista
TSheet_field& lista = sfield(F_RIGHE); TSheet_field& lista = sfield(F_RIGHE);
const int lista_items = lista.items(); const int lista_items = lista.items();
if (lista_items > 0 && cms_cdc.blank()) if (lista_items > 0 && cms_cdc.blank())
@ -332,12 +294,12 @@ void TRil_ore_cms_mask::elabora() const
elabora_commessa(curr_cms_cdc, m, rep); elabora_commessa(curr_cms_cdc, m, rep);
book.add(rep); book.add(rep);
} }
//commessa finale: è l'insieme di tutte le commesse che non rientrano nella lista
recset_cms_cdc.set_var("#CODICE", ""); recset_cms_cdc.set_var("#CODICE", "");
elabora_commessa("_ALTRE_", m, rep); elabora_commessa("_ALTRE_", m, rep);
book.add(rep); book.add(rep);
} }
else //programma standard senza lista commesse else //programma standard senza lista commesse: genera una pagina per ogni commessa
{ {
recset_cms_cdc.set_var("#CODICE", cms_cdc); recset_cms_cdc.set_var("#CODICE", cms_cdc);
@ -345,7 +307,7 @@ void TRil_ore_cms_mask::elabora() const
TProgind pi(recset_cms_cdc_items, msg, true, true); TProgind pi(recset_cms_cdc_items, msg, true, true);
//per ogni cms/cdc dell'elenco genera un report singolo che viene riempito nella elabora_commessa e.. //per ogni cms/cdc dell'elenco commesse (1 o tutte per ora) genera un report singolo che viene riempito nella elabora_commessa e..
//..aggiunto al book per la stampa finale //..aggiunto al book per la stampa finale
for (bool ok = recset_cms_cdc.move_first(); ok; ok = recset_cms_cdc.move_next()) for (bool ok = recset_cms_cdc.move_first(); ok; ok = recset_cms_cdc.move_next())
{ {

View File

@ -135,7 +135,7 @@ ENDPAGE
ENDMASK ENDMASK
//maschera di riga dello sheet //maschera di riga dello sheet
PAGE "Riga commessa" -1 -1 40 6 PAGE "Riga commessa" -1 -1 72 3
STRING S_CODCMS 20 STRING S_CODCMS 20
BEGIN BEGIN