diff --git a/ps/pd6342500.cpp b/ps/pd6342500.cpp index 21ec39481..beeb5b57d 100755 --- a/ps/pd6342500.cpp +++ b/ps/pd6342500.cpp @@ -4,7 +4,6 @@ #include #include #include -#include #include "pd6342500a.h" #include "../ca/calib01.h" @@ -15,15 +14,13 @@ #include "../ca/saldana.h" #include "../ve/velib.h" - #define FIRST_ROW 5 #define FIRST_COL 2 - #define CHAR_RANGE ('Z' - 'A' + 1) #define ROW2SHEET(r) (FIRST_ROW + r) -COLOR header_back[] = {COLOR_CADETBLUE, COLOR_GREEN, COLOR_BLUE, COLOR_GREY, COLOR_SALMON, COLOR_YELLOW} ; +const COLOR header_back[] = {COLOR_CADETBLUE, COLOR_GREEN, COLOR_BLUE, COLOR_GREY, COLOR_SALMON, COLOR_YELLOW} ; static const char * col2string(int col) { @@ -49,6 +46,17 @@ static const char * stringify(TString & s) return s; } +bool _english_excel = false; + +static const TString& sum_formula(int ci, int ri, int cf, int rf) +{ + TString& tmp = get_tmp_string(); + tmp << '=' << (_english_excel ? "SUM" : "SOMMA") << '(' + << col2string(ci) << ROW2SHEET(ri) << ':' + << col2string(cf) << ROW2SHEET(rf) << ')'; + return tmp; +} + class TBilancio_recset : public TCSV_recordset { int dett_length; @@ -75,11 +83,16 @@ bool TBilancio_recset::get_attr(int column, TAttributes & attr, bool header) con { if (column > 1) { - if ((unsigned int) column >= columns() - 1) - attr.set_background(COLOR_RED); - else - attr.set_background(header_back[_group[column - 2] % 6]); - attr.set_foreground(COLOR_WHITE); + COLOR bkg = COLOR_RED; + if ((unsigned int)column < columns() - 1) + { + const int header_colors = sizeof(header_back) / sizeof(header_back[0]); + bkg = header_back[_group[column-2] % header_colors]; + } + COLOR frg = (grayed_color(bkg)&0xFF)>0x80 ? COLOR_BLACK : COLOR_WHITE; + + attr.set_background(bkg); + attr.set_foreground(frg); return true; } else @@ -112,6 +125,8 @@ bool TBilancio_recset::get_attr(int column, TAttributes & attr, bool header) con TBilancio_recset::TBilancio_recset(const TMask & m) : TCSV_recordset("CSV(;)\n") { set_separator(';'); + _english_excel = m.get_bool(F_INGLESE); + TString esercizio = m.get(F_ANNO); const TDate al = m.get_date(F_ADATA); @@ -211,13 +226,14 @@ TBilancio_recset::TBilancio_recset(const TMask & m) : TCSV_recordset("CSV(;)\n") set(ncols + 2, " "); long start_rec = -1; - int nrows = rowkeys.items(); - TProgind p(nrows * 2, "Calcolo Saldi"); + const int nrows = rowkeys.items(); + TProgind p(nrows * 2, TR("Calcolo Saldi")); TAnal_bill bill; for (int r = 0; r < nrows; r++) { - p.addstatus(1L); + if (!p.addstatus(1)) + break; conto = rowkeys.row(r); conto = conto.left(dett_length); bill.set_conto(conto); @@ -229,8 +245,10 @@ TBilancio_recset::TBilancio_recset(const TMask & m) : TCSV_recordset("CSV(;)\n") set(0, last_conto.left(tot_length)); set(1, cache().get(LF_PCONANA, last_conto.left(tot_length), PCONANA_DESCR)); for (int i = 0; i < ncols - 1; i++) - set(i + 2, format("=SUM(%s%d:%s%d)", col2string(i), ROW2SHEET(start_rec), col2string(i), ROW2SHEET(sheet_row - 1))); - set(ncols + 2, format("=SUM(%s%d:%s%d)", col2string(0), ROW2SHEET(sheet_row), col2string(ncols - 1), ROW2SHEET(sheet_row))); + set(i+2, sum_formula(i, start_rec, i, sheet_row-1)); + + set(ncols+2, sum_formula(0, sheet_row, ncols-1, sheet_row)); + _tot_rows.set(sheet_row); new_rec(); } @@ -250,10 +268,13 @@ TBilancio_recset::TBilancio_recset(const TMask & m) : TCSV_recordset("CSV(;)\n") TImporto imp = saldo._ini; imp += saldo._dare; imp += saldo._avere; - imp.normalize('A'); - set(c + 2, imp.valore()); + if (!imp.is_zero()) + { + imp.normalize('A'); + set(c + 2, imp.valore()); + } } - set(ncols + 2, format("=SUM(%s%d:%s%d)", col2string(0), ROW2SHEET(sheet_row), col2string(ncols - 1), ROW2SHEET(sheet_row))); + set(ncols + 2, sum_formula(0, sheet_row, ncols-1, sheet_row)); } if (start_rec != -1) { @@ -261,22 +282,24 @@ TBilancio_recset::TBilancio_recset(const TMask & m) : TCSV_recordset("CSV(;)\n") set(0, last_conto.left(tot_length)); set(1, cache().get(LF_PCONANA, last_conto.left(tot_length), PCONANA_DESCR)); for (int i = 0; i < ncols - 1; i++) - set(i + 2, format("=SUM(%s%d:%s%d)", col2string(i), ROW2SHEET(start_rec), col2string(i), ROW2SHEET(sheet_row - 1))); - set(ncols + 2, format("=SUM(%s%d:%s%d)", col2string(0), ROW2SHEET(sheet_row), col2string(ncols - 1), ROW2SHEET(sheet_row))); + set(i + 2, sum_formula(i, start_rec, i, sheet_row-1)); + + set(ncols + 2, sum_formula(0, sheet_row, ncols-1, sheet_row)); + _tot_rows.set(sheet_row); new_rec(); } sheet_row = new_rec() ; set(1, "Totale Diretti"); + TString expr; for (int c = 0; c < ncols; c++) { - TString expr; - + expr.cut(0); for (int j = _tot_rows.first_one(); j <= _tot_rows.last_one(); j++) if (_tot_rows[j]) expr << ((j == _tot_rows.first_one()) ? '=' : '+') << col2string(c) << ROW2SHEET(j); set(c + 2, expr); - set(ncols + 2, format("=SUM(%s%d:%s%d)", col2string(0), ROW2SHEET(sheet_row), col2string(ncols - 1), ROW2SHEET(sheet_row))); + set(ncols + 2, sum_formula(0, sheet_row, ncols - 1,sheet_row)); } _tot_gen.set(sheet_row); new_rec(); @@ -285,7 +308,8 @@ TBilancio_recset::TBilancio_recset(const TMask & m) : TCSV_recordset("CSV(;)\n") last_conto.cut(0); for (int r = 0; r < nrows; r++) { - p.addstatus(1L); + if (!p.addstatus(1L)) + break; conto = rowkeys.row(r); conto = conto.left(dett_length); bill.set_conto(conto); @@ -297,8 +321,8 @@ TBilancio_recset::TBilancio_recset(const TMask & m) : TCSV_recordset("CSV(;)\n") set(0, last_conto.left(tot_length)); set(1, cache().get(LF_PCONANA, last_conto.left(tot_length), PCONANA_DESCR)); for (int i = 0; i < ncols - 1; i++) - set(i + 2, format("=SUM(%s%d:%s%d)", col2string(i), ROW2SHEET(start_rec), col2string(i), ROW2SHEET(sheet_row - 1))); - set(ncols + 2, format("=SUM(%s%d:%s%d)", col2string(0), ROW2SHEET(sheet_row), col2string(ncols - 1), ROW2SHEET(sheet_row))); + set(i + 2, sum_formula(i, start_rec, i,sheet_row-1)); + set(ncols + 2, sum_formula(0, sheet_row, ncols - 1,sheet_row)); _tot_rows_ind.set(sheet_row); new_rec(); } @@ -318,10 +342,13 @@ TBilancio_recset::TBilancio_recset(const TMask & m) : TCSV_recordset("CSV(;)\n") TImporto imp = saldo._ini; imp += saldo._dare; imp += saldo._avere; - imp.normalize('A'); - set(c + 2, imp.valore()); + if (!imp.is_zero()) + { + imp.normalize('A'); + set(c + 2, imp.valore()); + } } - set(ncols + 2, format("=SUM(%s%d:%s%d)", col2string(0), ROW2SHEET(sheet_row), col2string(ncols - 1), ROW2SHEET(sheet_row))); + set(ncols + 2, sum_formula(0, sheet_row, ncols - 1,sheet_row)); } if (start_rec != -1) { @@ -329,8 +356,8 @@ TBilancio_recset::TBilancio_recset(const TMask & m) : TCSV_recordset("CSV(;)\n") set(0, last_conto.left(tot_length)); set(1, cache().get(LF_PCONANA, last_conto.left(tot_length), PCONANA_DESCR)); for (int i = 0; i < ncols - 1; i++) - set(i + 2, format("=SUM(%s%d:%s%d)", col2string(i), ROW2SHEET(start_rec), col2string(i), ROW2SHEET(sheet_row - 1))); - set(ncols + 2, format("=SUM(%s%d:%s%d)", col2string(0), ROW2SHEET(sheet_row), col2string(ncols - 1), ROW2SHEET(sheet_row))); + set(i + 2, sum_formula(i, start_rec, i,sheet_row-1)); + set(ncols + 2, sum_formula(0, sheet_row, ncols - 1,sheet_row)); _tot_rows_ind.set(sheet_row); new_rec(); } @@ -345,7 +372,7 @@ TBilancio_recset::TBilancio_recset(const TMask & m) : TCSV_recordset("CSV(;)\n") expr << ((j == _tot_rows_ind.first_one()) ? '=' : '+') << col2string(c) << ROW2SHEET(j); set(c + 2, expr); } - set(ncols + 2, format("=SUM(%s%d:%s%d)", col2string(0), ROW2SHEET(sheet_row), col2string(ncols - 1), ROW2SHEET(sheet_row))); + set(ncols + 2, sum_formula(0, sheet_row, ncols - 1,sheet_row)); _tot_gen.set(sheet_row); new_rec(); sheet_row = new_rec(); @@ -359,7 +386,7 @@ TBilancio_recset::TBilancio_recset(const TMask & m) : TCSV_recordset("CSV(;)\n") expr << ((j == _tot_gen.first_one()) ? '=' : '+') << col2string(c) << ROW2SHEET(j); set(c + 2, expr); } - set(ncols + 2, format("=SUM(%s%d:%s%d)", col2string(0), ROW2SHEET(sheet_row), col2string(ncols - 1), ROW2SHEET(sheet_row))); + set(ncols + 2, sum_formula(0, sheet_row, ncols - 1,sheet_row)); _tot_fin = sheet_row; } @@ -413,7 +440,10 @@ void TSaldi_ana_app::main_loop() fname.add(m.get(F_NAME)); if (fname.full()) + { b.save_as(fname, fmt_unknown); + xvt_sys_goto_url(fname, "open"); + } } } diff --git a/ps/pd6342500a.h b/ps/pd6342500a.h index 3c72522b7..df3f262ac 100755 --- a/ps/pd6342500a.h +++ b/ps/pd6342500a.h @@ -4,7 +4,7 @@ #define F_PATH 103 #define F_NAME 104 #define F_TIPO 105 - +#define F_INGLESE 106 #define COLOR_GREY 0x545454 #define COLOR_SILVER 0xC0C0C0 diff --git a/ps/pd6342500a.uml b/ps/pd6342500a.uml index 5855f9fc4..090a9a385 100755 --- a/ps/pd6342500a.uml +++ b/ps/pd6342500a.uml @@ -2,7 +2,14 @@ TOOLBAR "topbar" 0 0 0 2 -#include +BUTTON DLG_OK 2 2 +BEGIN + PROMPT 1 1 "Elabora" + PICTURE TOOL_EXCEL +END + +#include + ENDPAGE @@ -55,7 +62,7 @@ BEGIN PROMPT 41 4 "Al " END -GROUPBOX DLG_NULL 78 4 +GROUPBOX DLG_NULL 78 5 BEGIN PROMPT 1 7 "@bFoglio Excel del calcolo" END @@ -72,5 +79,10 @@ BEGIN FSELECT "*.xls" END +BOOLEAN F_INGLESE +BEGIN + PROMPT 2 10 "Esportazione formule in inglese (es: SOMMA -> SUM)" +END + ENDPAGE ENDMASK