git-svn-id: svn://10.65.10.50/branches/R_10_00@23178 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			921 lines
		
	
	
		
			36 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			921 lines
		
	
	
		
			36 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #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);
 | ||
| }
 |