Files correlati : Ricompilazione Demo : [ ] Commento : comincia a stampare qualcosa anche per commessa cdc git-svn-id: svn://10.65.10.50/branches/R_10_00@21681 c028cbd2-c16b-5b4b-a496-9718f37d4682
102 lines
2.9 KiB
C++
Executable File
102 lines
2.9 KiB
C++
Executable File
#include "ci1350.h"
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
// Metodi liberi per determinare giorni lavorativi e feriali (nati per ci1300 ci1400)
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
bool ci_is_ferial_day(const TDate& data)
|
|
{
|
|
return data.wday() < 6 && !data.is_holiday();
|
|
}
|
|
|
|
|
|
long ci_calcola_giorni_lavorativi(const TDate& dataini, const TDate& datafine)
|
|
{
|
|
long num_giorni_lav = datafine - dataini + 1;
|
|
//e qui si parrà l'ultima stilla di nobilitate! deve eliminare i giorni festivi dal mucchio!
|
|
if (num_giorni_lav > 1)
|
|
{
|
|
for (TDate data = dataini; data <= datafine; ++data)
|
|
{
|
|
if (!ci_is_ferial_day(data))
|
|
num_giorni_lav--;
|
|
}
|
|
}
|
|
return num_giorni_lav;
|
|
}
|
|
|
|
|
|
long ci_calcola_giorni_lavorativi_cms(const int anno, const int mese, const TDate& ini_cms, const TDate& fine_cms,
|
|
const TDate& dataini, const TDate& datafine, TDate& inizio_lav, TDate& fine_lav)
|
|
{
|
|
//date del mese
|
|
TDate ini_mese(1, mese, anno);
|
|
TDate fine_mese = ini_mese;
|
|
fine_mese.set_end_month();
|
|
|
|
//se la commessa non "interseca" il mese selezionato -> finisce qui
|
|
if (fine_cms < ini_mese || ini_cms > fine_mese)
|
|
return 0;
|
|
//se le date limite lavorative non "intersecano" il mese selezionato -> finisce qui
|
|
if (datafine < ini_mese || dataini > fine_mese)
|
|
return 0;
|
|
|
|
//se è arrivato fin qui -> c'è qualcosa da considerare
|
|
//vanno prese la massima data inizio e la minima data fine
|
|
inizio_lav = fnc_max(ini_mese, ini_cms);
|
|
fine_lav = fnc_min(fine_mese, fine_cms);
|
|
|
|
//e qui si parrà l'ultima stilla di nobilitate! deve eliminare i giorni festivi dal mucchio!
|
|
return ci_calcola_giorni_lavorativi(inizio_lav, fine_lav);
|
|
}
|
|
|
|
|
|
void ci_fill_recset_from_ass(TAssoc_array& ass, TCSV_recordset& recset)
|
|
{
|
|
FOR_EACH_ASSOC_OBJECT(ass, obj, key, itm)
|
|
{
|
|
TToken_string& record_ass = (TToken_string&)*itm;
|
|
real totale_c = record_ass.get(32);
|
|
totale_c.round(1);
|
|
TGeneric_distrib esso(totale_c, 1);
|
|
|
|
for (int j = 1; j <= 31; j++)
|
|
{
|
|
real ore = record_ass.get(j);
|
|
esso.add(ore);
|
|
}
|
|
|
|
//chiave della riga (Cms-CdC-Fase o CdC-Cms-Fase)
|
|
TToken_string linea;
|
|
TToken_string chiave = key;
|
|
FOR_EACH_TOKEN(chiave, tok)
|
|
{
|
|
if (*tok > ' ')
|
|
{
|
|
if (!linea.empty())
|
|
linea << " -- ";
|
|
linea << tok;
|
|
}
|
|
}
|
|
|
|
// Totale preventivo
|
|
real totale_p = record_ass.get(0);
|
|
totale_p.round(1);
|
|
linea.add(totale_p.string());
|
|
|
|
// Totale consuntivo
|
|
for (int k = 1; k <= 31; k++)
|
|
{
|
|
const real ore_giorno = esso.get();
|
|
const char* str_ore = ore_giorno.string();
|
|
linea.add(str_ore, k+1);
|
|
}
|
|
|
|
linea.add(totale_c.string());
|
|
|
|
//aggiunge la riga tokenstringata al csv_recordset
|
|
recset.new_rec(linea);
|
|
}
|
|
//ordina il recordset per chiave
|
|
recset.sort();
|
|
} |