campo-sirio/lv/lv1200.cpp
cris 28fb3889c5 Patch level :
Files correlati     :
Ricompilazione Demo : [ ]
Commento            : stampa a kg  (inizio)


git-svn-id: svn://10.65.10.50/trunk@19978 c028cbd2-c16b-5b4b-a496-9718f37d4682
2010-01-25 14:44:27 +00:00

229 lines
6.3 KiB
C++
Executable File

#include <applicat.h>
#include <automask.h>
#include <execp.h>
#include <relation.h>
#include <reprint.h>
#include "lvlib.h"
#include "lv1200a.h"
#include "../ve/velib.h"
///////////////////////////////////////////////////////////
// TStampa_a_kg_msk
///////////////////////////////////////////////////////////
class TStampa_a_kg_msk: public TAutomask
{
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TStampa_a_kg_msk();
};
TStampa_a_kg_msk::TStampa_a_kg_msk() : TAutomask("lv1200a") {}
bool TStampa_a_kg_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
return true;
}
///////////////////////////////////////////////////////////
// TStampa_a_kg_rep
///////////////////////////////////////////////////////////
class TStampa_a_kg_rep : public TReport
{
protected:
virtual bool get_usr_val(const TString& name, TVariant& var) const;
};
bool TStampa_a_kg_rep::get_usr_val(const TString& name, TVariant& var) const
{
var = 0;
if (name == "#PESO")
{
const TRecordset& recset = *recordset();
const TString4 umkg = ini_get_string(CONFIG_DITTA, "lv", "UmKg");
const TString4 umri = recset.get(RDOC_UMQTA).as_string();
//se la riga è già espressa in kg non devo fare niente
if(umri == umkg)
var = recset.get(RDOC_QTA);
// altrimenti
else
{
// istanzio un TArticolo_lavanderie. serve??
const TString80 codart = recset.get(RDOC_CODART).as_string();
TArticolo_lavanderie artlav(codart);
//leggo e controllo l'unità di misura del peso
//leggo e controllo il peso dell'articolo
const TString4 ump = artlav.get(ANAMAG_UMP);
const real peso = artlav.get_real(ANAMAG_PESO);
if (!ump.empty() && peso!=ZERO)
{
//leggo l'unità di misura dell'articolo e la quantità convertita all'unità di misura dell'articolo
const TString4 umart = artlav.um()[0].get(UMART_UM);
const real qta = artlav.convert_to_um(recset.get(RDOC_QTA).as_real(), umart, umri, false);
//se l'articolo non è espresso in kg, allora:
if(umart != umkg)
{
//preparo una cache sulla tabella delle unità di misura
const TRectype& unita = cache().get("%UMS", umart);
//leggo e controllo se esiste l'unità di misura di riferimento
const TString4 umrif = unita.get("S7");
if(umrif.empty())
{
if(umrif == umkg)
{
//leggo e controllo il fattore di conversione
const real fatconv = unita.get_real("R10");
if (fatconv != ZERO)
{
//se tutti i controlli sono andati a buon fine, converto la quantità e la restituisco
const real qtaconv = qta * fatconv * peso;
var = qtaconv;
}
}
}
}
}
}
return true;
}
else
return TReport::get_usr_val(name, var);
}
///////////////////////////////////////////////////////////
// TStampa_a_kg_app
///////////////////////////////////////////////////////////
class TStampa_a_kg_app: public TSkeleton_application
{
TStampa_a_kg_msk* _msk;
protected:
virtual bool create();
virtual bool destroy();
TISAM_recordset* prepara_recordset() const;
public:
virtual void main_loop();
};
//CREATE: metodo costruttore
bool TStampa_a_kg_app::create()
{
_msk = new TStampa_a_kg_msk;
return TSkeleton_application::create();
}
//DESTROY: metodo distruttore
bool TStampa_a_kg_app::destroy()
{
delete _msk;
return TApplication::destroy();
}
//PREPARA_RECORDSET: metodo che estre tutte le righe documento in base ai criteri selezionati
TISAM_recordset* TStampa_a_kg_app::prepara_recordset() const
{
const TString4 codnum = ini_get_string(CONFIG_DITTA, "lv", "NUM_GEN");
const int raggruppa = _msk->get_int(F_RAGX);
const bool datadog = _msk->get_int(F_DATADOG) == 0 ? true : false;
const TDate dadata = _msk->get_date(F_DADATA);
const TDate adata = _msk->get_date(F_ADATA);
const int daanno = dadata.year();
const int aanno = adata.year();
TString query;
query << "USE RDOC\n";
if(datadog)
query << "SELECT (BETWEEN(33.DATADOC,#DADATA,#ADATA))";
else
query << "SELECT (BETWEEN(33.G1:DATAGEN,#DADATA,#ADATA))";
query << "&&(TIPORIGA==\"21\")&&(33.TIPOCF=\"C\")";
switch(raggruppa)
{
case 1: query << "&&(BETWEEN(33.CODCF,#DACODCF,#ACODCF))\nBY 33.CODCF CODART\n"; break;
case 2: query << "&&(BETWEEN(33.G1:CODITI,#DAITI,#AITI)\nBY 33.G1:CODITI CODART\n"; break;
case 3: query << "&&(BETWEEN(33.CODAG,#DAAUT,#AAUT)\nBY 33.CODAG CODART\n"; break;
default: query << "\nBY CODART\n"; break;
}
query << "JOIN DOC INTO CODNUM==CODNUM ANNO==ANNO PROVV==PROVV NDOC==NDOC\n"
<< "JOIN ANAMAG INTO CODART==CODART\n"
//<< "FROM CODNUM=" << codnum << " ANNO=" << daanno << " PROVV=\"D\"\n"
//<< "FROM CODNUM=#CODNUM ANNO=#DAANNO PROVV=\"D\"\n"
//<< "TO CODNUM=#CODNUM ANNO=#AANNO PROVV=\"D\"\n";
<< "FROM CODNUM=#CODNUM\n"
<< "TO CODNUM=#CODNUM\n";
TISAM_recordset* righedoc = new TISAM_recordset(query);
righedoc->set_var("#DADATA", dadata);
righedoc->set_var("#ADATA", adata);
righedoc->set_var("#CODNUM", codnum);
//righedoc.set_var("#DAANNO", daanno);
//righedoc.set_var("#AANNO", aanno);
switch(raggruppa)
{
case 1:
righedoc->set_var("#DACODCF", _msk->get_long(F_DACODCF));
righedoc->set_var("#ACODCF", _msk->get_long(F_ACODCF));
break;
case 2:
righedoc->set_var("#DAITI", _msk->get_long(F_DACODITI));
righedoc->set_var("#AITI", _msk->get_long(F_ACODITI));
break;
case 3:
righedoc->set_var("#DAAUT", _msk->get_long(F_DACODAUT));
righedoc->set_var("#AAUT", _msk->get_long(F_ACODAUT));
break;
default: break;
}
return righedoc;
}
void TStampa_a_kg_app::main_loop()
{
while (_msk->run() == K_ENTER)
{
TISAM_recordset* righedoc = prepara_recordset();
TStampa_a_kg_rep rep;
const int raggruppa = _msk->get_int(F_RAGX);
bool ok;
switch (raggruppa)
{
case '1':
ok = rep.load("lv1200b");
break;
case '2':
ok = rep.load("lv1200c");
break;
case '3':
ok = rep.load("lv1200d");
break;
default:
ok = rep.load("lv1200e");
break;
}
if (ok)
rep.set_recordset(righedoc);
TReport_book book;
ok = book.add(rep);
if (ok)
book.print_or_preview();
delete righedoc;
}
}
int lv1200(int argc, char *argv[])
{
TStampa_a_kg_app a;
a.run (argc, argv, "Stampa a Kg");
return TRUE;
}