Corretta gestione data chiusura esercizio.

Ora questa viene aggiornata dal programma di chiusura/apertura e la prima nota avverte che è sconsigliabile inserire movimenti prima della chiusura

git-svn-id: svn://10.65.10.50/branches/R_10_00@22675 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2012-06-18 14:10:20 +00:00
parent 8a6dccdde8
commit ac5b4f39bc
6 changed files with 106 additions and 23 deletions

View File

@ -2235,21 +2235,28 @@ bool TPrimanota_application::caus_modify_handler(TMask_field& f, KEY key)
bool TPrimanota_application::datareg_handler(TMask_field& f, KEY key)
{
bool ok = true;
TMask& m = f.mask();
//if ((key == K_TAB && m.is_running() ) || key == K_ENTER)
if (key == K_TAB && f.focusdirty() || key == K_ENTER)
{
const TDate dr(f.get()); // Data dell'operazione
if (dr > TDate(TODAY))
{
const TDate oggi(TODAY);
TDate dr(f.get()); // Data dell'operazione
if (dr > oggi)
return f.error_box(TR("La data dell'operazione e' superiore quella di sistema"));
TMask& m = f.mask();
if (dr == oggi && m.query_mode() && !m.field(F_NUMREG).empty())
{
TLocalisamfile mov(LF_MOV);
mov.put(MOV_NUMREG, m.get(F_NUMREG));
if (mov.read() == NOERR)
dr = mov.get_date(MOV_DATAREG);
}
TPrimanota_application& a = app();
const int ae = a._esercizi.date2esc(dr); // Codice esercizio
if (ae <= 0)
return f.error_box(TR("La data dell'operazione non appartiene a nessun esercizio"));
TLibro_giornale& gio = a.giornale();
const int ar = dr.year(); // Anno per registri
if (m.query_mode() || gio.year() != ar)
@ -2270,15 +2277,24 @@ bool TPrimanota_application::datareg_handler(TMask_field& f, KEY key)
{
if (dr < gio.last_print())
{
f.error_box(FR("La data dell'operazione e' antecedente al %s,\n"
f.error_box(FR("La data dell'operazione è antecedente al %s,\n"
"ultima stampa del libro giornale del %d"),
gio.last_print().string(), ar);
if (error) return false;
}
if (key == K_TAB && dr < gio.last_reg())
f.warning_box(FR("La data dell'operazione e' antecedente al %s,\n"
f.warning_box(FR("La data dell'operazione è antecedente al %s,\n"
"ultima registrazione sul libro giornale del %d"),
gio.last_reg().string(), ar);
const TDate chiusura = a._esercizi[ae].chiusura();
if (chiusura.ok() && dr <= chiusura)
{
f.error_box(FR("La data dell'operazione è antecedente al %s,\n"
"data di chiusura dell'esercizio %d"),
chiusura.stringa(), ae);
if (error) return false;
}
}
if (m.query_mode())
@ -2367,7 +2383,7 @@ bool TPrimanota_application::datacomp_handler(TMask_field& f, KEY key)
}
}
if (ae)
if (ae > 0)
{
const int ar = esc.date2esc(dr); // Esercizio in corso
const int pr = esc.pred(ar); // Esercizio precedente
@ -2378,6 +2394,15 @@ bool TPrimanota_application::datacomp_handler(TMask_field& f, KEY key)
if (pr > 0) e << TR(" o all'esercizio ") << pr;
return f.error_box(e);
}
const TDate chiusura = app()._esercizi[ae].chiusura();
if (chiusura.ok() && dc <= chiusura)
{
return f.error_box(FR("%s è antecedente al %s,\n"
"data di chiusura dell'esercizio %d"),
data, chiusura.stringa(), ae);
}
}
else
{

View File

@ -1,6 +1,6 @@
#include "cg4300b.h"
PAGE "Estrazione deleghe" -1 -1 45 10
PAGE "Estrazione deleghe" -1 -1 45 8
NUMBER FLD_CGB_YEAR 4
BEGIN
@ -29,7 +29,7 @@ END
BUTTON DLG_SELECT 10 2
BEGIN
PROMPT -12 5 "Scegli"
PROMPT -12 5 "Ditte"
HELP "Selezionare le ditte di cui estrarre le deleghe"
MESSAGE EXIT,DLG_SELECT
END
@ -41,15 +41,11 @@ BEGIN
MESSAGE EXIT,BUT_CGB_ALL
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
ENDPAGE
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -22 -1 ""
END
TOOLBAR "topbar" 0 0 0 2
#include "elabar.h"
ENDPAGE

View File

@ -33,7 +33,7 @@ bool TLiquidazione_app::set_deleghe()
for (;;)
{
if (k == K_ESC || k == K_ENTER)
if (k == K_ESC || k == K_QUIT || k == K_ENTER)
break;
k = m.run();

View File

@ -577,6 +577,15 @@ bool TApertura_chiusura::set()
apri_conti_ordine();
apertura_capitale_netto();
// Aggiorna data di chiusura su tabella esercizi: novità 2012
TTable esc("ESC");
esc.put("CODTAB", _annoesch);
if (esc.read(_lock) == NOERR)
{
esc.put("D3", _dataregch);
esc.rewrite();
}
delete _prog;
message_box(TR("Apertura/chiusura conti completata"));
} //K_ENTER

View File

@ -6,11 +6,14 @@
#include <mask.h>
#include <tabutil.h>
#include <recarray.h>
#include <recset.h>
#include <relation.h>
#include <clifo.h>
#include <comuni.h>
#include <mov.h>
#include <pconti.h>
#include <causali.h>
#include <rcausali.h>
#include <rmoviva.h>
#include <rmov.h>
@ -43,6 +46,56 @@ int TEsercizio::compare(const TSortable& s) const
return c;
}
const TDate& TEsercizio::chiusura() const
{
if (!_chiusura.ok() && fine() < TDate(TODAY))
{
TAssoc_array chiusure; // Lista delle causali di chiusura (solitamente una!)
TISAM_recordset caus("USE CAUS SELECT MOVAP='C'");
for (bool ok = caus.move_first(); ok; ok = caus.move_next())
{
const TString& codcaus = caus.get(CAU_CODCAUS).as_string();
chiusure.add(codcaus, codcaus);
}
const TDate presto = fine(); // Prima data utile per chiusura esercizio
TDate tardi = presto; tardi.addyear(); // Ultima data utile per chiusura esercizio
TString query;
query = "USE MOV KEY 2";
if (chiusure.items() == 1)
{
const TString& codcaus = *(TString*)chiusure.first_item();
query << " SELECT CODCAUS='" << codcaus << '\'';
}
query << "\nFROM DATAREG=#PRESTO\nTO DATAREG=#TARDI";
TISAM_recordset mov(query);
mov.set_var("#PRESTO", presto);
mov.set_var("#TARDI", tardi);
for (bool ok = mov.move_first(); ok; ok = mov.move_next())
{
const TString& codcaus = mov.get(MOV_CODCAUS).as_string();
if (chiusure.is_key(codcaus))
{
const TDate datacomp = mov.get(MOV_DATACOMP).as_date();
if (datacomp <= presto)
{
((TDate&)_chiusura) = datacomp; // Forzatura
TTable esc("ESC");
esc.put("CODTAB", codice());
if (esc.read(_lock) == NOERR)
{
esc.put("D3", datacomp);
esc.rewrite();
}
}
break;
}
}
}
return _chiusura;
}
TEsercizi_contabili::TEsercizi_contabili()
{ }

View File

@ -20,7 +20,7 @@ public:
const TDate& inizio() const { return _inizio; }
const TDate& fine() const { return _fine; }
const TDate& scarico() const { return _scarico; }
const TDate& chiusura() const { return _chiusura; }
const TDate& chiusura() const;
const TDate& chiusura_mag() const { return _chiusura_mag; }
TEsercizio(const TRectype& rec);