Patch level : 10.0

Files correlati     : sc0
Ricompilazione Demo : [ ]
Commento            :
Nuovo pareggio partite


git-svn-id: svn://10.65.10.50/branches/R_10_00@22604 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2012-03-09 15:47:08 +00:00
parent 5f419a6247
commit dfcef6b5b5
12 changed files with 524 additions and 54 deletions

View File

@ -2,8 +2,14 @@
#include "sc0.h"
int main(int argc,char** argv)
int main(int argc, char** argv)
{
sc0100(argc,argv); // Per ora evito warning sullo switch vuoto
const int n = (argc > 1) ? (atoi(&argv[1][1])) : 0;
switch(n)
{
case 1: sc0200(argc,argv); break; // Gestione partite
case 2: sc0300(argc,argv); break; // Pareggio partite
default: sc0100(argc,argv); break; // Gestione classica
}
return 0;
}
}

View File

@ -1,2 +1,4 @@
int sc0100(int argc, char* argv[]);
int sc0200(int argc, char* argv[]);
int sc0300(int argc, char* argv[]);

View File

@ -149,7 +149,7 @@ void TSaldaconto_app::gioca_cambi(TMask& m, int force)
if ( (force == 0x1 || totale.is_zero()) && !(totval.is_zero() || cambio.is_zero()) )
{
const TValuta cam(m, E_VALUTA, E_DATACAMBIO, E_CAMBIO);
const real new_totale = cam.val2lit(totval);
const real new_totale = cam.val2eur(totval);
if (new_totale != totale)
m.set(E_TOTALE, new_totale, TRUE);
}
@ -157,7 +157,7 @@ void TSaldaconto_app::gioca_cambi(TMask& m, int force)
if ( (force == 0x2 || totval.is_zero()) && !(totale.is_zero() || cambio.is_zero()) )
{
const TValuta cam(m, E_VALUTA, E_DATACAMBIO, E_CAMBIO);
const real new_totval = cam.lit2val(totale);
const real new_totval = cam.eur2val(totale);
if (new_totval != totval)
m.set(E_TOTDOCVAL, new_totval, TRUE);
}

View File

@ -33,7 +33,7 @@ protected: // TApplication
virtual void on_config_change();
protected:
void edit_partite(const TMask& m);
virtual void edit_partite(const TMask& m);
void load_colors();
COLOR type2color(char tipor, char tipoc);

View File

