campo-sirio/ps/pd6411200.cpp
cris 9e6e658366 Patch level : 10.0 NO PATCH
Files correlati     : pd6411
Ricompilazione Demo : [ ]
Commento            :
Se la riga no e' di tipo A1, la salto


git-svn-id: svn://10.65.10.50/branches/R_10_00@21220 c028cbd2-c16b-5b4b-a496-9718f37d4682
2010-12-01 14:38:40 +00:00

139 lines
3.9 KiB
C++
Executable File

#include <applicat.h>
#include "../ve/velib.h"
//////////////////////////////////////////
//// TAGGIUNGI_LISTINI_HABA_APP ////
//////////////////////////////////////////
//Classe TAggiungi_listini_app
class TAggiungi_listini_haba_app : public TSkeleton_application
{
private:
TFilename _ini_name;
protected:
virtual bool check_autorization() const {return false;}
virtual const char * extra_modules() const {return "cg";}
virtual void main_loop();
void check_doc();
public:
bool load_ini(bool check);
};
//LOAD_INI: carica il file ini che contiene il documento
bool TAggiungi_listini_haba_app::load_ini(bool check)
{
//argc é un intero che specifica quanti parametri vengono passati al programma dalla linea di comando
const int args = argc();
const int narg = check ? 3 : 2;
//argv é un array di null-terminated strings
if (args <= narg)
return false;
const TFixed_string arg = argv(narg);
if ((arg[0] != '-' && arg[0] != '/') || (arg[1] != 'i' && arg[1] != 'I'))
return false;
_ini_name = arg.mid(2);
if (_ini_name.blank() && args > 3)
_ini_name = argv(3);
//controlla che il file su cui deve scrivere ci sia; se non c'é dá una segnalazione di errore
if (!_ini_name.exist())
return false;
return true;
}
//CHECK_DOC: scorro il file ini e aggiungo alla tabella dei listini le righe mancanti
void TAggiungi_listini_haba_app::check_doc()
{
TConfig ini(_ini_name, "33");
TString4 para; para.format("%d", LF_DOC);
const int anno = ini.get_int(DOC_ANNO, para);
TString4 mese; mese.format("%02d", TDate(ini.get(DOC_DATADOC)).month());
TTable listini("LGM");
//scorro le righe documento, saltando quelle che non sono articoli,
//e fermandomi quando la set_paragraph fallisce dal momento che non so a priori
//quante sono le righe del documento
for(int i = 1; ; i++)
{
TString4 riga; riga.format("%d,%d", LF_RIGHEDOC, i);
if(!ini.set_paragraph(riga))
break;
if(ini.get(RDOC_TIPORIGA) != "A1")
continue;
if(ini.get(RDOC_CODARTMAG).empty())
continue;
const TString& codart = ini.get(RDOC_CODART);
//devo prendere il prezzo al Kg (salvato in USER9, campo virtuale) e non il prezzo della riga
const TString& r1 = ini.get(ini.get(RDOC_RG1));
const int inizio = r1.find("USER9=");
const int fine = r1.find("\\n", inizio);
TToken_string tmp(r1.sub(inizio, fine), '=');
const real importo(tmp.get(1));
real spessore(ini.get(RDOC_LIVELLO));
spessore.ceil();
//il gruppo va letto dall'anagrafica magazzino
const TString16 gruppo = cache().get(LF_ANAMAG, codart, ANAMAG_GRMERC);
TString80 codtab;
codtab << gruppo << mese << spessore;
listini.put("CODTAB", codtab);
//se fallisce la read, allora aggiungo la riga
if(listini.read() != NOERR)
{
listini.zero();
listini.put("CODTAB", codtab);
listini.put("R0", importo);
listini.write();
}
}
}
void TAggiungi_listini_haba_app::main_loop() //definizione della member function main_loop, della classe TAggiungi_listini_haba_app
{
TString sw(argv(2)); sw.upper();
const bool chk_doc = sw == "-V";
open_files(LF_TAB, LF_DOC, LF_RIGHEDOC, 0);
//mostra un messaggio di errore se non riesce ad aprire il file richiesto; nota la conversione dei tipi che
//é da eseguire quando devo passare una TString ad un %s
if(!load_ini(chk_doc))
{
error_box(TR("Impossibile aprire il file '%s'"), (const char*)_ini_name);
return;
}
else
{
check_doc();
message_box(TR("Importazione listini completata"));
}
}
////// Esecuzione del programma ///////////
int pd6411200(int argc, char* argv[])
{
TAggiungi_listini_haba_app app;
app.run(argc,argv,"Listini Haba");
return 0;
}