campo-sirio/m770/77stqc.cpp
alex 3849f63cf0 Patch level : 02.00.303
Files correlati     :
Ricompilazione Demo : [ ]
Commento            :
Ripotata la versione Partners 2.0 patch 302 sul main trunk


git-svn-id: svn://10.65.10.50/trunk@10387 c028cbd2-c16b-5b4b-a496-9718f37d4682
2002-07-03 14:48:48 +00:00

393 lines
10 KiB
C++
Executable File
Raw Blame History

///////////////////////////////////////////////////////////
// Quadro 770/C
///////////////////////////////////////////////////////////
#include "77stqc.h"
/////////////////////////////////////////////////////////////////////////////////
// Quadro C
/////////////////////////////////////////////////////////////////////////////////
bool TQuadroC::controlla_percentuale(TCursor& cur, const real& perc_p)
{
bool stampa = TRUE;
TRectype& rc = cur.curr();
long ditta_p = rc.get_long(QUC_CODDITTA);
char tipo_p = rc.get_char(QUC_TIPOA);
long codana_p = rc.get_long(QUC_CODANAGR);
char caus_p = rc.get_char(QUC_CAUSALE);
int tass_p = rc.get_int(QUC_TASSAZIONE);
TString ragsoc_p = get_ragsoc_anagr(tipo_p,codana_p);
if (perc_p == ZERO)
{
++(cur);
long ditta = rc.get_long(QUC_CODDITTA);
char tipo = rc.get_char(QUC_TIPOA);
long codana = rc.get_long(QUC_CODANAGR);
char caus = rc.get_char(QUC_CODCAUS);
int tass = rc.get_int(QUC_TASSAZIONE);
TString ragsoc = get_ragsoc_anagr(tipo,codana);
real perc = rc.get_real(QUC_PERC);
if (ditta == ditta_p && tipo == tipo_p && ragsoc == ragsoc_p &&
codana == codana_p && caus == caus_p && tass == tass_p)
{
if (perc != ZERO)
{
stampa = FALSE;
_devo_sommare = TRUE;
}
else
stampa = FALSE;
}
--(cur);
}
else
{
++(cur);
long ditta = rc.get_long(QUC_CODDITTA);
char tipo = rc.get_char(QUC_TIPOA);
long codana = rc.get_long(QUC_CODANAGR);
char caus = rc.get_char(QUC_CODCAUS);
int tass = rc.get_int(QUC_TASSAZIONE);
TString ragsoc = get_ragsoc_anagr(tipo,codana);
real perc = rc.get_real(QUC_PERC);
if (ditta == ditta_p && tipo == tipo_p && ragsoc == ragsoc_p &&
codana == codana_p && caus == caus_p && tass == tass_p && perc_p == perc)
stampa = FALSE;
else
_devo_sommare = TRUE;
--(cur);
}
return stampa;
}
void TQuadroC::leggi_importi()
{
TRectype& rec = cursor()->curr();
_ammlordo += rec.get_real(QUC_AMMLORDO);
_controbb += rec.get_real(QUC_CONTROBB);
_somnonsog += rec.get_real(QUC_SOMNONSOGG);
_imponibile += rec.get_real(QUC_IMPONIBILE);
_imposta += rec.get_real(QUC_IMPOSTA);
_detcarfam += rec.get_real(QUC_DETCARFAM);
_detlavdip += rec.get_real(QUC_DETLAVDIP);
_totdet += rec.get_real(QUC_TOTDET);
_ritenute += rec.get_real(QUC_RITENUTE);
_gglav += rec.get_int(QUC_GGLAVDIP);
}
void TQuadroC::setta_importi(TPrint_section& body)
{
TRectype& rec = cursor()->curr();
real ammlordo = rec.get_real(QUC_AMMLORDO);
real controbb = rec.get_real(QUC_CONTROBB);
real somnonsog = rec.get_real(QUC_SOMNONSOGG);
real imponibile = rec.get_real(QUC_IMPONIBILE);
real imposta = rec.get_real(QUC_IMPOSTA);
real detcarfam = rec.get_real(QUC_DETCARFAM);
real detlavdip = rec.get_real(QUC_DETLAVDIP);
real totdet = rec.get_real(QUC_TOTDET);
real ritenute = rec.get_real(QUC_RITENUTE);
int gglav = rec.get_int(QUC_GGLAVDIP);
if (_devo_sommare)
{
ammlordo += _ammlordo;
controbb += _controbb;
somnonsog += _somnonsog;
imponibile += _imponibile;
imposta += _imposta;
detcarfam += _detcarfam;
detlavdip += _detlavdip;
totdet += _totdet;
ritenute += _ritenute;
gglav += _gglav;
_devo_sommare = FALSE;
_ammlordo = ZERO;
_controbb = ZERO;
_somnonsog = ZERO;
_imponibile = ZERO;
_imposta = ZERO;
_detcarfam = ZERO;
_detlavdip = ZERO;
_totdet = ZERO;
_ritenute = ZERO;
_gglav = 0;
}
TForm_item& fammlordo = body.find_field(C_AMMLORDO);
TForm_item& fcontrobb = body.find_field(C_CONTROBB);
TForm_item& fsomnonsog = body.find_field(C_SOMNONSOG);
TForm_item& fimponibile = body.find_field(C_IMPONIBILE);
TForm_item& fimposta = body.find_field(C_IMPOSTA);
TForm_item& fdetcarfam = body.find_field(C_DETCARFAM);
TForm_item& fgglav = body.find_field(C_GGLAV);
TForm_item& fdetlavdip = body.find_field(C_DETLAVDIP);
TForm_item& ftotdet = body.find_field(C_TOTDET);
TForm_item& fritenute = body.find_field(C_RITENUTE);
TString sammlordo (ammlordo.string());
TString scontrobb (controbb.string());
TString ssomnonsog (somnonsog.string());
TString simponibile (imponibile.string());
TString simposta (imposta.string());
TString sdetcarfam (detcarfam.string());
TString sgglav;
TString sdetlavdip (detlavdip.string());
TString stotdet (totdet.string());
TString sritenute (ritenute.string());
sgglav.format("%d",gglav);
// Setta i campi
fammlordo.set(sammlordo);
fcontrobb.set(scontrobb);
fsomnonsog.set(ssomnonsog);
fimponibile.set(simponibile);
fimposta.set(simposta);
fdetcarfam.set(sdetcarfam);
fgglav.set(sgglav);
fdetlavdip.set(sdetlavdip);
ftotdet.set(stotdet);
fritenute.set(sritenute);
}
void TQuadroC::stampa_corpo(TPrinter& pr)
{
TPrint_section& body = section('B', odd_page);
const int body_righe = body.height();
body.reset();
setta_importi(body);
body.update();
for (int i=0; i < body_righe; i++)
{
pr.print(body.row(i));
_RigaCorr++;
}
body.reset();
if (usa_progind())
progind()->addstatus(1);
}
int TQuadroC::elementi_pagina(PaginaQuadro p) const
{
const int n[4] = { 6, 7, 7, 7 };
return n[p-PRIMA];
}
int TQuadroC::dic_form_len() const
{
if (curr_page()==PRIMA && _PaginaPosizionamento)
return QC_FORMLEN-HEADER_PRIMA_NOPOS_QC;
else
return QC_FORMLEN;
}
int TQuadroC::prima_riga(PaginaQuadro p) const
{
int line = 0;
if (p==PRIMA)
{
if (_PaginaPosizionamento)
line = 1;
else
line = 1+HEADER_PRIMA_NOPOS_QC;
}
else if (p==SECONDA) line = 4;
else if (p==TERZA) line = 4;
else if (p==QUARTA) line = 4;
return line;
}
bool TQuadroC::print(const long codditta, const long NumFis, const long NumNoFis)
{
TCursor& cur = *cursor();
TPrinter& pr = printer();
_num_foglio=0;
bool stampa = TRUE;
_gglav = 0;
if (!InitPrint(codditta))
return FALSE;
int elementi = 0; // Numero di elementi stampati in questa pagina
int ele_bis = 0;
bool stampato_ultimo = FALSE;
bool stampati_totali = FALSE;
// se il dispositivo scelto non <20> una winprinter
// non <20> mai eseguito il posizionamento
if (pr.printtype() != winprinter)
_PaginaPosizionamento = FALSE;
int pos = 0;
TDipendenti indice;
cur = 0;
if (_modulaser)
{
TPrintrow r;
put_modulaser(r, VEGASTARTDOC);
put_modulaser(r, VEGASTARTDITTA);
put_modulaser(r, VEGASTARTPAGE, PRIMA);
pr.print(r);
_RigaCorr++;
}
while (!stampati_totali)
{
bool stampa = TRUE;
bool stampero_ultimo = stampato_ultimo == FALSE;
if (stampero_ultimo)
{
if (indice.items() > 0) // Usa indice alternativo
stampero_ultimo &= (pos == indice.items()-1);
else // Usa indice del cursore
stampero_ultimo &= (cur.pos() == cur.items()-1);
}
pr.formlen(dic_form_len());
_EndPrintDitta=stampato_ultimo;
switch(_PaginaCorrente)
{
// stampa prima pagina
case PRIMA:
if (_modulaser)
ClearFlagModulaser();
if (ele_bis == 0)
{
jump_to_line(pr, prima_riga(PRIMA));
stampa_testata(pr);
}
if (!stampato_ultimo)
{
real perc_p = cur.curr().get_real(QUC_PERC);
stampa = controlla_percentuale(cur,perc_p);
if (stampa)
stampa_corpo(pr);
else
{
leggi_importi();
elementi--;
}
stampato_ultimo = stampero_ultimo;
}
elementi++;
ele_bis++;
if (elementi >= elementi_pagina(PRIMA))
{
next_page(pr);
elementi = 0;
ele_bis = 0;
}
break;
// stampa seconda o terza pagina
case SECONDA:
case TERZA:
_PaginaPosizionamento=FALSE;
if (!stampato_ultimo)
{
if (ele_bis == 0)
jump_to_line(pr, prima_riga(_PaginaCorrente));
real perc_p = cur.curr().get_real(QUC_PERC);
stampa = controlla_percentuale(cur,perc_p);
if (stampa)
stampa_corpo(pr);
else
{
leggi_importi();
elementi--;
}
stampato_ultimo = stampero_ultimo;
}
elementi++;
ele_bis++;
if (elementi >= elementi_pagina(_PaginaCorrente))
{
next_page(pr);
elementi = 0;
ele_bis = 0;
}
break;
// stampa quarta pagina
case QUARTA:
if (!stampato_ultimo)
{
if (ele_bis == 0)
jump_to_line(pr, prima_riga(QUARTA));
real perc_p = cur.curr().get_real(QUC_PERC);
stampa = controlla_percentuale(cur,perc_p);
if (stampa)
stampa_corpo(pr);
else
{
leggi_importi();
elementi--;
}
stampato_ultimo = stampero_ultimo;
}
elementi++;
ele_bis++;
if (elementi >= elementi_pagina(QUARTA))
{
// salto ad inizio sezione
jump_to_line(pr, 60);
stampa_totali(pr);
if (stampato_ultimo)
stampati_totali = TRUE;
_EndPrintDitta=stampato_ultimo;
next_page(pr);
elementi = 0;
ele_bis = 0;
}
break;
default:
CHECK(0, "Invalid Quadro C page");
break;
}
if (!stampato_ultimo)
{
if (indice.items() > 0)
cur = indice[++pos].pos();
else
++cur;
}
}
close_print();
return TRUE;
}
bool TStampaQuadroC::user_create()
{
_form = new TQuadroC("77QC", quadro());
TString sortkey(80);
sortkey.format("CODDITTA|TIPOA|216@->RAGSOC|CODANAGR|CODCAUS|PERC", LF_QUAC, LF_QUAC);
_cur = new TSorted_cursor(_form->TForm::relation(), sortkey);
return TRUE;
}