@ -16,41 +16,6 @@
// Maschera gestione rate
///////////////////////////////////////////////////////////
class TFattura_mask : public TMask
{
TRiga_partite& _fattura;
TPagamento* _pag;
TString_array _pag_rows;
protected:
static bool clifo_handler(TMask_field& f, KEY key);
static bool datadoc_handler(TMask_field& f, KEY key);
static bool codpag_handler(TMask_field& f, KEY key);
static bool nrate_handler(TMask_field& f, KEY key);
static bool recalc_handler(TMask_field& f, KEY key);
static bool codcab_handler(TMask_field& f, KEY key);
static bool pag_notify(TSheet_field& ps, int r, KEY k);
static bool pag_handler(TMask_field& f, KEY key);
static bool reset_handler(TMask_field& f, KEY key);
static bool tipopag_handler(TMask_field& f, KEY key);
TPagamento& pagamento() const { return *_pag; }
TPagamento& set_pagamento(const char* cod, const char* dat);
TSheet_field& pag_sheet() const { return (TSheet_field&)field(FS_RATESHEET); }
void pag2sheet();
bool read_scadenze();
public:
void set_totale_pagamento(bool update);
void set_scadenze();
void write_scadenze() const;
real totale_rate(bool val) const;
TFattura_mask(TRiga_partite& fattura);
virtual ~TFattura_mask();
};
TFattura_mask::TFattura_mask(TRiga_partite& fattura)
: TMask("sc0100c"), _fattura(fattura), _pag(NULL)
@ -124,6 +89,9 @@ real TFattura_mask::totale_rate(bool val) const
return tot;
}
TSheet_field& TFattura_mask::pag_sheet() const
{ return sfield(FS_RATESHEET); }
void TFattura_mask::pag2sheet()
{
TPagamento& pag = pagamento();
@ -574,7 +542,7 @@ void TFattura_mask::set_totale_pagamento(bool update)
const TValuta cambio(*this, E_VALUTA, E_DATACAMBIO, E_CAMBIO);
if (cambio.in_valuta())
{
const real imposval = cambio.lit2val(imposta);
const real imposval = cambio.eur2val(imposta);
const real imponval = get_real(E_TOTDOCVAL) - imposval;
pag.set_total_valuta(imponval, imposval, spese, cambio.cambio(),
imponibile, imposta, spese, cambio.codice());
@ -1028,7 +996,7 @@ bool TSaldaconto_app::totale_handler(TMask_field& f, KEY k)
if (cambio.in_valuta())
{
const real totval(m.get(E_TOTDOCVAL));
const real totlit = cambio.val2lit(totval);
const real totlit = cambio.val2eur(totval);
if (totale != totlit)
ok = yesno_box(FR("Il totale documento in lire dovrebbe essere %s: continuare ugualmente?"),
totlit.string("."));

294
sc/sc0300.cpp Normal file
View File

@ -0,0 +1,294 @@
#include "sc0300a.h"
#include "../cg/cgsalda3.h"
#include <applicat.h>
#include <automask.h>
#include <recset.h>
#include <relation.h>
#include <treectrl.h>
class TPareggio_tree : public TObject_tree
{
protected:
virtual TFieldtypes get_var(const TString& name, TVariant& var) const;
virtual bool marked() const { return rand() % 2 != 0; }
public:
bool init(const TBill& bill, const TString& valuta, bool nc, int stato); // Stato- 1=aperte; 2=chiuse; 0 o 3 = tutte
};
TFieldtypes TPareggio_tree::get_var(const TString& name, TVariant& var) const
{
TFieldtypes ft = _nullfld;
const TObject* obj = curr_node();
if (obj != NULL)
{
if (obj->is_kind_of(CLASS_RECTYPE))
{
const TRectype& rec = *(const TRectype*)obj;
ft = rec.type(name);
if (ft != _nullfld)
{
if (ft == _realfld)
{
var = rec.get_real(name).stringa(0, 2);
ft = _alfafld;
}
else
var = rec.get(name);
}
else
{
if (name == PART_DATADOC)
{
if (rec.num() == LF_SCADENZE)
{
var = rec.get_date(SCAD_DATASCAD);
ft = _datefld;
}
} else
if (name == "RESIDUO")
{
TImporto saldo;
switch (rec.num())
{
case LF_SCADENZE:
if (!rec.get_bool(SCAD_PAGATA))
{
const TPartita game(rec);
const TRiga_scadenze& s = game.rata(rec.get_int(SCAD_NRIGA), rec.get_int(SCAD_NRATA));
saldo = s.residuo(true);
}
break;
case LF_PARTITE:
if (!rec.get_bool(PART_CHIUSA))
{
const TPartita game(rec);
saldo = game.calcola_saldo(true);
}
break;
default:
break;
}
var = saldo.valore().stringa(0, 2);
ft = _alfafld;
}
}
}
else
{
if (name == PART_NUMPART)
{
const real& year = *(real*)obj;
var = year.integer();
ft = _intfld;
}
}
}
return ft;
}
bool TPareggio_tree::init(const TBill& bill, const TString& valuta, bool nc, int stato)
{
goto_root();
kill_node();
TString filter;
if (bill.tipo() > ' ')
filter << PART_TIPOCF << '=' << bill.tipo();
else
{
filter << PART_GRUPPO << '=' << bill.gruppo() << ' ';
filter << PART_CONTO << '=' << bill.conto();
}
filter << ' ' << PART_SOTTOCONTO << '=' << bill.sottoconto();
TString query;
query << "USE PART SELECT (NRIGA<9999)&&(TIPOMOV<=" << (nc ? tm_nota_credito : tm_fattura) << ')'
<< "\nFROM " << filter << "\nTO " << filter;
TISAM_recordset games(query);
const TRectype& rec = games.cursor()->curr();
int last_year = 0;
TString80 id_year, id_rec;
for (bool ok = games.move_first(); ok; ok = games.move_next())
{
const TString& codval = rec.get(PART_CODVAL);
if (!same_values(codval, valuta))
continue;
const tipo_movimento tm = (tipo_movimento)rec.get_int(PART_TIPOMOV);
bool add_riga = true;
if (nc)
{
add_riga = !rec.get_bool(PART_CHIUSA);
// Se filtro le note di credito cerco di riconoscere le fatture negative
if (add_riga && tm == tm_fattura)
{
const char sezione_positiva = bill.tipo() == 'C' ? 'D' : 'A';
TImporto importo(rec.get_char(PART_SEZ), rec.get_real(PART_IMPORTO));
importo.normalize();
if (sezione_positiva == importo.sezione()) // Controlla se fattura positiva o negativa
add_riga = false; // Ignora fattura positiva
}
}
else
{
if (stato == 1 || stato == 2)
{
const bool chiusa = rec.get_bool(PART_CHIUSA);
if (chiusa)
add_riga = stato == 2;
else
add_riga = stato == 1;
}
}
if (!add_riga)
continue;
const int year = rec.get_int(PART_ANNO);
if (year != last_year)
{
goto_root();
while(goto_rbrother());
add_rbrother(real(year));
last_year = year;
curr_id(id_year);
id_rec.cut(0);
}
if (nc)
{
if (id_rec.full())
{
goto_node(id_rec);
add_rbrother(rec);
}
else
add_son(rec);
curr_id(id_rec);
}
else
{
TPartita game(rec);
const TRiga_partite& riga = game.riga(rec.get_int(PART_NRIGA));
for (int rata = 1; rata <= riga.rate(); rata++)
{
const TRiga_scadenze& s = riga.rata(rata);
bool add_rata = true;
if (stato == 1 || stato == 2)
{
const bool chiusa = s.get_bool(SCAD_PAGATA);
if (chiusa)
add_rata = stato == 2;
else
add_rata = stato == 1;
}
if (add_rata)
{
if (id_rec.full())
add_rbrother(s);
else
add_son(s);
curr_id(id_rec);
}
}
}
}
if (goto_node(id_year))
expand();
return goto_root();
}
///////////////////////////////////////////////////////////
// TPareggio_mask
///////////////////////////////////////////////////////////
class TPareggio_mask : public TAutomask
{
TPareggio_tree _nc, _ft;
private:
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TPareggio_mask();
};
bool TPareggio_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
//case F_SOTTOCONTO:
case F_CLIENTE:
case F_FORNITORE:
case F_CODVAL:
case F_TUTTE:
if (e == fe_modify)
{
TWait_cursor hourglass;
const short id = efield(F_FORNITORE).active() ? F_FORNITORE :
(efield(F_SOTTOCONTO).active() ? F_SOTTOCONTO : F_CLIENTE);
TBill bill; bill.get(*this, F_GRUPPO, F_CONTO, id, F_TIPO);
const int tipo = get_int(F_TUTTE);
const TString& codval = get(F_CODVAL);
_nc.init(bill, codval, true, 1); // Solo aperte
_ft.init(bill, codval, false, tipo);
tfield(F_NC_TREE).set_tree(&_nc);
tfield(F_FT_TREE).set_tree(&_ft);
}
break;
default: break;
}
return true;
}
TPareggio_mask::TPareggio_mask() : TAutomask("sc0300a")
{
RCT rct_nc; field(F_NC_TREE).get_rect(rct_nc);
RCT rct_ft; field(F_FT_TREE).get_rect(rct_ft);
rct_nc.right = rct_ft.left-8;
rct_ft.right = rct_ft.left + rct_nc.right - rct_nc.left;
field(F_NC_TREE).set_rect(rct_nc);
field(F_FT_TREE).set_rect(rct_ft);
}
///////////////////////////////////////////////////////////
// TPareggio_partite
///////////////////////////////////////////////////////////
class TPareggio_partite : public TSkeleton_application
{
protected:
virtual void main_loop();
public:
};
void TPareggio_partite::main_loop()
{
TPareggio_mask pm;
pm.run();
}
///////////////////////////////////////////////////////////
// Main
///////////////////////////////////////////////////////////
int sc0300(int argc, char* argv[])
{
TPareggio_partite pp;
pp.run(argc, argv, TR("Pareggio Partite"));
return 0;
}

4
sc/sc0300a.h Normal file
View File

@ -0,0 +1,4 @@
#include "sc0200b.h"
#define F_NC_TREE 121
#define F_FT_TREE 122

194
sc/sc0300a.uml Normal file
View File

@ -0,0 +1,194 @@
#include "sc0300a.h"
TOOLBAR "" 0 0 0 2
BUTTON DLG_EDIT 2 2
BEGIN
PROMPT 1 1 "Modifica"
PICTURE TOOL_EDIT
END
BUTTON DLG_NEWREC 2 2
BEGIN
PROMPT 2 1 "Nuovo"
PICTURE TOOL_NEWREC
END
#include <helpbar.h>
ENDPAGE
PAGE "Pareggio Partite" 0 0 0 0
LIST F_TIPO 1 10
BEGIN
PROMPT 1 0 "Tipo conto "
// ITEM "|Conto" MESSAGE SHOW,1@|HIDE,2@|HIDE,3@
ITEM "C|Cliente" MESSAGE HIDE,1@|SHOW,2@|HIDE,3@
ITEM "F|Fornitore" MESSAGE HIDE,1@|HIDE,2@|SHOW,3@
END
NUMBER F_GRUPPO 3
BEGIN
PROMPT 28 0 "Gruppo "
FLAGS "D"
END
NUMBER F_CONTO 3
BEGIN
PROMPT 43 0 "Conto "
FLAGS "D"
END
NUMBER F_SOTTOCONTO 6
BEGIN
PROMPT 58 0 "Sottoconto "
USE LF_PCON SELECT SOTTOCONTO!=""
INPUT GRUPPO F_GRUPPO
INPUT CONTO F_CONTO
INPUT SOTTOCONTO F_SOTTOCONTO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Descrizione@50" DESCR
OUTPUT F_GRUPPO GRUPPO
OUTPUT F_CONTO CONTO
OUTPUT F_SOTTOCONTO SOTTOCONTO
OUTPUT F_DESCR DESCR
GROUP 1
CHECKTYPE REQUIRED
END
NUMBER F_CLIENTE 6
BEGIN
PROMPT 58 0 "Cliente "
USE LF_CLIFO SELECT (LF_PARTITE->SOTTOCONTO!="")
JOIN LF_PARTITE INTO TIPOC=TIPOCF SOTTOCONTO==CODCF
INPUT TIPOCF "C"
INPUT CODCF F_CLIENTE
DISPLAY "Cliente" CODCF
DISPLAY "Descrizione@50" RAGSOC
DISPLAY "Partita IVA" PAIV
DISPLAY "Codice Fiscale" COFI
DISPLAY "Sosp." SOSPESO
DISPLAY "Ric.Alt.@30" RICALT
OUTPUT F_CLIENTE CODCF
OUTPUT F_DESCRCLI RAGSOC
ADD RUN cg0 -1 C
GROUP 2
CHECKTYPE REQUIRED
END
NUMBER F_FORNITORE 6
BEGIN
PROMPT 58 0 "Fornitore "
USE LF_CLIFO SELECT (LF_PARTITE->SOTTOCONTO!="")
JOIN LF_PARTITE INTO TIPOC=TIPOCF SOTTOCONTO==CODCF
INPUT TIPOCF "F"
INPUT CODCF F_FORNITORE
DISPLAY "Fornitore" CODCF
DISPLAY "Descrizione@50" RAGSOC
DISPLAY "Partita IVA" PAIV
DISPLAY "Codice Fiscale" COFI
DISPLAY "Sosp." SOSPESO
DISPLAY "Ric.Alt.@30" RICALT
OUTPUT F_FORNITORE CODCF
OUTPUT F_DESCRFOR RAGSOC
ADD RUN cg0 -1 F
GROUP 3
CHECKTYPE REQUIRED
END
STRING F_DESCR 50 58
BEGIN
PROMPT 1 1 "Descrizione "
GROUP 1
CHECKTYPE NORMAL
END
STRING F_DESCRCLI 50 58
BEGIN
PROMPT 1 1 "Ragione sociale "
USE LF_CLIFO KEY 2 SELECT (LF_PARTITE->SOTTOCONTO!="")
JOIN LF_PARTITE INTO TIPOC="C" SOTTOCONTO==CODCF
INPUT TIPOCF "C"
INPUT RAGSOC F_DESCRCLI
DISPLAY "Ragione Sociale@50" RAGSOC
DISPLAY "Cliente" CODCF
DISPLAY "Partita IVA" PAIV
DISPLAY "Codice Fiscale" COFI
DISPLAY "Sosp." SOSPESO
DISPLAY "Ric.Alt.@30" RICALT
OUTPUT F_CLIENTE CODCF
OUTPUT F_DESCRCLI RAGSOC
CHECKTYPE NORMAL
ADD RUN cg0 -1 F
GROUP 2
END
STRING F_DESCRFOR 50 58
BEGIN
PROMPT 1 1 "Ragione sociale "
USE LF_CLIFO KEY 2 SELECT (LF_PARTITE->SOTTOCONTO!="")
JOIN LF_PARTITE INTO TIPOC=TIPOCF SOTTOCONTO==CODCF
INPUT TIPOCF "F"
INPUT RAGSOC F_DESCRFOR
DISPLAY "Ragione Sociale@50" RAGSOC
DISPLAY "Fornitore" CODCF
DISPLAY "Partita IVA" PAIV
DISPLAY "Codice Fiscale" COFI
DISPLAY "Sosp." SOSPESO
DISPLAY "Ric.Alt.@30" RICALT
OUTPUT F_FORNITORE CODCF
OUTPUT F_DESCRFOR RAGSOC
CHECKTYPE NORMAL
ADD RUN cg0 -1 F
GROUP 3
END
RADIOBUTTON F_TUTTE 1 38
BEGIN
PROMPT 1 2 "Mostra fatture"
ITEM "1|Aperte"
ITEM "2|Chiuse"
ITEM "3|Tutte"
FLAGS "Z"
END
STRING F_CODVAL 3
BEGIN
PROMPT 61 3 "Valuta "
USE %VAL
INPUT CODTAB F_CODVAL
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_CODVAL CODTAB
FLAGS "U"
CHECKTYPE NORMAL
END
TLIST F_NC_TREE 35 -1
BEGIN
PROMPT 0 5 ""
DISPLAY "Partita@12" NUMPART
DISPLAY "Riga@4R" NRIGA
DISPLAY "Importo@10R" IMPORTO
DISPLAY "Residuo@10R" RESIDUO
DISPLAY "Descrizione Nota di Credito@35" DESCR
DISPLAY "P.N.@6R" NREG
END
TLIST F_FT_TREE 35 -1
BEGIN
PROMPT 40 5 ""
DISPLAY "Partita@12" NUMPART
DISPLAY "Riga@4R" NRIGA
DISPLAY "Rata@4R" NRATA
DISPLAY "Data@8" DATADOC
DISPLAY "Importo@10R" IMPORTO
DISPLAY "Residuo@10R" RESIDUO
DISPLAY "Descrizione Fattura@35" DESCR
DISPLAY "P.N.@6R" NREG
END
ENDMASK

View File

@ -455,18 +455,20 @@ TImporto TEC_array::importo(const TPartita& game, const TRectype& pag, bool valu
const TImporto ritsoc(sum.sezione_ritsoc(), pag.get_real(PAGSCA_RITSOC));
imp += ritsoc;
}
if (pag.get_char(PAGSCA_ACCSAL) == 'S') // Se il pagamento ha abbuoni o differenze cambio
const real diffcam = pag.get_real(PAGSCA_DIFFCAM); // Sempre in Euro
real abb(pag.get(PAGSCA_ABBUONI)); // Nella valuta della fattura
if (!abb.is_zero() || !diffcam.is_zero())// Se il pagamento ha abbuoni o differenze cambio
{
real abb(pag.get(PAGSCA_ABBUONI));
if (!valuta && fat_val) // Se voglio gli abbuoni in Euro ma la fattura non lo e'
{
const TValuta val(sum); // Leggo il cambio dalla riga di partita
val.val2lit(abb); // Converto in lire gli abbuoni
abb += pag.get_real(PAGSCA_DIFFCAM); // Sommo l'eventuale differenza cambio (gia' in Euro)
val.val2eur(abb); // Converto in Euro gli abbuoni
abb += diffcam; // Sommo l'eventuale differenza cambio (gia' in Euro)
}
imp.valore() += abb; // Sommo il tutto all'importo base (sez e' uguale per tutti i valori)
}
return imp;
}

