d52d8167eb
Files correlati : ci0.exe ve0.exe Ricompilazione Demo : [ ] Commento : Aggiunta possibilità di rimanere in modifica o in inserimento do Registra git-svn-id: svn://10.65.10.50/trunk@13066 c028cbd2-c16b-5b4b-a496-9718f37d4682
287 lines
7.0 KiB
C++
Executable File
287 lines
7.0 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()
|
|
{
|
|
TImmissioneDocumenti_mask & m = mask();
|
|
|
|
m.filters().destroy();
|
|
m.ordered().reset();
|
|
|
|
TConfig configfile(CONFIG_DITTA, "ci");
|
|
int items = 0;
|
|
TToken_string pagenames;
|
|
|
|
while (items == 0 || configfile.exist("Descr",items))
|
|
{
|
|
pagenames.add(configfile.get("Descr", NULL,items, "Fatture"));
|
|
m.filters().add(configfile.get("Filter", NULL,items, "F01"));
|
|
m.insert().set(items, configfile.get_bool("InsertRemain", NULL, items));
|
|
m.modify().set(items, configfile.get_bool("ModifyRemain", NULL, items));
|
|
m.activate_almanac(F_AL01 + items, items, TDate(TODAY));
|
|
items++;
|
|
}
|
|
m.disable_page(items);
|
|
m.set_caption(pagenames);
|
|
}
|
|
|
|
void TImmissioneDocumenti_app::init_flags()
|
|
{
|
|
TImmissioneDocumenti_mask & m = mask();
|
|
const int items = m.filters().items();
|
|
TDate currdate;
|
|
TDate currstart;
|
|
|
|
m.ordered().reset();
|
|
|
|
for(int i = 0; i < items; i++)
|
|
{
|
|
TString filter;
|
|
|
|
filter << "(ANNO==\"" << _year << "\")" << "&&" << "(CODNUM==\"" << m.filters().row(i) << "\")";
|
|
|
|
TRelation relation(LF_DOC);
|
|
TSorted_cursor cursor(&relation, "DATADOC", filter);
|
|
|
|
TCodice_numerazione c(m.filters().row(i));
|
|
|
|
if (!c.dont_test_datadoc())
|
|
m.ordered().set(i);
|
|
|
|
const int items = cursor.items();
|
|
|
|
if (m.flags().items()>i)
|
|
((TBit_array&) m.flags()[i]).reset();
|
|
else
|
|
m.flags().add(new TBit_array(366),i);
|
|
|
|
TBit_array & fl = (TBit_array&) m.flags()[i];
|
|
TDate caput_anni(1, 1, _year);
|
|
for (cursor = 0; cursor.pos() < items; ++cursor)
|
|
fl.set(relation.lfile().get_date(DOC_DATADOC) - caput_anni, 1);
|
|
caput_anni += fl.last_one();
|
|
m.almanac(i).set_insert_date(m.ordered()[i] ? caput_anni : botime);
|
|
}
|
|
}
|
|
|
|
// 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_QUIT);
|
|
}
|
|
|
|
// Chiamate dalla maschera
|
|
|
|
void TImmissioneDocumenti_app::change_year(int newyear, bool init_flg)
|
|
{
|
|
_year = newyear;
|
|
if (init_flg)
|
|
init_flags();
|
|
}
|
|
|
|
bool TImmissioneDocumenti_app::has_documents(int currpage, TDate& day)
|
|
{
|
|
const TDate caput_anni(1, 1, _year);
|
|
return (((TBit_array&) _mask->flags()[currpage])[day - caput_anni]);
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////
|
|
// TImmissioneDocumenti_mask
|
|
///////////////////////////////////////////////////////////
|
|
|
|
// Routines Proprietarie
|
|
|
|
void TImmissioneDocumenti_mask::open_day_mask(TDate date)
|
|
{
|
|
if (!date.ok())
|
|
date = curr_almanac().selected_date();
|
|
const int currpage = curr_page();
|
|
|
|
const TString & codnum = filters().row(currpage);
|
|
TString filter;
|
|
filter << "(ANSI(DATADOC)==\"" << date.string(ANSI) << "\")" << "&&" << "(CODNUM==\"" << codnum << "\")";
|
|
|
|
TRelation relation(LF_DOC);
|
|
relation.add(LF_CLIFO, "TIPOCF==TIPOCF|CODCF==CODCF");
|
|
|
|
TCursor cursor(&relation, filter);
|
|
if (!almanac().can_insert(date) && is_date_void(currpage, date))
|
|
return;
|
|
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"),
|
|
almanac().can_insert(date) ? 0x02|0x04 : 0x04, 3);
|
|
|
|
TList_field& fl = sheet.add_list(101, 0, "Tipo documento ", 1, 1, 60);
|
|
TToken_string codes;
|
|
TToken_string values;
|
|
|
|
|
|
TCodice_numerazione c(codnum);
|
|
const int items = c.ntipi_doc();
|
|
|
|
for (int i = 0; i < items; i++)
|
|
{
|
|
const TString16 codtipo(c.tipo_doc(i));
|
|
const TTipo_documento t(codtipo);
|
|
|
|
codes.add(codtipo);
|
|
|
|
TString80 str;
|
|
str << codtipo << " - " << t.descrizione();
|
|
values.add(str);
|
|
}
|
|
fl.replace_items(codes, values);
|
|
fl.enable(items > 1);
|
|
|
|
KEY exitval = sheet.run();
|
|
|
|
switch(exitval)
|
|
{
|
|
case K_ENTER:
|
|
call_ve0(exitval, relation, date, codnum, EMPTY_STRING, currpage);
|
|
break;
|
|
case K_DEL:
|
|
call_ve0(exitval, relation, date, codnum);
|
|
break;
|
|
case K_INS:
|
|
{
|
|
const TString16 tipo(sheet.get(101));
|
|
|
|
call_ve0(exitval, relation, date, codnum, tipo, currpage);
|
|
}
|
|
break;
|
|
case K_ESC:
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
TDate caput_anni(1, 1, date.year());
|
|
TBit_array & dayfl = (TBit_array&) flags()[currpage];
|
|
dayfl.reset();
|
|
|
|
filter.cut(0);
|
|
filter << "(ANNO==\"" << date.year() << "\")" << "&&" << "(CODNUM==\"" << filters().row(currpage) << "\")";
|
|
|
|
cursor.setfilter(filter);
|
|
|
|
const int doc_items = cursor.items();
|
|
|
|
for (cursor = 0; cursor.pos() < doc_items; ++cursor)
|
|
dayfl.set(relation.lfile().get_date(DOC_DATADOC) - caput_anni, 1);
|
|
if (ordered()[currpage])
|
|
{
|
|
caput_anni += dayfl.last_one();
|
|
almanac(currpage).set_insert_date(caput_anni);
|
|
}
|
|
almanac().force_update();
|
|
}
|
|
|
|
void TImmissioneDocumenti_mask::call_ve0(int exitval, TRelation& relation, TDate& date, const TString& codnum, const TString& doctype, byte currpage)
|
|
{
|
|
TFilename tempfile;
|
|
tempfile.tempdir();
|
|
tempfile.add("ci.ini");
|
|
|
|
{
|
|
TConfig configfile(tempfile);
|
|
|
|
switch(exitval)
|
|
{
|
|
case K_ENTER:
|
|
configfile.set("Action", "Modify", "Transaction");
|
|
if (_modify[currpage])
|
|
configfile.set("Mode", "R", "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");
|
|
if (_insert[currpage])
|
|
configfile.set("Mode", "R", "Transaction");
|
|
configfile.set("DATADOC", date.string(), "33");
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
configfile.set(DOC_PROVV, "D", "33");
|
|
configfile.set(DOC_ANNO, date.year(), "33");
|
|
configfile.set(DOC_CODNUM, codnum, "33");
|
|
configfile.set(DOC_TIPODOC, 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));
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////
|
|
// Main
|
|
///////////////////////////////////////////////////////////
|
|
|
|
int ci0400(int argc, char* argv[])
|
|
{
|
|
TImmissioneDocumenti_app a ;
|
|
a.run(argc, argv, TR("Immissione Documenti"));
|
|
return 0;
|
|
}
|