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:
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:
void elabora() const;
@ -65,7 +65,7 @@ bool TRil_ore_ris_mask::on_field_event(TOperable_field& o, TField_event e, long
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 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 << "\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("#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
for (int i = 0; i < 2; i++)
{
@ -254,21 +260,39 @@ void TRil_ore_ris_mask::elabora() const
recset_ris_att.set_var("#ACODICE", a_ris_att);
const long recset_ris_att_items = recset_ris_att.items();
TProgind pi(recset_ris_att_items, msg, true, true);
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();
//per ogni risorsa/attrezzatura dell'elenco genera un report singolo che viene riempito nella elabora_risorsa e..
//..aggiunto al book per la stampa finale
for (bool ok = recset_ris_att.move_first(); ok; ok = recset_ris_att.move_next())
//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++)
{
if (!pi.addstatus(1))
break;
TProgind pi(recset_ris_att_items, msg, true, true);
const TString80 curr_risorsa = recset_ris_att.cursor()->curr().get("CODTAB");
//per ogni risorsa/attrezzatura dell'elenco genera un report singolo che viene riempito nella elabora_risorsa e..
//..aggiunto al book per la stampa finale
for (bool ok = recset_ris_att.move_first(); ok; ok = recset_ris_att.move_next())
{
if (!pi.addstatus(1))
break;
elabora_risorsa(curr_risorsa, m, rep);
const TString80 curr_risorsa = recset_ris_att.cursor()->curr().get("CODTAB");
elabora_risorsa(curr_risorsa, m, ignore!=0, rep);
book.add(rep);
} //for (bool ok = recset_ris_att.move_first()...
}
book.add(rep);
} //for (bool ok = recset_ris_att.move_first()...
} //for (int m = da_mese; ..
//e alla fine stampa il book
book.preview();

View File

@ -14,3 +14,9 @@
#define F_A_MESE 213
#define F_ORDINAMENTO 214
#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"
END
RADIOBUTTON F_ORDINAMENTO 40
RADIOBUTTON F_ORDINAMENTO 25
BEGIN
PROMPT 1 10 "@bStampa e ordina per:"
ITEM "1|Commessa"
MESSAGE SHOW,3@
ITEM "2|Commessa - CdC"
MESSAGE SHOW,3@
ITEM "3|Commessa - Fase"
MESSAGE SHOW,3@
ITEM "4|Commessa - CdC - Fase"
MESSAGE SHOW,3@
ITEM "5|CdC"
MESSAGE HIDE,3@
ITEM "6|CdC - Commessa"
MESSAGE HIDE,3@
ITEM "7|CdC - Fase"
MESSAGE HIDE,3@
ITEM "8|CdC - Commessa - Fase"
MESSAGE HIDE,3@
FIELD #ORDINAMENTO
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
ENDMASK

View File

@ -1,7 +1,11 @@
#include <relation.h>
#include "../ca/commesse.h"
#include "../ca/cdc.h"
#include "../ca/fasi.h"
#include "rilore.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)
///////////////////////////////////////////////////////////////////////////////////////

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)
// e per formattare e riempire i report corrispondenti

View File

@ -13,47 +13,6 @@
#include "ci1350.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
@ -160,13 +119,13 @@ bool TRil_ore_cms_mask::elabora_commessa(const TString& curr_commessa, const int
{
rilore_recset.set_var("#CODICE", "");
const TSheet_field& lista = sfield(F_RIGHE);
rilore_recset.ignore(lista.rows_array());
rilore_recset.set_list(lista.rows_array(), true);
}
else
{
rilore_recset.set_var("#CODICE", curr_commessa);
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
@ -315,6 +274,9 @@ void TRil_ore_cms_mask::elabora() const
//aggiunta Adolfica: lista di commesse da considerare separatamente più commessa borraccione..
//..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);
const int lista_items = lista.items();
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);
book.add(rep);
}
//commessa finale: è l'insieme di tutte le commesse che non rientrano nella lista
recset_cms_cdc.set_var("#CODICE", "");
elabora_commessa("_ALTRE_", m, 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);
@ -345,7 +307,7 @@ void TRil_ore_cms_mask::elabora() const
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
for (bool ok = recset_cms_cdc.move_first(); ok; ok = recset_cms_cdc.move_next())
{

View File

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