View File

@ -306,7 +306,7 @@ TImporto TESSL_array::importo(const TPartita& game, const TRectype& pag, bool va
if (!valuta && fat_val) // Se voglio gli abbuoni in lire ma la fattura non lo e'
{
const TValuta val(sum); // Leggo il cambio dalla riga di partita
val.val2lit(abb); // Converto in lire gli abbuoni
val.val2eur(abb); // Converto in lire gli abbuoni
abb += pag.get_real(PAGSCA_DIFFCAM); // Sommo l'eventuale differenza cambio (gia' in lire)
}
imp.valore() += abb; // Sommo il tutto all'importo base (sez e' uguale per tutti i valori)

View File

@ -1,4 +1,4 @@
#define F_CODEL 501
#define F_DESL 502
#define DLG_COPY 601

View File

@ -3,21 +3,21 @@
TOOLBAR "Toolbar" 0 0 0 2
BUTTON DLG_OK 10 2
BUTTON DLG_OK 2 2
BEGIN
PROMPT 1 1 ""
END
BUTTON DLG_DELREC 10 2
BUTTON DLG_DELREC 2 2
BEGIN
PROMPT 2 1 ""
MESSAGE EXIT,K_DEL
END
BUTTON DLG_COPY 10 2
BUTTON DLG_COPY 2 2
BEGIN
PROMPT 3 1 "C~opia..."
PICTURE 180
PICTURE TOOL_COPY
END
#include <helpbar.h>