campo-sirio/m770/777201.cpp
guy c846ab1358 CU 2016
git-svn-id: svn://10.65.10.50/branches/R_10_00@23178 c028cbd2-c16b-5b4b-a496-9718f37d4682
2016-02-25 11:33:25 +00:00

921 lines
36 KiB
C++
Raw Blame History

#include "777200.h"
#include <colors.h>
#include <isam.h>
const COLOR CU_BACKGROUND = XVT_MAKE_COLOR(224,224,224);
const TReport_font& best_font(const char* name, int size, XVT_FONT_STYLE_MASK fs)
{
static TAssoc_array fonts;
static const long famax = 1024;
static char* family[famax] = { 0 };
static long families = 0;
TToken_string key;
key = name; key.add(size); key.add((long)fs);
TReport_font* fnt = (TReport_font*)fonts.objptr(key);
if (fnt == NULL)
{
if (families == 0)
families = xvt_fmap_get_families(NULL, family, famax);
int best = -1;
double score = 0.5;
for (long i = 0; i < families; i++) if (*name == *family[i])
{
const double s = xvt_str_fuzzy_compare(name, family[i]);
if (s > score)
{
best = i;
score = s;
if (score >= 1.0)
break;
}
}
if (best >= 0)
name = family[best];
fnt = new TReport_font;
fnt->create(name, size, fs);
fonts.add(key, fnt);
}
return *fnt;
}
class TCU_report : public TReport
{
TReport_font _fnt_rep, _fnt_prm, _fnt_lbl, _fnt_sub, _fnt_prg;
int _quality; // 0=text only; 1=borders only; 2=filled bars
bool _syntetic;
private:
const TReport_field& last_field() const;
void set_field_pos(int row, int col, int width, TReport_field& fld) const;
TReport_field& add_break(TReport_section& sec, int row, bool small);
void add_field_label(const TReport_field& fld, const char* text, char alignment = 'L');
TReport_field& add_prompt(TReport_section& sec, int row, int col, int len, const char* text);
void add_field_sublabel(const TReport_field& fld, const char* text);
void add_field_grid(const TReport_field& fld, bool underlined, bool date);
TReport_field& add_field(TReport_section& sec, int row, int col, int width, const char* field);
protected:
TReport_field& add_prompted_field(TReport_section& sec, int row, int col, int width, const char* field, const char* prompt, int promptlen = -1);
TReport_field& add_prompted_bool(TReport_section& sec, int row, int col, int width, const char* field, const char* prompt, int promptlen = -1);
TReport_field& add_labeled_field (TReport_section& sec, int row, int col, int width, const char* field, const char* label, char alignment = 'B');
TReport_field& add_labeled_number(TReport_section& sec, int row, int col, int width, const char* field, const char* label, char alignment = 'B');
TReport_field& add_labeled_bool (TReport_section& sec, int row, int col, int width, const char* field, const char* label);
TReport_field& add_boxed_field (TReport_section& sec, int row, int col, int width, const char* field, const char* prompt, int flags = 0x0);
TReport_field& add_gridded_field (TReport_section& sec, int row, int col, int len,
const char* field, const char* prompt);
void add_underlined_text(TReport_section& body, int row, const char* text);
TReport_field& add_big_text(TReport_section& sec, int row, int col, const char* label, COLOR rgb);
void add_band(TReport_section& sec, int row, int height, COLOR rgb = CU_BACKGROUND);
void add_long_break (TReport_section& sec, int row);
void add_short_break(TReport_section& sec, int row);
void begin_paragraph(TReport_section& sec, int row, int height, const char* label, int mode = 0);
void end_paragraph(TReport_section& sec);
void create_logo(TReport_section& header);
void create_B();
void create_D();
void create_H();
public:
TCU_report(int quality, bool syntetic);
};
#define CU_FORM_WIDTH 7800
#define CU_FORM_BORDER 100
#define CU_HEAD_WIDTH 1000
#define CU_AFTER_LAST -1
#define CU_BEFORE_LAST -2
#define CU_ALIGN_RIGHT -3
#define CU_EURO_LEN 16
static int _row_offset = 0;
static int _row_height = 300;
static int _row_last = 0;
static TReport_field* _last_fld = NULL;
const TReport_field& TCU_report::last_field() const
{
return *_last_fld;
}
void TCU_report::set_field_pos(int row, int col, int len, TReport_field& fld) const
{
TReport_section& sec = fld.section();
int dimx = (len+1) * 100;
const int dimy = _row_height <= 200 ? 100 : 150;
int posx = 0;
if (col < 0)
{
switch(col)
{
case CU_BEFORE_LAST: posx = last_field().get_rect().left() - dimx - 100; break;
case CU_ALIGN_RIGHT: posx = CU_FORM_BORDER+CU_FORM_WIDTH - dimx - 100; break;
default : posx = last_field().get_rect().right() + 100; break;
}
}
else
{
if (_row_offset > 0) // in paragraph
posx = CU_FORM_BORDER+CU_HEAD_WIDTH + (col+1)*100;
else
posx = CU_FORM_BORDER + col*100; // in header
}
int posy = 0;
if (_row_offset > 0) // in paragraph
posy = _row_offset + (row+1)*_row_height - dimy;
else
posy = (row+1)*100 - dimy; // in header
if (len <= 0)
dimx = CU_FORM_BORDER+CU_FORM_WIDTH - posx - 100;
fld.set_pos(posx, posy);
fld.set_size(dimx, dimy);
}
void TCU_report::begin_paragraph(TReport_section& sec, int row, int height, const char* label, int mode)
{
if (row < 0)
_row_offset = _row_last;
else
_row_offset = row*100;
_row_last = _row_offset + height*100;
_row_height = height <= 2 ? 200 : (height%3 ? 400 : 300);
_last_fld = NULL;
TString str1 = label, str2;
int delta2 = 0;
if (mode & 0x2)
{
if (mode == 0x2)
{
str2 = str1;
str1.cut(0);
}
else
{
const int due_paragrafi = str1.find('\n');
str2 = str1.mid(due_paragrafi+1);
str1.cut(due_paragrafi);
delta2 = 200;
}
}
if (str1.full())
{
TReport_field* txt = new TReport_field(&sec);
txt->set_vertical_alignment('T');
txt->set_horizontal_alignment('L');
txt->set_pos(CU_FORM_BORDER, _row_offset);
txt->set_size(CU_HEAD_WIDTH, height*100);
txt->set_pattern(PAT_HOLLOW);
txt->set_text_color(COLOR_BLACK);
txt->set_back_color(COLOR_INVALID);
txt->set_picture(str1);
txt->set_font(_fnt_prg);
sec.add(txt);
}
if (str2.full())
{
TReport_font fnt2;
fnt2.create(_fnt_lbl.name(), _fnt_lbl.size(), XVT_FS_BOLD);
TReport_field* txt2 = new TReport_field(&sec);
txt2->set_vertical_alignment('T');
txt2->set_horizontal_alignment('L');
txt2->set_pos(CU_FORM_BORDER, _row_offset+delta2);
txt2->set_size(CU_HEAD_WIDTH, (height*100)-delta2);
txt2->set_pattern(PAT_HOLLOW);
txt2->set_text_color(COLOR_BLACK);
txt2->set_back_color(COLOR_INVALID);
txt2->set_picture(str2);
txt2->set_font(fnt2);
sec.add(txt2);
}
}
void TCU_report::end_paragraph(TReport_section& sec)
{
add_long_break(sec, _row_last/100);
}
void TCU_report::add_field_label(const TReport_field& fld, const char* text, char alignment)
{
TReport_section& sec = fld.section();
TReport_field* label = new TReport_field(&sec);
label->set_type('T');
label->set_pattern(PAT_HOLLOW);
label->set_text_color(COLOR_BLACK);
label->set_back_color(COLOR_INVALID);
label->set_font(_fnt_lbl);
const TReport_rct& rct = fld.get_rect();
label->set_pos(rct.x, rct.y-100);
label->set_size(rct.width(), 100);
label->set_picture(text);
label->set_vertical_alignment('B');
if (alignment == 'C')
{
label->set_horizontal_alignment('C');
label->set_pos(rct.x-400, rct.y-100);
label->set_size(rct.width()+800, 75);
}
sec.add(label);
}
void TCU_report::add_field_sublabel(const TReport_field& fld, const char* text)
{
TReport_section& sec = fld.section();
TReport_field* label = new TReport_field(&sec);
label->set_type('T');
label->set_pattern(PAT_HOLLOW);
label->set_back_color(COLOR_INVALID);
label->set_text_color(COLOR_BLACK);
label->set_font(_fnt_sub);
const TReport_rct& rct = fld.get_rect();
label->set_pos(rct.x, rct.y);
label->set_size(150, 50); //label->set_size(rct.width(), rct.height()/3);
label->set_picture(text);
sec.add(label);
}
TReport_field& TCU_report::add_field(TReport_section& sec, int row, int col, int len, const char* field)
{
TReport_field* txt = new TReport_field(&sec);
txt->set_type('S');
txt->set_vertical_alignment('B');
txt->set_dynamic_height(false);
if (_quality >= 2)
{
txt->set_pattern(PAT_SOLID);
txt->set_back_color(COLOR_WHITE);
}
else
{
txt->set_pattern(PAT_HOLLOW);
txt->set_back_color(COLOR_INVALID);
txt->set_fore_color(COLOR_GRAY);
txt->set_border(1);
}
txt->set_field(field);
set_field_pos(row, col, len, *txt);
sec.add(txt);
_last_fld = txt;
return *txt;
}
int estimated_prompt_len(const char* text)
{
static XVT_FNTID font_id = NULL;
if (font_id == NULL)
{
font_id = xvt_font_create();
xvt_font_set_family(font_id, XVT_FFN_HELVETICA);
xvt_font_set_size(font_id, 12);
xvt_dwin_set_font(TASK_WIN, font_id);
}
else
{
if (text == NULL)
{
xvt_font_destroy(font_id);
font_id = NULL;
}
}
const int len = (text && *text) ? xvt_dwin_get_text_width(TASK_WIN, text, -1) : 0;
return len / 6;
}
TReport_field& TCU_report::add_prompt(TReport_section& sec, int row, int col, int len, const char* text)
{
TReport_field* label = new TReport_field(&sec);
label->set_type('T');
label->set_vertical_alignment('C');
label->set_pattern(PAT_HOLLOW);
label->set_back_color(COLOR_INVALID);
label->set_text_color(COLOR_BLACK);
label->set_font(_fnt_prm);
label->set_picture(text);
if (len < 0)
len = estimated_prompt_len(text)/2;
set_field_pos(row, col, len, *label);
const TReport_rct& rct = label->get_rect();
if (rct.height() > 100)
{
const int delta = rct.height() - 100;
label->set_pos(rct.left(), rct.top()+delta);
label->set_size(rct.width(), rct.height()-delta);
}
sec.add(label);
_last_fld = label;
return *label;
}
TReport_field& TCU_report::add_labeled_field(TReport_section& body, int row, int col, int len,
const char* field, const char* label, char alignment)
{
if (alignment != 'C' && len > 0 && label && int(strlen(label)) > 2*len)
alignment = 'C';
TReport_field& txt = add_field(body, row, col, len, field);
if (alignment == 'C')
txt.set_horizontal_alignment(alignment);
if (field && *field && field[1] >= 'A')
{
TString4 num = field+6;
while (num[0] == '0') num.ltrim(1);
add_field_sublabel(txt, num);
}
if (label && *label)
add_field_label(txt, label, alignment);
return txt;
}
TReport_field& TCU_report::add_labeled_number(TReport_section& body, int row, int col, int width,
const char* field, const char* label, char alignment)
{
TReport_field& txt = add_labeled_field(body, row, col, width, field, label, alignment);
txt.set_horizontal_alignment('R');
if (width == CU_EURO_LEN)
{
txt.set_type('S'); // avoid obnoxious x100
}
else
{
txt.set_type('N');
txt.hide_zeroes(true);
}
return txt;
}
TReport_field& TCU_report::add_labeled_bool(TReport_section& body, int row, int col, int width,
const char* field, const char* label)
{
TReport_field& check = add_labeled_field(body, row, col, width, field, label, 'C');
check.set_type('B');
return check;
}
TReport_field& TCU_report::add_prompted_field(TReport_section& body, int row, int col, int width, const char* field, const char* prompt, int promptlen)
{
if (col == CU_ALIGN_RIGHT && width > 0)
{
TReport_field& fld = add_field(body, row, col, width, field);
if ((prompt && *prompt) || promptlen > 0)
add_prompt(body, row, CU_BEFORE_LAST, promptlen, prompt);
return fld;
}
if ((prompt && *prompt) || promptlen > 0)
{
add_prompt(body, row, col, promptlen, prompt);
col = CU_AFTER_LAST;
}
return add_field(body, row, col, width, field);
}
TReport_field& TCU_report::add_prompted_bool(TReport_section& sec, int row, int col, int width, const char* field, const char* prompt, int promptlen)
{
TReport_field& cb = add_prompted_field(sec, row, col, width, field, prompt, promptlen);
cb.set_type('B');
cb.set_horizontal_alignment('C');
cb.set_vertical_alignment('C');
return cb;
}
TReport_field& TCU_report::add_boxed_field(TReport_section& sec, int row, int col, int width,
const char* field, const char* prompt, int flags)
{
TReport_field* fld = NULL;
if (flags & 0x2)
fld = &add_gridded_field (sec, row, col, width, field, prompt);
else
fld = &add_prompted_field(sec, row, col, width, field, prompt);
TReport_field& txt = *fld;
if (width < 16)
txt.set_type('N');
txt.set_border(2);
txt.set_fore_color(COLOR_BLACK);
txt.set_horizontal_alignment('C');
if (flags & 0x1) // Half height
{
const TReport_rct& rct = txt.get_rect();
TReport_field* line = new TReport_field(&sec);
line->set_type('R');
line->set_pos(rct.left()-10, rct.top()-10);
line->set_size(rct.width()+20, rct.height()/3);
line->set_pattern(PAT_SOLID);
line->set_back_color(COLOR_WHITE);
sec.add(line);
}
return txt;
}
void TCU_report::add_field_grid(const TReport_field& fld, bool underlined, bool date)
{
TReport_section& sec = fld.section();
const TReport_rct& rct = fld.get_rect();
if ((rct.width() / 100) & 1) // Campo di lunghezza dispari!
{
TReport_field& f = (TReport_field&)fld;
f.set_width(rct.width()-100);
}
if (underlined)
{
TReport_field* line = new TReport_field(&sec);
line->set_type('L');
line->set_pos(rct.left(), rct.bottom());
line->set_size(rct.width(), 0);
line->set_border(1);
line->set_fore_color(COLOR_BLACK);
sec.add(line);
}
int fr, to, len, spc;
if (date)
{
len = 4;
fr = 1;
to = 2;
spc = 50;
}
else
{
len = rct.width() / 200;
fr = underlined ? 0 : 1;
to = len - (underlined ? 0 : 1);
spc = underlined ? 0 : 50;
}
for (int y = fr; y <= to; y++)
{
TReport_field* line = new TReport_field(&sec);
line->set_type('L');
line->set_pos(rct.left()+y*rct.width()/len, rct.top()+spc);
line->set_size(0, rct.height()-spc);
line->set_border(1);
line->set_fore_color(COLOR_BLACK);
sec.add(line);
}
}
TReport_field& TCU_report::add_gridded_field(TReport_section& sec, int row, int col, int len,
const char* field, const char* label)
{
const bool is_date = len == 10;
const bool underlined = len>=16 && _row_offset <= 0; // Underlined grid in the header
TString80 str;
if (is_date)
{
str = "## ## ####";
len = 5;
}
else
{
for (int i = 0; i < len; i++)
{
if (i) str << ' ';
str << "#";
}
str.rtrim();
}
TReport_field& fld = add_labeled_field(sec, row, col, len*2, field, label);
fld.set_picture(str);
if (is_date)
fld.set_horizontal_alignment('C');
else
fld.set_horizontal_alignment('R');
add_field_grid(fld, underlined, is_date);
return fld;
}
TReport_field& TCU_report::add_big_text(TReport_section& sec, int row, int col, const char* label, COLOR rgb)
{
const TReport_font& fnt_big = best_font("Arial Black", _fnt_prg.size()*3, _fnt_prg.style());
TReport_field* txt = new TReport_field(&sec);
txt->set_type('T');
txt->set_picture(label);
txt->set_pos(CU_FORM_BORDER+col*100, row*100);
txt->set_size(strlen(label)*300, 200);
txt->set_pattern(PAT_HOLLOW);
txt->set_back_color(COLOR_INVALID);
txt->set_text_color(rgb);
txt->set_font(fnt_big);
sec.add(txt);
return *txt;
}
TReport_field& TCU_report::add_break(TReport_section& sec, int row, bool small)
{
TReport_field* line = new TReport_field(&sec);
line->set_type('L');
if (small)
{
line->set_pos(CU_FORM_BORDER+CU_HEAD_WIDTH, row*100);
line->set_size(CU_FORM_WIDTH-CU_HEAD_WIDTH, 0);
line->set_border(1);
}
else
{
line->set_pos(CU_FORM_BORDER, row*100);
line->set_size(CU_FORM_WIDTH, 0);
line->set_border(2);
}
line->set_fore_color(COLOR_BLACK);
sec.add(line);
return *line;
}
void TCU_report::add_long_break(TReport_section& sec, int row)
{ add_break(sec, row, false); }
void TCU_report::add_short_break(TReport_section& sec, int row)
{ add_break(sec, row, true); }
void TCU_report::add_band(TReport_section& sec, int row, int height, COLOR rgb)
{
TReport_field* rct = new TReport_field(&sec);
if (rgb == COLOR_INVALID)
rgb = CU_BACKGROUND;
rct->set_pos(CU_FORM_BORDER+CU_HEAD_WIDTH, row *100);
rct->set_size(CU_FORM_WIDTH-CU_HEAD_WIDTH, height*100);
if (_quality >= 2)
{
rct->set_pattern(PAT_SOLID);
rct->set_back_color(rgb);
}
else
{
rct->set_pattern(PAT_HOLLOW);
rct->set_border(2);
rct->set_fore_color(rgb);
rct->set_back_color(COLOR_INVALID);
}
sec.add(rct);
add_long_break(sec, row);
}
void TCU_report::add_underlined_text(TReport_section& body, int row, const char* text)
{
TReport_field& line = add_break(body, _row_offset/100+row+1, true);
const TReport_rct rct = line.get_rect();
line.set_pos(rct.left()+100, rct.top()+25);
line.set_size(rct.width()-200, rct.height());
add_field_label(line, text, 'C');
}
void TCU_report::create_logo(TReport_section& header)
{
add_big_text(header, 4, 0, "CERTIFICAZIONE", COLOR_GRAY).set_vertical_alignment('T');
add_big_text(header, 6, 0, "UNICA", COLOR_BLACK).set_vertical_alignment('B');
add_big_text(header, 6,12, "2016", COLOR_LTGRAY).set_vertical_alignment('B');
TReport_field* txt = new TReport_field(&header);
txt->set_type('I');
txt->set("res/AgenziaEntrate.gif");
txt->set_pos(CU_FORM_BORDER, 800);
txt->set_size(1200, 200);
header.add(txt);
}
void TCU_report::create_B()
{
TReport_section& header = section('B', 1);
header.set_condition("#1=\"B\"");
_row_offset = 0;
estimated_prompt_len(NULL); // Reset font computer
create_logo(header);
add_gridded_field(header, 11, CU_ALIGN_RIGHT, 16, "#2", ""); // Codice fiscale dichiarante
add_prompt(header, 11, CU_BEFORE_LAST, 7, "Codice fiscale");
add_band(header, 13, 27);
begin_paragraph(header, 13, 2, "TIPO DI COMUNICAZIONE");
add_prompted_bool(header, 0, 0, 2, "#10", "Annullamento");
add_prompted_bool(header, 0, 28, 2, "#11", "Sostituzione");
end_paragraph(header);
begin_paragraph(header, CU_AFTER_LAST, 9, "DATI RELATIVI\nAL SOSTITUTO");
add_labeled_field(header, 0, 0, 32, "#2", "Codice Fiscale");
add_labeled_field(header, 1, 0, 36, "#12", "Cognome o Denominazione").set_alternate_field("#14");
add_labeled_field(header, 1,CU_AFTER_LAST, CU_ALIGN_RIGHT, "#13", "Nome"); // La colonna segue il cognome
TReport_field& tel = add_labeled_field(header, 2, 0, 16, "#16", "Telefono o fax");
add_field_sublabel(tel, "prefisso numero");
tel.set_alternate_field("#17");
add_labeled_field(header, 2, CU_AFTER_LAST, CU_ALIGN_RIGHT, "#15", "Indirizzo di posta elettronica"); // La colonna segue il telefono
end_paragraph(header);
begin_paragraph(header, CU_AFTER_LAST, 6, "DATI RELATIVI AL RAPPRESENTANTE FIRMATARIO DELLA COMUNICAZIONE");
add_labeled_field(header, 0, 0, 24, "#18", "Codice Fiscale");
TReport_field& cc = add_labeled_field(header, 0,32, 3, "#19", "Codice carica", 'C');
cc.set_type('N'); cc.hide_zeroes(true);
TReport_field& pi = add_gridded_field(header, 0,CU_ALIGN_RIGHT, 11, "#22", "Codice fiscale societ<65> o ente dichiarante");
pi.set_type('N'); pi.hide_zeroes(true);
add_labeled_field(header, 1, 0, 36, "#20", "Cognome");
add_labeled_field(header, 1,CU_AFTER_LAST, CU_ALIGN_RIGHT, "#21", "Nome");
end_paragraph(header);
begin_paragraph(header, CU_AFTER_LAST, 3, "FIRMA DELLA COMUNICAZIONE");
// 2015
// add_labeled_number(header, 0, 4, 5, "#23", "Numero certificazioni\nlavoro dipendente ed assimilati", 'C');
// add_labeled_number(header, 0, 14, 5, "#24", "Numero certificazioni\nlavoro autonomo e provvigioni", 'C');
// 2016
add_labeled_number(header, 0, 4, 5, "#24", "Numero certificazioni", 'C');
add_labeled_field (header, 0, 25, 3, "#25", "Quadro CT", 'C');
add_prompted_field(header, 0, CU_ALIGN_RIGHT, 24, "", "FIRMA");
end_paragraph(header);
begin_paragraph(header, CU_AFTER_LAST, 7, "IMPEGNO ALLA PRESENTAZIONE TELEMATICA");
_row_height = 300;
add_prompted_field(header, 0, 0, 16, "#27", "Codice fiscale dell'intermediario");
add_break(header, _row_offset/100+3, true);
end_paragraph(header);
begin_paragraph(header, _row_offset/100+3, 2, "Riservato\nall'intermediario");
add_prompt(header, 0, 0, 30, "Impegno a presentare in via telematica la comunicazione");
TReport_field& ipt = add_field(header, 0, CU_ALIGN_RIGHT, 2, "#28");
ipt.set_type('N');
ipt.set_horizontal_alignment('C');
ipt.hide_zeroes(true);
add_break(header, _row_offset/100+2, true);
add_prompt(header, 1,0, -1, "Data dell'impegno");
TReport_field& dit = add_gridded_field(header, 1, 10, 10, "#29", "");
dit.set_type('N');
dit.hide_zeroes(true);
add_prompted_field(header,1, CU_ALIGN_RIGHT,24, "", "FIRMA DELL'INTERMEDIARIO", 15);
add_break(header, _row_offset/100+4, false);
}
void TCU_report::create_D()
{
TReport_section& body = section('B', 2);
body.set_condition("#1=\"D\"");
body.force_page_break(true);
_row_offset = 0;
create_logo(body);
TReport_font fnt_big; fnt_big.create(_fnt_prg.name(), 3*_fnt_prg.size()/2, _fnt_prg.style());
TReport_field* txt = new TReport_field(&body);
txt->set_type('T');
txt->set_picture("CERTIFICAZIONE DI CUI ALL'ART.4, COMMI 6-ter e 6-quater,\n"
"DEL D.P.R. 22 LUGLIO 1998, n. 322, RELATIVA ALL'ANNO");
txt->set_pos(CU_FORM_BORDER+28*100, 7*100);
txt->set_size(7000, 300);
txt->set_pattern(PAT_HOLLOW);
txt->set_back_color(COLOR_INVALID);
txt->set_text_color(COLOR_BLACK);
txt->set_font(fnt_big);
body.add(txt);
add_boxed_field(body, 8, 68, 4, "2015", "");
add_band(body, 12, 35);
begin_paragraph(body, 12, 9, "DATI ANAGRAFICI\nDATI RELATIVI\nAL DATORE DI LAVORO,\nENTE PENSIONISTICO O\nALTRO SOSTITUTO\nD'IMPOSTA", 0x3);
add_labeled_field(body, 0, 0, 16, "#DA001001", "Codice Fiscale");
add_labeled_field(body, 0, CU_AFTER_LAST, 30, "#DA001002", "Cognome o Denominazione");
add_labeled_field(body, 0, CU_AFTER_LAST, CU_ALIGN_RIGHT, "#DA001003", "Nome"); // La colonna segue il cognome
add_labeled_field(body, 1, 0, 24, "#DA001004", "Comune");
add_labeled_field(body, 1, CU_AFTER_LAST, 2, "#DA001005", "Prov.");
add_labeled_field(body, 1, CU_AFTER_LAST, 5, "#DA001006", "Cap");
add_labeled_field(body, 1, CU_AFTER_LAST, CU_ALIGN_RIGHT, "#DA001007", "Indirizzo");
TReport_field& tel = add_labeled_field(body, 2, 0, 16, "#DA001008", "Telefono o fax");
add_field_sublabel(tel, " prefisso numero");
add_labeled_field(body, 2, CU_AFTER_LAST, 30, "#DA001009", "Indirizzo di posta elettronica");
add_labeled_field(body, 2, CU_AFTER_LAST, 6, "#DA001010", "Codice attivit<69>");
add_labeled_number(body, 2, CU_AFTER_LAST, CU_ALIGN_RIGHT, "#DA001011", "Codice sede");
end_paragraph(body);
begin_paragraph(body, CU_AFTER_LAST, 6, "DATI RELATIVI\nAL DIPENDENTE,\nPENSIONATO O\nALTRO PERCETTORE\nDELLE SOMME", 0x2);
add_labeled_field(body, 0, 0, 16, "#DA002001", "Codice Fiscale");
add_labeled_field(body, 0, CU_AFTER_LAST, 30, "#DA002002", "Cognome o Denominazione");
add_labeled_field(body, 0, CU_AFTER_LAST, CU_ALIGN_RIGHT, "#DA002003", "Nome"); // La colonna segue il cognome
add_labeled_field(body, 1, 0, 1, "#DA002004", "Sesso\n(M o F)", 'C');
add_gridded_field(body, 1, CU_AFTER_LAST, 10, "#DA002005", "Data di nascita");
add_labeled_field(body, 1, 16, 24, "#DA002006", "Comune (o Stato estero) di nascita");
add_labeled_field(body, 1, CU_AFTER_LAST, 3, "#DA002007", "Prov. nasc.\n(sigla)", 'C');
add_labeled_field(body, 1, 49, 3, "#DA002008", "Categorie\nparticolari", 'C');
add_labeled_number(body,1, 55, 3, "#DA002009", "Eventi\neccezionali", 'C');
add_labeled_number(body,1, 61, 3, "#DA002010", "Casi di esclusione\ndalla precompilata", 'C');
end_paragraph(body);
begin_paragraph(body, CU_AFTER_LAST, 8, "");
add_underlined_text(body, 0, "DOMICILIO FISCALE ALL'1/1/2014");
add_labeled_field(body, 0, 0, 50, "#DA002020", "Comune");
add_labeled_field(body, 0, CU_AFTER_LAST, 3, "#DA002021", "Provincia (sigla)");
add_labeled_field(body, 0, CU_ALIGN_RIGHT, 6, "#DA002022", "Codice comune");
add_underlined_text(body, 4, "DOMICILIO FISCALE ALL'1/1/2015");
add_labeled_field(body, 1, 0, 50, "#DA002023", "Comune");
add_labeled_field(body, 1, CU_AFTER_LAST, 3, "#DA002024", "Provincia (sigla)");
add_labeled_field(body, 1, CU_ALIGN_RIGHT, 6, "#DA002025", "Codice comune");
end_paragraph(body);
begin_paragraph(body, CU_AFTER_LAST, 3, "DATI RELATIVI\nAL RAPPRESENTANTE", 0x2);
add_labeled_field(body, 0, 0, 16, "#DA002030", "Codice Fiscale");
end_paragraph(body);
begin_paragraph(body, CU_AFTER_LAST, 6, "RISERVATO\nAI PERCIPIENTI ESTERI", 0x2);
add_labeled_field(body, 0, 0, 16, "#DA002040", "Codice di identificazione fiscale estero");
add_labeled_field(body, 0, CU_AFTER_LAST, CU_ALIGN_RIGHT, "#DA002041", "Localit<EFBFBD> di residenza estera");
add_labeled_field(body, 1, 0, 50, "#DA002042", "Via e numero civico");
// 2015
//add_labeled_field(body, 1, CU_ALIGN_RIGHT, 5, "#DA002043", "Codice Stato estero", 'C');
// 2016
add_labeled_field(body, 1, CU_AFTER_LAST, 5, "#DA002043", "Non residenti\nShumacker", 'C');
add_labeled_field(body, 1, CU_ALIGN_RIGHT, 5, "#DA002044", "Codice Stato estero", 'C');
end_paragraph(body);
begin_paragraph(body, CU_AFTER_LAST, 3, "");
add_gridded_field(body, 0, 0, 10, "#DA003001", "DATA");
add_labeled_field(body, 0, 15, CU_ALIGN_RIGHT, "", "FIRMA DEL SOSTITUTO DI IMPOSTA", 'C');
end_paragraph(body);
}
void TCU_report::create_H()
{
TReport_section& body = section('B', 3);
body.set_condition("#1=\"H\"");
body.force_page_break(true);
_row_offset = 0;
add_prompt (body, 2, 0, 14, "Codice fiscale del percipiente");
add_boxed_field(body, 2,CU_AFTER_LAST, 16, "#4", "", 0x1);
add_boxed_field(body, 2, 74, 2, "#3", "", 0x3);
add_prompt(body, 2, CU_BEFORE_LAST, -1, "Mod. N.");
const TReport_font& fnt_big = best_font(_fnt_prg.name(), 3*_fnt_prg.size()/2, _fnt_prg.style());
TReport_field* title = new TReport_field(&body);
title->set_pos(CU_FORM_BORDER+CU_HEAD_WIDTH, 300);
title->set_size(CU_FORM_WIDTH-CU_HEAD_WIDTH, 200);
title->set_horizontal_alignment('C');
title->set_vertical_alignment('C');
title->set_picture("CERTIFICAZIONE LAVORO AUTONOMO, PROVVIGIONI E REDDITI DIVERSI");
title->set_font(fnt_big);
body.add(title);
add_band(body, 5, _syntetic ? 44: 58);
const int tab0 = 2, tab1 = 6, tab2 = 27, tab3 = CU_ALIGN_RIGHT;
begin_paragraph(body, 5, 3, "DATI RELATIVI ALLE SOMME EROGATE\nTIPOLOGIA REDDITUALE", 0x3);
add_labeled_field(body, 0, tab0, 2, "#AU001001", "Causale");
end_paragraph(body);
begin_paragraph(body, -1, 18, "DATI FISCALI");
add_labeled_number(body, 0, tab1-1, 4, "#AU001002", "Anno", 'C');
add_labeled_bool (body, 0, CU_AFTER_LAST, 2, "#AU001003", "Anticipazione");
add_labeled_number(body, 0, tab2, CU_EURO_LEN, "#AU001004", "Ammontare lordo corrisposto", 'C');
add_labeled_number(body, 0, tab3, CU_EURO_LEN, "#AU001005", "Somme non soggette a ritenuta\nper regime convenzionale", 'C');
add_labeled_number(body, 1, tab0, 2, "#AU001006", "Codice");
add_labeled_number(body, 1, tab1, CU_EURO_LEN, "#AU001007", "Altre somme non soggette a ritenuta", 'C');
add_labeled_number(body, 1, tab2, CU_EURO_LEN, "#AU001008", "Imponibile", 'C');
add_labeled_number(body, 1, tab3, CU_EURO_LEN, "#AU001009", "Ritenute a titolo di acconto", 'C');
add_labeled_number(body, 2, tab1, CU_EURO_LEN, "#AU001010", "Ritenute a titolo d'imposta", 'C');
add_labeled_number(body, 2, tab2, CU_EURO_LEN, "#AU001011", "Ritenute sospese", 'C');
add_labeled_number(body, 2, tab3, CU_EURO_LEN, "#AU001012", "Addizionale regionale a titolo d'acconto", 'C');
add_labeled_number(body, 3, tab1, CU_EURO_LEN, "#AU001013", "Addizionale regionale a titolo d'imposta", 'C');
add_labeled_number(body, 3, tab2, CU_EURO_LEN, "#AU001014", "Addizionale regionale sospesa", 'C');
add_labeled_number(body, 3, tab3, CU_EURO_LEN, "#AU001015", "Addizionale comunale a titolo d'acconto", 'C');
add_labeled_number(body, 4, tab1, CU_EURO_LEN, "#AU001016", "Addizionale comunale a titolo d'imposta", 'C');
add_labeled_number(body, 4, tab2, CU_EURO_LEN, "#AU001017", "Addizionale comunale sospesa", 'C');
add_labeled_number(body, 4, tab3, CU_EURO_LEN, "#AU001018", "Imponibile anni precedenti", 'C');
add_labeled_number(body, 5, tab1, CU_EURO_LEN, "#AU001019", "Ritenute operate anni precedenti", 'C');
add_labeled_number(body, 5, tab2, CU_EURO_LEN, "#AU001020", "Spese rimborsate", 'C');
add_labeled_number(body, 5, tab3, CU_EURO_LEN, "#AU001021", "Ritenute rimborsate", 'C');
end_paragraph(body);
// 2016
begin_paragraph(body, -1, 12, "DATI PREVIDENZIALI");
add_labeled_field (body, 0, tab1, CU_EURO_LEN, "#AU001029", "Codice fiscale Ente previdenziale", 'C');
add_labeled_field (body, 0, tab2, 38, "#AU001030", "Denominazione Ente previdenziale", 'C');
add_labeled_field (body, 1, tab1, CU_EURO_LEN/2, "#AU001031", "Codice\nEnte previdenziale", 'C');
add_labeled_field (body, 1, tab2, CU_EURO_LEN, "#AU001032", "Codice azienda", 'C');
add_labeled_field (body, 1, tab3, CU_EURO_LEN/2, "#AU001033", "Categoria", 'C');
add_labeled_number(body, 2, tab1, CU_EURO_LEN, "#AU001034", "Contributi previdenziali\na carico del soggetto erogante", 'C');
add_labeled_number(body, 2, tab2, CU_EURO_LEN, "#AU001035", "Contributi previdenziali\na carico del percipiente", 'C');
add_labeled_bool (body, 2, tab3, CU_EURO_LEN/4, "#AU001036", "Altri contributi");
add_labeled_number(body, 3, tab1, CU_EURO_LEN, "#AU001037", "Importo altri contributi", 'C');
add_labeled_number(body, 3, tab2, CU_EURO_LEN, "#AU001038", "Contributi dovuti", 'C');
add_labeled_number(body, 3, tab3, CU_EURO_LEN, "#AU001039", "Contributi versati", 'C');
end_paragraph(body);
if (!_syntetic)
{
begin_paragraph(body, -1, 3, "FALLIMENTO E LIQUIDAZIONE COATTA AMMINISTRATIVA");
add_labeled_number(body, 0, tab1, CU_EURO_LEN, "#AU001041", "Somme corrisposte prima della data del fallimento");
add_labeled_number(body, 0, tab2, CU_EURO_LEN, "#AU001042", "Somme corrisposte dal curatore/commissario");
end_paragraph(body);
begin_paragraph(body, -1, 8, "REDDITI EROGATI DA ALTRI SOGGETTI");
_row_height = 200; // Override AFTER begin_paragraph
add_labeled_field (body, 0, tab2, CU_EURO_LEN, "#AU001052", "Codice fiscale", 'C');
add_labeled_number(body, 0, tab3, CU_EURO_LEN, "#AU001053", "Imponibile", 'C');
add_labeled_number(body, 1, tab1, CU_EURO_LEN, "#AU001054", "Ritenute a titolo di acconto", 'C');
add_labeled_number(body, 1, tab2, CU_EURO_LEN, "#AU001055", "Ritenute a titolo d'imposta", 'C');
add_labeled_number(body, 1, tab3, CU_EURO_LEN, "#AU001056", "Ritenute sospese", 'C');
add_labeled_number(body, 2, tab1, CU_EURO_LEN, "#AU001057", "Addizionale regionale a titolo d'acconto", 'C');
add_labeled_number(body, 2, tab2, CU_EURO_LEN, "#AU001058", "Addizionale regionale a titolo d'imposta", 'C');
add_labeled_number(body, 2, tab3, CU_EURO_LEN, "#AU001059", "Addizionale regionale sospesa", 'C');
add_labeled_number(body, 3, tab1, CU_EURO_LEN, "#AU001060", "Addizionale comunale a titolo d'acconto", 'C');
add_labeled_number(body, 3, tab2, CU_EURO_LEN, "#AU001061", "Addizionale comunale a titolo d'imposta", 'C');
add_labeled_number(body, 3, tab3, CU_EURO_LEN, "#AU001062", "Addizionale comunale sospesa", 'C');
end_paragraph(body);
begin_paragraph(body, -1, 3, "Casi particolari Operazioni starordinarie");
add_labeled_field (body, 0, tab1, CU_EURO_LEN, "#AU001071", "Codice fiscale\n(sezione lavoro autonome e redditi diversi)", 'C');
add_labeled_field (body, 0, tab2, CU_EURO_LEN, "#AU001072", "Codice fiscale\n(sezione pignoramento presso terzi)", 'C');
add_labeled_field (body, 0, tab3, CU_EURO_LEN, "#AU001073", "Codice fiscale\n(sezione indennit<69> di esproprio)", 'C');
end_paragraph(body);
} // ordinario
begin_paragraph(body, -1, 5, "Somme liquidate a seguito di pignoramento presso terzi");
_row_height = 300;
add_labeled_field (body, 0, tab1, CU_EURO_LEN, "#AU001101", "Codice fiscale del debitore principale", 'C');
add_labeled_number(body, 0, tab2, CU_EURO_LEN-4, "#AU001102", "Somme erogate", 'C');
add_labeled_bool (body, 0, CU_ALIGN_RIGHT, 2, "#AU001104", "Ritenute non operate");
add_labeled_number(body, 0, CU_BEFORE_LAST, CU_EURO_LEN-4, "#AU001103", "Ritenute operate", 'C');
_row_offset -= 100;
add_labeled_field (body, 1, tab1, CU_EURO_LEN, "#AU001105", "", 'C');
add_labeled_number(body, 1, tab2, CU_EURO_LEN-4, "#AU001106", "", 'C');
add_labeled_bool (body, 1, CU_ALIGN_RIGHT, 2, "#AU001108", "");
add_labeled_number(body, 1, CU_BEFORE_LAST, CU_EURO_LEN-4, "#AU001107", "", 'C');
end_paragraph(body);
begin_paragraph(body, -1, 6, "Somme corrisposte a titolo di indennit<69> di esproprio, altre indennit<69> e interessi");
_row_height = 200; // Override AFTER begin_paragraph
_row_offset -= 100;
add_prompt(body, 0, tab1, 30, "INDENNITA' DI ESPROPRIO E DI RISARCIMENTO DEL DANNO");
add_prompt(body, 0, 48, 20, "ALTRE INDENNITA' E INTERESSI");
add_labeled_number(body, 1, tab1, CU_EURO_LEN-4, "#AU001131", "Somme corrisposte", 'C');
add_labeled_number(body, 1, CU_AFTER_LAST, CU_EURO_LEN-6, "#AU001132", "Ritenute operate", 'C');
add_labeled_number(body, 1, CU_ALIGN_RIGHT, CU_EURO_LEN-6, "#AU001134", "Ritenute operate", 'C');
add_labeled_number(body, 1, CU_BEFORE_LAST, CU_EURO_LEN-4, "#AU001133", "Somme corrisposte", 'C');
add_short_break(body, _row_offset/100+4);
_row_offset -= 100;
add_prompt(body, 2, tab1, 30, "INDENNITA' DI ESPROPRIO E DI RISARCIMENTO DEL DANNO");
add_prompt(body, 2, 48, 20, "ALTRE INDENNITA' E INTERESSI");
add_labeled_number(body, 3, tab1, CU_EURO_LEN-4, "#AU001135", "Somme corrisposte", 'C');
add_labeled_number(body, 3, CU_AFTER_LAST, CU_EURO_LEN-6, "#AU001136", "Ritenute operate", 'C');
add_labeled_number(body, 3, CU_ALIGN_RIGHT, CU_EURO_LEN-6, "#AU001138", "Ritenute operate", 'C');
add_labeled_number(body, 3, CU_BEFORE_LAST, CU_EURO_LEN-4, "#AU001137", "Somme corrisposte", 'C');
end_paragraph(body);
}
TCU_report::TCU_report(int quality, bool syntetic) : _quality(quality), _syntetic(syntetic)
{
set_lpi(6);
set_cpi(10);
_fnt_rep.create("Courier New", 12, 0);
set_font(_fnt_rep);
_fnt_lbl.create("Arial", _fnt_rep.size()/2, 0);
_fnt_sub.create(_fnt_lbl.name(), _fnt_lbl.size(), XVT_FS_BOLD);
_fnt_prg.create(_fnt_lbl.name(), _fnt_rep.size()/2+1, XVT_FS_BOLD);
_fnt_prm.create(_fnt_lbl.name(), 2*_fnt_rep.size()/3, 0);
if (!_syntetic)
create_B();
create_D();
create_H();
}
void print_cu(const TFilename& datafile, int quality, bool syntetic)
{
TCU_report cur(quality, syntetic);
cur.set_recordset(new TTrasferimentoCU(datafile, 'r'));
cur.preview();
xvtil_statbar_set(NULL);
}