campo-sirio/ps/pg0002100.cpp
alex a487443cd9 Patch level :
Files correlati     :
Ricompilazione Demo : [ ]
Commento            :

Aggiornamento prezzi GRIFFATO


git-svn-id: svn://10.65.10.50/branches/R_10_00@22237 c028cbd2-c16b-5b4b-a496-9718f37d4682
2011-06-08 10:02:31 +00:00

212 lines
5.1 KiB
C++
Executable File
Raw Blame History

#include <applicat.h>
#include <automask.h>
#include <real.h>
#include <utility.h>
#include "pg0002100a.h"
#include <doc.h>
#include <rdoc.h>
#include "../cg/cglib01.h"
#include "../ve/velib.h"
#include "../ve/velib04.h"
// TAutomask
class TAggiorna_mask : public TAutomask
{
void serialize(bool bSave);
protected:
bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TAggiorna_mask() : TAutomask("pg0002100a") {}
virtual ~TAggiorna_mask() {}
};
bool TAggiorna_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F_RICARICO :
if (e == fe_modify)
{
TMask & m = o.mask();
TArticolo & art = cached_article(m.get(F_CODART));
TCodiceIVA c(art.get(ANAMAG_CODIVA));
real costo(m.get(F_COSTO));
const real perc = cache().get("CVE", m.get(F_RICARICO), "R2");
real prezzo = costo * ( UNO + (perc / CENTO));
prezzo = c.lordo(prezzo, 20);
prezzo.round(0);
m.set(F_PREZZOL, prezzo, 0x3);
}
break;
case F_PREZZO :
if (e == fe_modify)
{
TMask & m = o.mask();
TArticolo & art = cached_article(m.get(F_CODART));
real prezzo(o.get());
TCodiceIVA c(art.get(ANAMAG_CODIVA));
prezzo = c.lordo(prezzo, 20);
prezzo.round(TCurrency::get_firm_dec(true));
m.set(F_PREZZOL, prezzo);
}
break;
case F_PREZZOL :
if (e == fe_modify)
{
TMask & m = o.mask();
TArticolo & art = cached_article(m.get(F_CODART));
real prezzo(o.get());
TCodiceIVA c(art.get(ANAMAG_CODIVA));
c.scorpora(prezzo, 20);
prezzo.round(TCurrency::get_firm_dec(true));
m.set(F_PREZZO, prezzo);
}
break;
default :
break;
}
return true;
}
class TAggiorna_prezzi : public TSkeleton_application
{
TDocumento * _doc;
private:
protected:
virtual const char * extra_modules() const { return "ba"; }
virtual void main_loop();
public:
const TDocumento & doc() { return *_doc; }
void aggiorna(TMask & m);
bool set_params(TMask & m);
};
// restituisce un riferimento all' applicazione
inline TAggiorna_prezzi & app() { return (TAggiorna_prezzi &) main_app();}
void TAggiorna_prezzi::aggiorna(TMask & m)
{
TSheet_field & sh = m.sfield(F_SHEET);
const int nrows = doc().physical_rows();
for (int i = 1; i <= nrows; i++)
{
const TRiga_documento & rdoc = doc()[i];
const TString & codart = rdoc.get(RDOC_CODARTMAG);
if (codart.full())
{
TToken_string & row = sh.row(-1);
row.add(codart, sh.cid2index(F_CODART));
row.add(rdoc.get(RDOC_UMQTA), sh.cid2index(F_UM));
const real costo = rdoc.get_real(RDOC_PREZZO);
row.add(costo.string(), sh.cid2index(F_COSTO));
TArticolo & art = cached_article(codart);
const TString4 ric = doc().clifor().vendite().get(CFV_CATVEN);
row.add(ric, sh.cid2index(F_RICARICO));
const real perc = cache().get("CVE", ric, "R2");
real prezzo = costo * ( UNO + (perc / CENTO));
TCodiceIVA c(art.get(ANAMAG_CODIVA));
prezzo = c.lordo(prezzo, 20);
prezzo.round(0);
row.add(prezzo.string(), sh.cid2index(F_PREZZOL));
c.scorpora(prezzo, 20);
prezzo.round(TCurrency::get_firm_dec(true));
row.add(prezzo.string(), sh.cid2index(F_PREZZO));
row.add(art.get(ANAMAG_DESCR), sh.cid2index(F_DESART));
}
}
if (m.run() == K_ENTER)
{
const int shrows = sh.items();
TLocalisamfile f(LF_UMART);
for (int i = 0; i < shrows; i++)
{
TToken_string & row = sh.row(i);
TArticolo & art = cached_article(row.get(sh.cid2index(F_CODART)));
real prezzo(row.get(sh.cid2index(F_PREZZO)));
art.convert_to_um(prezzo, EMPTY_STRING, row.get(sh.cid2index(F_UM)));
prezzo.round(TCurrency::get_firm_dec(true));
art.set_prezzo_vendita(prezzo);
art.um().row(1).rewrite(f);
}
TDocumento & d = (TDocumento &)doc();
TElaborazione_esterna e(d.tipo().elaborazione());
d.stato(e.stato_finale_doc_iniziale()[0]);
d.rewrite();
const TFixed_string arg = argv(2);
TConfig c(arg.mid(2), "Transaction");
c.set("Result", "OUDOC");
}
}
bool TAggiorna_prezzi::set_params(TMask & m)
{
const TFixed_string arg = argv(2);
if ((arg[0] != '-' && arg[0] != '/') || (arg[1] != 'i' && arg[1] != 'I'))
return false;
TString ini_name = arg.mid(2);
//controlla che il file su cui deve scrivere ci sia; se non c'<27> d<> una segnalazione di errore
if (!fexist(ini_name))
return false;
TString4 para; para.format("%d", LF_DOC);
TConfig ini(ini_name, para);
const char provv = ini.get(DOC_PROVV)[0];
const int anno = ini.get_int(DOC_ANNO);
const TString4 codnum = ini.get(DOC_CODNUM);
const long ndoc = ini.get_long(DOC_NDOC);
_doc = new TDocumento(provv, anno, codnum,ndoc);
m.set(F_PROVV, provv);
m.set(F_ANNO, anno);
m.set(F_CODNUM, codnum, 0x3);
m.set(F_NDOC, ndoc, 0x3);
return _doc != NULL && _doc->physical_rows() > 0;
}
void TAggiorna_prezzi::main_loop() //definizione della member function main_loop, della classe TAggiorna_prezzi
{
open_files(LF_DOC, LF_RIGHEDOC, LF_UMART, 0);
if (argc() > 2)
{
TAggiorna_mask m;
if (set_params(m))
aggiorna(m);
}
}
////// Esecuzione del programma ///////////
int pg0002100(int argc, char* argv[])
{
TAggiorna_prezzi app;
app.run(argc,argv,"Generazione etichette");
return 0;
}