#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(); }