campo-sirio/ba/ba5100.cpp
alex 981678913a Patch level : 2.0.369
Files correlati     :
Ricompilazione Demo : [ ]
Commento            :
Riportata la versione P@rtners  2.0 patch 349


git-svn-id: svn://10.65.10.50/trunk@10709 c028cbd2-c16b-5b4b-a496-9718f37d4682
2002-12-20 17:08:30 +00:00

252 lines
5.7 KiB
C++
Executable File

#include <applicat.h>
#include <mask.h>
#include <recarray.h>
#include <relation.h>
#include <sheet.h>
#include <utility.h>
#include <urldefid.h>
#include "ba4600.h"
///////////////////////////////////////////////////////////
// TSoci_sheet
///////////////////////////////////////////////////////////
const char* const PHYSICAL_HEAD = HR("Codice|Cognome@30|Nome@20");
const char* const JURASSIC_HEAD = HR("Codice|Ragione sociale@50");
class TSoci_sheet : public TArray_sheet
{
bool _physical;
protected:
const char* lastcode();
public:
TSoci_sheet(bool);
void add_socio(const TString& codice, const TString& ragione, int elem = -1);
};
TSoci_sheet::TSoci_sheet(bool fis)
: TArray_sheet(-1,-1, -4, -4, TR("Soci"), fis ? PHYSICAL_HEAD : JURASSIC_HEAD),
_physical(fis)
{}
const char* TSoci_sheet::lastcode()
{
if (items() < 1) return "";
return data(items()-1).get(0);
}
void TSoci_sheet::add_socio(const TString& codice,
const TString& ragione,
int elem)
{
if (elem == -1 && codice == lastcode()) return;
TToken_string t(60);
t.add(codice);
if (_physical)
{
t.add(ragione.left(30));
t.add(ragione.mid(30));
} else t.add(ragione);
if (elem < 0) add(t);
else
row(elem) = (TString&) t;
}
///////////////////////////////////////////////////////////
// TQuery_socio
///////////////////////////////////////////////////////////
class TQuery_socio
{
TString16 _tipo; // tipo = F | G
TString16 _attprec; // {A}ttuale / {P}recedente
TString16 _carica; // codice carica
TString16 _qualifica; // richiesta qualifica
TString16 _q740; // quadro 740
TString16 _q750; // quadro 750
public:
TQuery_socio(const TMask* mask);
const TString& tipo() const { return _tipo; }
int test(const TRectype& rec) const;
};
TQuery_socio::TQuery_socio(const TMask* mask)
{
_tipo = mask->get(LST_SC1_TIPOASOC);
_attprec = mask->get(FLD_SC1_ANNO);
_carica = mask->get(FLD_SC1_CODCAR);
_qualifica = mask->get(LST_SC1_RICQUAL);
_q740 = mask->get(LST_SC2_Q740);
_q750 = mask->get(LST_SC2_QUATTPREV);
}
int TQuery_socio::test(const TRectype& r) const
{
if (_tipo != r.get("TIPOASOC")) return 1;
if (_attprec.not_empty()&& _attprec != r.get("ATTPREC")) return 2;
if (_carica.not_empty() && _carica != r.get("CODCAR")) return 3;
if (_qualifica.not_empty() && _qualifica != r.get("RICQUAL")) return 4;
if (_q740.not_empty() && _q740 != r.get("Q740")) return 5;
if (_q750.not_empty() && _q750 != r.get("QUATTPREV")) return 6;
return 0;
}
///////////////////////////////////////////////////////////
// TQuery_application
///////////////////////////////////////////////////////////
class TQuery_application : public TSkeleton_application
{
TMask* _mask;
protected:
virtual bool create();
virtual bool destroy();
virtual void main_loop();
bool do_query();
public:
TQuery_application();
};
TQuery_application::TQuery_application() : _mask(NULL)
{}
bool TQuery_application::create()
{
open_files(LF_SOCI, LF_ANAG, LF_NDITTE,0);
_mask = new TMask("ba5000");
return TSkeleton_application::create();
;
}
bool TQuery_application::destroy()
{
delete _mask;
return TSkeleton_application::destroy();
}
void TQuery_application::main_loop()
{
while (do_query());
}
const char* head(const TRectype& r, const char* name,
const char* title)
{
if (title == NULL) title = name;
if (r.exist(name))
{
TString h(r.length(name));
h.spaces();
h.overwrite(title, 0);
strcpy(__tmp_string, h);
}
else strcpy(__tmp_string, title);
return __tmp_string;
}
bool TQuery_application::do_query()
{
if (_mask->run() != K_F9) return FALSE;
TQuery_socio query(_mask);
TSoci_sheet s(query.tipo() == "F"); // Create sheet
TRelation fsoci(LF_SOCI);
TRectype& soci = fsoci.curr();
soci.zero();
_mask->autosave(fsoci);
for (fsoci.read(_isgteq); !fsoci.eof(); fsoci.next()) // Fill sheet
{
if (query.test(soci) == 0)
{
TString ragsoc(80);
TString16 cur_codice = soci.get("CODANAGRSO");
TString16 key; key << query.tipo() << "|" << cur_codice;
const TRectype & anag = cache().get(LF_ANAG, key);
if (anag.empty())
ragsoc = TR("Anagrafica assente");
else
ragsoc = anag.get("RAGSOC");
s.add_socio(cur_codice, ragsoc);
}
}
if (s.items() == 0)
{
warning_box(TR("Nessuna corrispondenza"));
return TRUE;
}
while(s.run() == K_ENTER)
{
TToken_string& r = s.row();
r.restart();
TString codice(r.get());
TString nome(r.get());
TRectype ditte(LF_NDITTE);
TToken_string h(128);
h.add("A/P ");
h.add(head(ditte, "CODDITTA", TR("Codice")));
h.add(head(ditte, "RAGSOC", TR("Ragione sociale")));
h.add(HR("Carica|Qualifica|740|750"));
h.add(head(soci, "PERCQUAZ", TR("% Quote")));
TArray_sheet d(-1,-1, -4, -4, nome, h);
soci.zero();
soci.put("TIPOASOC", query.tipo());
soci.put("CODANAGRSO", codice);
TToken_string row(128);
for (fsoci.read(_isgteq); !fsoci.eof(); fsoci.next())
{
if (codice != soci.get("CODANAGRSO")) break;
if (query.test(soci) != 0) continue;
row = soci.get("ATTPREC");
row.add(soci.get("CODDITTA"));
ditte = cache().get(LF_NDITTE, row.get(1));
if (ditte.empty())
row.add(TR("Ditta assente"));
else
row.add(ditte.get("RAGSOC"));
row.add(soci.get("CODCAR"));
row.add(soci.get("RICQUAL"));
row.add(soci.get("Q740"));
row.add(soci.get("QUATTPREV"));
row.add(soci.get("PERCQUAZ"));
d.add(row);
}
d.run();
}
return TRUE;
}
int ba5100(int argc,char* argv[])
{
TQuery_application qa;
qa.run(argc, argv, TR("Ricerca Soci"));
return 0;
}