campo-sirio/ps/pd6411200.cpp

128 lines
3.6 KiB
C++
Raw Normal View History

#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 <20> 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 <20> 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'<27> 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++)
{
listini.zero();
TString4 riga; riga.format("%d,%d", LF_RIGHEDOC, i);
if(!ini.set_paragraph(riga))
break;
if(ini.get(RDOC_CODARTMAG).empty())
continue;
const TString& codart = ini.get(RDOC_CODART);
const real importo(ini.get(RDOC_PREZZO));
const TString& spessore = ini.get(RDOC_LIVELLO);
//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.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
//<2F> 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;
}