/////////////////////////////////////////////////////////// // 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 è una winprinter // non è 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; }