campo-sirio/ci/ci0400.cpp
alex 5c694c8d6c Patch level : 2.2
Files correlati     :
Ricompilazione Demo : [ ]
Commento            :

Modlo contabilità industriale agggiunto supporto numerazioni ordinate per data


git-svn-id: svn://10.65.10.50/trunk@13002 c028cbd2-c16b-5b4b-a496-9718f37d4682
2005-04-22 20:46:53 +00:00

261 lines
5.8 KiB
C++
Executable File

#include <applicat.h>
#include <automask.h>
#include <execp.h>
#include <relation.h>
#include <sheet.h>
#include <utility.h>
#include <doc.h>
#include "ci0.h"
#include "cilib.h"
#include "ci0400.h"
#include "ci0400a.h"
#include "..\ve\velib.h"
///////////////////////////////////////////////////////////
// TImmissioneDocumenti_app
///////////////////////////////////////////////////////////
// Inizializzazioni
void TImmissioneDocumenti_app::init_tabs()
{
TToken_string pagenames;
const short id = F_AL01;
int item = 0;
_filters.destroy();
pagenames = "";
TConfig configfile("ci0400.ini");
configfile.set_paragraph("Main");
while (configfile.exist("Descr",item))
{
pagenames.add(configfile.get("Descr","Main",item));
_filters.add(configfile.get("Filter","Main",item));
_mask->activate_almanac(id + item, item, TDate(TODAY));
_mask->almanac(item).set_padding(0);
item++;
}
if (item>0)
{
_mask->set_caption(pagenames);
_mask->disable_page(item);
}
}
void TImmissioneDocumenti_app::init_flags()
{
int filters;
int items;
TDate currdate;
TDate currstart;
TString filter;
filters = _filters.items();
_ordered.reset();
for(int i=0;i<filters;i++)
{
filter = "";
filter << "(ANNO==\"" << _year << "\")";
filter << "&&";
filter << "(CODNUM==\"" << _filters.row(i) << "\")";
TCodice_numerazione c(_filters.row(i));
if (!c.dont_test_datadoc())
_ordered.set(i);
TRelation relation(LF_DOC);
TSorted_cursor cursor(&relation, "DATADOC", filter);
items = cursor.items();
if (_flags.items()>i)
((TBit_array&)_flags[i]).reset();
else
_flags.add(new TBit_array(366),i);
for (cursor=0;cursor.pos()<items;++cursor)
{
currdate = relation.lfile().get_date(DOC_DATADOC);
((TBit_array&)_flags[i]).set(currdate-_newyearsday, 1);
}
}
}
// Overrides
bool TImmissioneDocumenti_app::create()
{
_mask = new TImmissioneDocumenti_mask();
init_tabs();
init_flags();
return TSkeleton_application::create();
}
bool TImmissioneDocumenti_app::destroy()
{
delete _mask;
return TSkeleton_application::destroy();
}
void TImmissioneDocumenti_app::main_loop()
{
while (_mask->run() == K_ENTER)
{
TDate selday = _mask->last_selected_day();
int currpage = _mask->last_selected_page();
TDate last_datadoc(1, 1, selday.year());
last_datadoc += ((TBit_array&)_flags[currpage]).last_one();
const bool can_insert = (selday >= last_datadoc) || !ordered(currpage);
_mask->open_inner_sheet(selday,_filters.row(currpage), can_insert);
}
}
// Chiamate dalla maschera
void TImmissioneDocumenti_app::change_year(int newyear, bool init_flg)
{
_year = newyear;
_newyearsday.set_day(1);
_newyearsday.set_month(1);
_newyearsday.set_year(_year);
if (init_flg) init_flags();
}
bool TImmissioneDocumenti_app::has_documents(int currpage, TDate& day)
{
return (((TBit_array&)_flags[currpage])[day-_newyearsday]);
}
///////////////////////////////////////////////////////////
// TImmissioneDocumenti_mask
///////////////////////////////////////////////////////////
// Routines Proprietarie
void TImmissioneDocumenti_mask::open_inner_sheet(TDate date, TString doctype, bool can_insert)
{
int exitval;
TString filter;
filter << "(ANSI(DATADOC)==\"" << date.string(ANSI) << "\")";
filter << "&&";
filter << "(CODNUM==\"" << doctype << "\")";
TRelation relation(LF_DOC);
relation.add(LF_CLIFO, "TIPOCF==TIPOCF|CODCF==CODCF");
TCursor cursor(&relation, filter);
TCursor_sheet sheet(&cursor,
"ANNO|CODNUM|TIPODOC|NUMDOCRIF|STATO|DATADOCRIF|NDOC|20->RAGSOC",
TR("Selezione documenti"),
HR("Anno|Num.|Tipo|Docum.Rif.|Stato|Data@10|Documento|Ragione Sociale@50"),
can_insert ? 0x02|0x04 : 0x04);
exitval = sheet.run();
switch(exitval)
{
case K_ENTER:
call_ve0(exitval, relation, date, doctype);
break;
case K_DEL:
call_ve0(exitval, relation, date, doctype);
break;
case K_INS:
call_ve0(exitval, relation, date, doctype);
break;
case K_ESC:
break;
default:
break;
}
}
void TImmissioneDocumenti_mask::call_ve0(int exitval, TRelation& relation, TDate& date, TString& doctype)
{
TFilename tempfile;
tempfile.tempdir();
tempfile.add("cicallsve0.ini");
{
TConfig configfile(tempfile);
switch(exitval)
{
case K_ENTER:
configfile.set("Action", "Modify", "Transaction");
configfile.set("NDOC", relation.lfile().get(DOC_NDOC), "33");
break;
case K_DEL:
configfile.set("Action", "Delete", "Transaction");
configfile.set("NDOC", relation.lfile().get(DOC_NDOC), "33");
break;
case K_INS:
configfile.set("Action", "Insert", "Transaction");
configfile.set("DATADOC", date.string(), "33");
break;
default:
break;
}
configfile.set("PROVV", "D", "33");
configfile.set("ANNO", last_selected_day().year(), "33");
configfile.set("CODNUM", doctype, "33");
}
TString commandline;
commandline.format("ve0 -0 /i%s",(const char*)tempfile);
TExternal_app ve(commandline);
ve.run();
remove_file(tempfile);
}
// Richiami all'applicazione
void TImmissioneDocumenti_mask::change_year(int newyear)
{
immissione_documenti_app().change_year(newyear);
}
bool TImmissioneDocumenti_mask::is_date_void(int currpage, TDate& cdate)
{
return !(immissione_documenti_app().has_documents(currpage, cdate));
}
///////////////////////////////////////////////////////////
// Mains
///////////////////////////////////////////////////////////
int ci0300(int argc, char* argv[])
{
TImmissioneDocumenti_app a ;
a.run(argc, argv, TR("Immissione Documenti"));
return 0;
}
int ci0400(int argc, char* argv[])
{
TImmissioneDocumenti_app a ;
a.run(argc, argv, TR("Immissione Documenti"));
return 0;
}