campo-sirio/m770/77stqc.cpp
ale 32d69eef40 Correzione errori
git-svn-id: svn://10.65.10.50/trunk@3641 c028cbd2-c16b-5b4b-a496-9718f37d4682
1996-09-23 07:17:54 +00:00

331 lines
8.9 KiB
C++
Executable File

///////////////////////////////////////////////////////////
// Quadro 770/C
///////////////////////////////////////////////////////////
#include "77stqc.h"
/////////////////////////////////////////////////////////////////////////////////
// Quadro C
/////////////////////////////////////////////////////////////////////////////////
bool TQuadroC::controlla_percentuale(TCursor& cur, const real& perc_p)
{
bool stampa = TRUE;
long ditta_p = cur.curr().get_long(QUC_CODDITTA);
char tipo_p = cur.curr().get_char(QUC_TIPOA);
long codana_p = cur.curr().get_long(QUC_CODANAGR);
TString codcaus_p = cur.curr().get (QUC_CODCAUS);
TString ragsoc_p = get_ragsoc_anagr(tipo_p,codana_p);
if (perc_p == ZERO)
{
++(cur);
long ditta = cur.curr().get_long(QUC_CODDITTA);
char tipo = cur.curr().get_char(QUC_TIPOA);
long codana = cur.curr().get_long(QUC_CODANAGR);
TString codcaus = cur.curr().get (QUC_CODCAUS);
TString ragsoc = get_ragsoc_anagr(tipo,codana);
real perc = cur.curr().get_real(QUC_PERC);
if (ditta == ditta_p && tipo == tipo_p && ragsoc == ragsoc_p
&& codana == codana_p && codcaus == codcaus_p)
{
if (perc != ZERO)
{
stampa = FALSE;
_devo_sommare = TRUE;
}
else
stampa = FALSE;
}
--(cur);
}
else
if (perc_p != ZERO)
{
++(cur);
long ditta = cur.curr().get_long(QUC_CODDITTA);
char tipo = cur.curr().get_char(QUC_TIPOA);
long codana = cur.curr().get_long(QUC_CODANAGR);
TString codcaus = cur.curr().get (QUC_CODCAUS);
TString ragsoc = get_ragsoc_anagr(tipo,codana);
real perc = cur.curr().get_real(QUC_PERC);
if (ditta == ditta_p && tipo == tipo_p && ragsoc == ragsoc_p &&
codana == codana_p && codcaus == codcaus_p && perc_p == perc)
stampa = FALSE;
else
_devo_sommare = TRUE;
--(cur);
}
return stampa;
}
void TQuadroC::leggi_importi()
{
TCursor* cur = cursor();
_totale += cur->curr().get_real(QUC_TOTALE);
_contssn += cur->curr().get_real(QUC_CONTSSN);
_somme += cur->curr().get_real(QUC_SOMME);
_imponibile += cur->curr().get_real(QUC_IMPONIBILE);
_ritenute += cur->curr().get_real(QUC_RITENUTE);
_netto += cur->curr().get_real(QUC_NETTO);
}
void TQuadroC::setta_importi(TPrint_section& body)
{
TCursor* cur = cursor();
real totale = cur->curr().get_real(QUC_TOTALE);
real contssn = cur->curr().get_real(QUC_CONTSSN);
real somme = cur->curr().get_real(QUC_SOMME);
real imponibile = cur->curr().get_real(QUC_IMPONIBILE);
real ritenute = cur->curr().get_real(QUC_RITENUTE);
real netto = cur->curr().get_real(QUC_NETTO);
if (_devo_sommare)
{
totale += _totale;
contssn += _contssn;
somme += _somme;
imponibile += _imponibile;
ritenute += _ritenute;
netto += _netto;
_devo_sommare = FALSE;
_totale = ZERO;
_contssn = ZERO;
_somme = ZERO;
_imponibile = ZERO;
_ritenute = ZERO;
_netto = ZERO;
}
TForm_item& ftotale = body.find_field(C_TOTALE);
TForm_item& fcontssn = body.find_field(C_CONTSSN);
TForm_item& fsomme = body.find_field(C_SOMME);
TForm_item& fimponibile = body.find_field(C_IMPONIBILE);
TForm_item& fritenute = body.find_field(C_RITENUTE);
TForm_item& fnetto = body.find_field(C_NETTO);
TString stotale (totale.string());
TString scontssn (contssn.string());
TString ssomme (somme.string());
TString simponibile(imponibile.string());
TString sritenute (ritenute.string());
TString snetto (netto.string());
// Setta i campi
ftotale.set(stotale);
fcontssn.set(scontssn);
fsomme.set(ssomme);
fimponibile.set(simponibile);
fritenute.set(sritenute);
fnetto.set(snetto);
}
void TQuadroC::stampa_corpo(TPrinter& pr)
{
TPrint_section& body = section('B', odd_page);
body.reset();
// body.update();
setta_importi(body);
body.update();
const int body_righe = body.height();
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, 10, 10, 9 };
return n[p-PRIMA];
}
int TQuadroC::prima_riga(PaginaQuadro p) const
{
// return p == PRIMA ? 27 : 8;
return p == PRIMA ? 26 : 7;
}
bool TQuadroC::print(const long codditta, const long NumFis, const long NumNoFis)
{
TCursor& cur = *cursor();
TPrinter& pr = printer();
bool stampa = TRUE;
if (!InitPrint(codditta))
return FALSE;
pr.formlen(QA_FORMLEN);
int elementi = 0; // Numero di elementi stampati in questa pagina
int ele_bis = 0;
bool stampato_ultimo = FALSE;
bool stampati_totali = FALSE;
int pos = 0;
TDipendenti indice;
if (quadro() == "A" || quadro() == "B")
{
const int i = indice.fill(cur);
if (i > 0)
{
if (usa_progind())
progind()->addstatus(cur.items()-i); // Segna come elaborati tutti gli ignorati
cur = indice[0].pos();
}
else
return FALSE;
}
else
cur = 0;
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;
}
_EndPrintDitta=stampato_ultimo;
switch(_PaginaCorrente)
{
case PRIMA:
if (_modulaser)
ClearFlagModulaser();
if (ele_bis == 0)
{
stampa_testata(pr);
jump_to_line(pr, prima_riga(PRIMA));
}
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;
case SECONDA:
case TERZA:
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;
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))
{
if (stampato_ultimo)
{
jump_to_line(pr, riga_totali(QUARTA));
stampa_totali(pr);
stampati_totali = TRUE;
}
next_page(pr);
elementi = 0;
ele_bis = 0;
}
break;
default:
CHECK(0, "Invalid Quadro A 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;
}