a8c4b15523
Files correlati : Ricompilazione Demo : [ ] Commento : Riportata la versione 3.2 1208 git-svn-id: svn://10.65.10.50/trunk@17110 c028cbd2-c16b-5b4b-a496-9718f37d4682
292 lines
7.5 KiB
C++
Executable File
292 lines
7.5 KiB
C++
Executable File
#include "pg0214100a.h"
|
|
|
|
#include <applicat.h>
|
|
#include <automask.h>
|
|
#include <progind.h>
|
|
#include <recarray.h>
|
|
#include <reprint.h>
|
|
#include <reputils.h>
|
|
#include <textset.h>
|
|
|
|
#include "../cg/cg2103.h"
|
|
#include "../cg/cglib02.h"
|
|
#include "../cg/cgsaldac.h"
|
|
#include "../ve/velib.h"
|
|
|
|
#include "clifo.h"
|
|
#include "comuni.h"
|
|
|
|
#include <causali.h>
|
|
#include <mov.h>
|
|
#include <pconti.h>
|
|
#include <rmov.h>
|
|
#include <rmoviva.h>
|
|
|
|
|
|
#include "../ve/velib.h"
|
|
|
|
///////////////////////////////////////////////////////////
|
|
// MASCHERA
|
|
///////////////////////////////////////////////////////////
|
|
class TCertificazioni_mask : public TAutomask
|
|
{
|
|
protected:
|
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
|
|
|
public:
|
|
TCertificazioni_mask();
|
|
virtual ~TCertificazioni_mask() {}
|
|
};
|
|
|
|
TCertificazioni_mask::TCertificazioni_mask() : TAutomask("pg0214100a")
|
|
{
|
|
}
|
|
|
|
bool TCertificazioni_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////
|
|
// REPORT
|
|
/////////////////////////////////////////////////////////////
|
|
class TCertificazioni_report : public TReport
|
|
{
|
|
protected:
|
|
virtual bool use_mask() { return false; }
|
|
public:
|
|
TCertificazioni_report() {}
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////
|
|
// CSV RECORDSET
|
|
/////////////////////////////////////////////////////////////
|
|
|
|
class TCertificazioni_csv_recordset : public TCSV_recordset
|
|
{
|
|
protected:
|
|
virtual const TVariant& get(const char* name) const;
|
|
|
|
public:
|
|
TCertificazioni_csv_recordset();
|
|
};
|
|
|
|
const TVariant& TCertificazioni_csv_recordset::get(const char* name) const
|
|
{
|
|
if (*name != '#')
|
|
{
|
|
const TFixed_string fname(name);
|
|
const int dot = fname.find('.');
|
|
if (dot > 0)
|
|
{
|
|
const int logicnum = table2logic(fname.left(dot));
|
|
TString8 c;
|
|
switch (logicnum)
|
|
{
|
|
case LF_CLIFO : c << "F|" << TCSV_recordset::get(0L).as_int(); break;
|
|
case LF_COMUNI: c << " |" << get("CLIFO.COMCF"); break;
|
|
default: break;
|
|
}
|
|
if (c.full())
|
|
{
|
|
const TString& fld = fname.mid(dot+1);
|
|
return get_tmp_var() = cache().get(logicnum, c, fld);
|
|
}
|
|
}
|
|
}
|
|
return TRecordset::get(name);
|
|
}
|
|
|
|
TCertificazioni_csv_recordset::TCertificazioni_csv_recordset()
|
|
: TCSV_recordset("CSV(,)\n")
|
|
{ }
|
|
|
|
|
|
///////////////////////////////////////////////////////////
|
|
// APPLICAZIONE
|
|
///////////////////////////////////////////////////////////
|
|
|
|
class TCertificazioni : public TSkeleton_application
|
|
{
|
|
|
|
virtual bool check_autorization() const {return false;}
|
|
virtual const char * extra_modules() const {return "cg";}
|
|
|
|
protected:
|
|
void elabora(const TMask& mask) const;
|
|
void scrivi_csv(const TRectype& prima_riga,
|
|
TCertificazioni_csv_recordset& csv) const;
|
|
|
|
public:
|
|
virtual bool create();
|
|
virtual void main_loop();
|
|
|
|
};
|
|
|
|
// scorre le righe di movimento e fa i calcoli per stampare la riga di report
|
|
// scorre le righe di movimento e fa i calcoli per stampare la riga di report
|
|
void TCertificazioni::scrivi_csv(const TRectype& prima_riga,
|
|
TCertificazioni_csv_recordset& csv) const
|
|
{
|
|
const long numreg = prima_riga.get_long(RMV_NUMREG);
|
|
const TBill rit_gcs(prima_riga);
|
|
|
|
TMovimentoPN movpn;
|
|
movpn.lfile().setkey(1);
|
|
TRectype& mov = movpn.curr();
|
|
mov.put(MOV_NUMREG, numreg);
|
|
if (movpn.read() == NOERR)
|
|
{
|
|
long fornitore = 0;
|
|
real lordo, imponibile, ritenute, netto;
|
|
|
|
for (int i=0; i < movpn.cg_items(); i++)
|
|
{
|
|
const TRectype& rmov = movpn.cg(i);
|
|
const TBill gcs(rmov);
|
|
const char sez = rmov.get_char(RMV_SEZIONE);
|
|
const real imp = rmov.get_real(RMV_IMPORTO);
|
|
if (sez =='A')
|
|
{
|
|
if (gcs == rit_gcs) // ritenuta
|
|
ritenute += imp;
|
|
else
|
|
{
|
|
netto += imp; // imponibile
|
|
if (gcs.tipo() == 'F')
|
|
fornitore = gcs.codclifo();
|
|
}
|
|
}
|
|
else
|
|
lordo += imp;
|
|
}
|
|
|
|
|
|
if (fornitore > 0)
|
|
{
|
|
csv.new_rec("");
|
|
|
|
csv.set(0, TVariant(fornitore));
|
|
const TString& causale = cache().get(LF_CAUSALI, mov.get(MOV_CODCAUS), CAU_DESCR);
|
|
csv.set(1, TVariant(causale));
|
|
csv.set(2, TVariant(lordo)); // compenso lordo
|
|
csv.set(3, TVariant(ZERO)); // somme non soggette
|
|
csv.set(4, TVariant(ZERO)); // imponibile
|
|
csv.set(5, TVariant(ritenute)); // ritenute
|
|
csv.set(6, TVariant(netto)); // netto
|
|
}
|
|
}
|
|
}
|
|
|
|
//metodo di base per la ricerca delle righe movimento che soddisfano le condizioni
|
|
void TCertificazioni::elabora(const TMask& mask) const
|
|
{
|
|
// date
|
|
const TDate dataini = mask.get_date(F_DADATA);
|
|
const TDate datafin = mask.get_date(F_ADATA);
|
|
|
|
TConfig ditta_ini(CONFIG_DITTA, "ve");
|
|
|
|
//Adesso prende i conti da verificare
|
|
TSheet_field& sf = mask.sfield(F_CONTI);
|
|
|
|
//la query e' sulle righe movimento
|
|
TString query;
|
|
query << "USE RMOV KEY 2\n";
|
|
query << "SELECT (NUM(ANSI(23.DATACOMP))>=NUM(ANSI(#DADATA)))&&(NUM(ANSI(23.DATACOMP))<=NUM(ANSI(#ADATA)))\n";
|
|
query << "JOIN MOV INTO NUMREG==NUMREG\n";
|
|
query << "JOIN CLIFO TO MOV INTO TIPOCF==TIPO CODCF==CODCF\n";
|
|
query << "JOIN COMUNI TO CLIFO INTO STATO==STATOCF COM==COMCF\n";
|
|
query << "FROM GRUPPO=#GRUPPO CONTO=#CONTO SOTTOCONTO=#SOTTOCONTO\n";
|
|
query << "TO GRUPPO=#GRUPPO CONTO=#CONTO SOTTOCONTO=#SOTTOCONTO\n";
|
|
query << "BY MOV.CODCF\n";
|
|
|
|
TISAM_recordset rmov(query);
|
|
|
|
// filtro per date
|
|
rmov.set_var("#DADATA", dataini);
|
|
rmov.set_var("#ADATA", datafin);
|
|
|
|
//creazione del csv recordset che verra' riempito dalla elaborazione
|
|
TCertificazioni_csv_recordset* csv = new TCertificazioni_csv_recordset;
|
|
|
|
//Visto che e' possibile avere una secchiata di conti, gli tocca fare un giro per ogni conto
|
|
// in realta' secondo me si potrebbe avere un conto solo (quello delle ritenute)
|
|
FOR_EACH_SHEET_ROW(sf, r, row)
|
|
{
|
|
//estrazione definitiva dei record che soddisfano il casino di parametri richiesti
|
|
rmov.set_var("#GRUPPO", row->get(0));
|
|
rmov.set_var("#CONTO", row->get(1));
|
|
rmov.set_var("#SOTTOCONTO", row->get(2));
|
|
|
|
//quanti record validi ha trovato?
|
|
const long items = rmov.items();
|
|
|
|
//E crea pure la progind..
|
|
TProgind pi(items, TR("Generazione righe ritenute..."), true, true);
|
|
|
|
long last_nmov = 0;
|
|
|
|
//Scansione del recordset trovato
|
|
for (bool ok = rmov.move_first(); ok; ok = rmov.move_next())
|
|
{
|
|
if (!pi.addstatus(1))
|
|
break;
|
|
|
|
const long nmov = rmov.get(RMV_NUMREG).as_int();
|
|
const int gruppo = rmov.get(RMV_GRUPPO).as_int();
|
|
const int conto = rmov.get(RMV_CONTO).as_int();
|
|
const long sottoconto = rmov.get(RMV_SOTTOCONTO).as_int();
|
|
if (nmov != last_nmov)
|
|
{
|
|
scrivi_csv(rmov.cursor()->curr(), *csv, gruppo, conto, sottoconto);
|
|
last_nmov = nmov;
|
|
}
|
|
|
|
} //for(bool ok = rmov.move_first(..
|
|
|
|
} //FOR_EACH...
|
|
|
|
|
|
#ifdef DBG
|
|
csv->save_as_text("c:/tmp/admin/bonomo.txt");
|
|
#endif
|
|
|
|
//creazione del report di stampa
|
|
TCertificazioni_report rep;
|
|
bool ok = rep.load("pg0214100a");
|
|
//setta il recordset...
|
|
//deve settare almeno un campo manualmente perche' funzioni la mask2report
|
|
csv->set_var("#EMAIL", TVariant(TR("Manca la e-mail")), true);
|
|
rep.set_recordset(csv);
|
|
//..e poi carica i valori sulla maschera nel report!!!!
|
|
rep.mask2report(mask);
|
|
|
|
if (ok)
|
|
{
|
|
TReport_book book;
|
|
ok = book.add(rep);
|
|
if (ok)
|
|
book.print_or_preview();
|
|
}
|
|
}
|
|
|
|
void TCertificazioni::main_loop()
|
|
{
|
|
TCertificazioni_mask mask;
|
|
mask.field(F_CODDITTA).check(RUNNING_CHECK);
|
|
while (mask.run() == K_ENTER)
|
|
elabora(mask);
|
|
}
|
|
|
|
bool TCertificazioni::create()
|
|
{
|
|
return TSkeleton_application::create();
|
|
}
|
|
|
|
int pg0214100(int argc, char* argv[])
|
|
{
|
|
TCertificazioni dc;
|
|
dc.run(argc, argv, TR("Stampa certificazioni"));
|
|
return 0;
|
|
} |