Migliorata gestione fattura P.A.:

flag di fattura temporanea (no P.A.)
corretto calcolo rate in split payment

git-svn-id: svn://10.65.10.50/branches/R_10_00@23099 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2015-05-20 10:03:15 +00:00
parent d40707a134
commit 5618a1b489
5 changed files with 102 additions and 47 deletions

View File

@ -1,24 +1,19 @@
#include <applicat.h> #include <applicat.h>
#include <doc.h>
#include <mask.h>
#include <postman.h> #include <postman.h>
#include <progind.h> #include <progind.h>
#include <relation.h>
#include "ve5200.h" #include "ve5200.h"
#include "velib.h" #include "velib04.h"
class TStatus_mask : public TMask class TStatus_mask : public TMask
{ {
public: public:
TStatus_mask() : TMask("ve5200") { } TStatus_mask() : TMask("ve5200") { }
virtual ~TStatus_mask() { }
}; };
class TStatus_change : public TSkeleton_application class TStatus_change : public TSkeleton_application
{ {
virtual const char* extra_modules() const { return "dt"; } virtual const char* extra_modules() const { return "dt"; }
protected: // TSkeleton_application protected: // TSkeleton_application
@ -26,8 +21,7 @@ protected: // TSkeleton_application
virtual bool create(); virtual bool create();
public: public:
TStatus_change() { } void do_elab( TDocumento& doc);
virtual ~TStatus_change() { }
}; };
bool TStatus_change::create() bool TStatus_change::create()
@ -38,6 +32,56 @@ bool TStatus_change::create()
return TSkeleton_application::create(); return TSkeleton_application::create();
} }
void TStatus_change::do_elab(TDocumento& doc) // C 90
{
TElaborazione * el = NULL;
const TString16 codelab = doc.tipo().elaborazione();
if (codelab.full())
{
const TRectype& eld = cache().get("%ELD", codelab);
if (!eld.empty())
{
switch (eld.get_int("I0"))
{
case _esterna :
el = new TElaborazione_esterna(eld);
break;
case _consegna_ordini:
el = new TConsegna_ordini(eld);
break;
case _fatturazione_bolle :
el = new TFatturazione_bolle(eld);
break;
case _contabilizzazione :
el = new TContabilizzazione(eld);
break;
case _copia_documento :
el = new TCopia_documento(eld);
break;
case _generazione_effetti :
el = new TGenerazione_effetti(eld);
break;
case _consuntivazione_produzione :
el = new TConsuntivazione_produzione(eld);
break;
case _contabilizzazione_analitica :
el = new TContabilizzazione_analitica(eld);
break;
default :
break;
}
}
}
if (el != NULL && el->is_document_ok(doc))
{
TLista_documenti in; in.add(doc);
TLista_documenti out;
el->elabora(in, out, TDate(TODAY), false);
}
}
void TStatus_change::main_loop() void TStatus_change::main_loop()
{ {
TStatus_mask m; TStatus_mask m;
@ -59,32 +103,35 @@ void TStatus_change::main_loop()
const long total = cur.items(); const long total = cur.items();
if (total > 0) if (total > 0)
{ {
TString msg = "Confermare l'aggiornamento di "; TString msg = TR("Confermare l'aggiornamento di ");
msg.add_plural(total, "documento"); msg.add_plural(total, TR("documento"));
if (yesno_box(msg)) if (yesno_box(msg))
{ {
TProgind pi(total, "Elaborazione in corso...", TRUE, TRUE, 60); TProgress_monitor pi(total, name());
const TString& finale = m.get(F_FINALE); const TString& finale = m.get(F_FINALE);
TDocumento* doc = new TDocumento; TDocumento* doc = new TDocumento;
rel.lfile().set_curr(doc); rel.lfile().set_curr(doc);
cur.freeze(); cur.freeze();
for (cur = 0; cur.pos() < total && !pi.iscancelled(); ++cur) for (cur = 0; cur.pos() < total; ++cur)
{ {
pi.addstatus(1); if (!pi.add_status())
break;
doc->put(DOC_STATO, finale); doc->put(DOC_STATO, finale);
doc->rewrite(); int err = doc->rewrite();
if (err == NOERR)
do_elab(*doc);
// Invia anche la transazione se necessario // Invia anche la transazione se necessario
if (::can_dispatch_transaction(*doc)) if (err = NOERR && ::can_dispatch_transaction(*doc))
{ {
TFilename tmpname; tmpname.temp(); TFilename tmpname; tmpname.tempdir(); tmpname.add("ve5trans.ini");
{ // Parentesi strategiche { // Parentesi strategiche
TConfig ini(tmpname, "Transaction"); TConfig ini(tmpname, "Transaction");
ini.set("Action", "MODIFY"); ini.set("Action", "MODIFY");
ini.set("Firm", get_firm()); ini.set("Firm", get_firm());
ini.set("Mode", "A"); ini.set("Mode", "A");
TString8 paradoc; paradoc.format("%d", LF_DOC); ini.set_paragraph("33");
ini.set_paragraph(paradoc);
ini.set(DOC_PROVV, doc->get(DOC_PROVV)); ini.set(DOC_PROVV, doc->get(DOC_PROVV));
ini.set(DOC_ANNO, doc->get(DOC_ANNO)); ini.set(DOC_ANNO, doc->get(DOC_ANNO));
ini.set(DOC_CODNUM, doc->get(DOC_CODNUM)); ini.set(DOC_CODNUM, doc->get(DOC_CODNUM));
@ -92,7 +139,7 @@ void TStatus_change::main_loop()
ini.set(DOC_STATO, finale); ini.set(DOC_STATO, finale);
} }
::dispatch_transaction(*doc, tmpname); ::dispatch_transaction(*doc, tmpname);
::remove(tmpname); xvt_fsys_remove_file(tmpname);
} }
} }

View File

@ -479,20 +479,19 @@ int TElaborazione::read(const char* cod)
bool TElaborazione::is_document_ok(const TRectype& doc) const bool TElaborazione::is_document_ok(const TRectype& doc) const
{ {
bool ok = false; bool ok = false;
const TString4 codnum(doc.get(DOC_CODNUM)); const TString4 codnum = doc.get(DOC_CODNUM);
const TString4 tipodoc(doc.get(DOC_TIPODOC));
const char stato(doc.get_char(DOC_STATO));
const TString& codnumel = codice_numerazione_iniziale(); const TString& codnumel = codice_numerazione_iniziale();
if (codnumel.blank() || codnum == codnumel) if (codnumel.blank() || codnum == codnumel)
{ {
const TString4 tipodoc = doc.get(DOC_TIPODOC);
const char stato = doc.get_char(DOC_STATO);
for (int i = 0; !ok && i < TElaborazione::_max_tipi_doc_elab; i++) for (int i = 0; !ok && i < TElaborazione::_max_tipi_doc_elab; i++)
{ {
const TString& tipel = tipo_iniziale(i); const TString& tipel = tipo_iniziale(i);
if (tipel.blank()) if (tipel.blank())
break; break;
if (tipodoc == tipel && stato == stato_iniziale(i)) const char stael = stato_iniziale(i);
ok = true; ok = tipodoc == tipel && stato == stael;
} }
} }
return ok; return ok;

View File

@ -143,9 +143,12 @@ void TDocumentoEsteso::scadenze_recalc()
real totimposte = imposta(TRUE); real totimposte = imposta(TRUE);
real pagato = hh.get_real(DOC_IMPPAGATO); real pagato = hh.get_real(DOC_IMPPAGATO);
const bool saldo = hh.get_bool(DOC_ACCSALDO); const bool saldo = hh.get_bool(DOC_ACCSALDO);
real totimponibili = totale_doc() - ritenute() - totimposte - totspese;//tot_documento() - totimposte - totspese; real totimponibili = totale_doc() - ritenute() - totimposte - totspese;
const bool is_in_valuta = in_valuta(); const bool is_in_valuta = in_valuta();
if (is_split_payment())
totimposte = ZERO;
if (saldo || pagato > totale_doc()) if (saldo || pagato > totale_doc())
{ {
totimponibili = ZERO; totimponibili = ZERO;

View File

@ -84,3 +84,4 @@
#define F_ARCHIVE 275 #define F_ARCHIVE 275
#define F_SPMSP 276 #define F_SPMSP 276
#define F_REVLEN 277 #define F_REVLEN 277
#define F_NOPA 278

View File

@ -130,7 +130,7 @@ END
BOOLEAN F_SAVEANDNEW BOOLEAN F_SAVEANDNEW
BEGIN BEGIN
PROMPT 2 15 "Rimani in inserimento dopo la registrazione" PROMPT 2 15 "Rimanere in inserimento dopo la registrazione"
FIELD B4 FIELD B4
END END
@ -182,20 +182,25 @@ PAGE "Tipi documento validi" -1 -1 60 14
PROMPT 2 2 "Tipo dei documenti " PROMPT 2 2 "Tipo dei documenti "
FIELD I1 FIELD I1
ITEM "|Altro" ITEM "|Altro"
MESSAGE ENABLE,F_EMRI MESSAGE ENABLE,F_EMRI|HIDE,F_NOPA
ITEM "1|Bolla" ITEM "1|Bolla"
MESSAGE CLEAR,F_EMRI MESSAGE CLEAR,F_EMRI|HIDE,F_NOPA
ITEM "2|Fattura" ITEM "2|Fattura"
MESSAGE ENABLE,F_EMRI MESSAGE ENABLE,F_EMRI|SHOW,F_NOPA
ITEM "3|Ordine" ITEM "3|Ordine"
MESSAGE CLEAR,F_EMRI MESSAGE CLEAR,F_EMRI|HIDE,F_NOPA
ITEM "4|Scontrino" ITEM "4|Scontrino"
MESSAGE ENABLE,F_EMRI MESSAGE ENABLE,F_EMRI|HIDE,F_NOPA
ITEM "5|Conferimento soci" ITEM "5|Conferimento soci"
MESSAGE CLEAR,F_EMRI MESSAGE CLEAR,F_EMRI|HIDE,F_NOPA
ITEM "6|Prestazioni ai soci" ITEM "6|Prestazioni ai soci"
MESSAGE CLEAR,F_EMRI MESSAGE CLEAR,F_EMRI|HIDE,F_NOPA
END
BOOLEAN F_NOPA
BEGIN
PROMPT 2 3 "Fattura provvisioria (non valida per P.A.)"
FIELD B10
END END
STRING F_TIPODOC1 4 STRING F_TIPODOC1 4