Aggiunta valuta intra in prima nota

Resa selezionabile la descrizione aggiuntiva nelle causali
Riveduta la gestione vendite nei clifo


git-svn-id: svn://10.65.10.50/trunk@663 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 1994-11-18 16:48:53 +00:00
parent 3025e549ed
commit 0d1752b7f2
15 changed files with 410 additions and 299 deletions

View File

@ -1,11 +1,10 @@
#include <relapp.h>
#include <modaut.h>
#include <utility.h>
#include <validate.h>
#include <msksheet.h>
#include <sheet.h>
#include <config.h>
#include <defmask.h>
#include <relapp.h>
#include <msksheet.h>
#include <sheet.h>
#include <utility.h>
#include <validate.h>
#include <pconti.h>
#include <clifo.h>
@ -19,11 +18,10 @@
#include "cg0200.h"
#include "cg0201.h"
class TClifo_application : public TRelation_application
{
TMask* _msk;
TClifoVI *_rel;
TClifoVI* _rel;
TLocalisamfile* _mov;
TLocalisamfile* _anag;
TLocalisamfile* _fis;
@ -73,7 +71,7 @@ bool TClifo_application::protected_record(TRectype &rec)
{
TMask* m = get_mask(MODE_MOD);
const TString16 tipocf(m->get(F_TIPOCF));
const TString16 tipocf(m->get(F_TIPOCF));
const long codice = atol(m->get(F_CODCF));
_mov->curr().zero();
@ -224,7 +222,6 @@ HIDDEN bool autoexit_handler(TMask_field& f, KEY key)
}
bool TClifo_application::tipo_handler(TMask_field& f, KEY key)
{
TMask& m = f.mask();
@ -358,20 +355,15 @@ void TClifo_application::init_pages(TMask& m)
TConfig conf(CONFIG_DITTA, "cg");
_lbcn = conf.get_bool("GsLbCn");
_gesven = conf.get_bool("GesVen");
_rel->gestione_vendite(_gesven);
m.send_key(K_SHIFT + K_CTRL + (_lbcn ? 's' : 'h'), -5);
// Se non e' abilitata la gestione delle vendite disabilita le
// maschere dalla 4 in poi
if (_gesven)
{
for (int j=3; j<8;j++)
m.enable_page(j);
}
else
{
for (int j=3; j<8;j++)
m.disable_page(j);
}
for (int j = 3; j < 8;j++)
m.enable_page(j, _gesven);
}
void TClifo_application::init_query_mode(TMask& m)
@ -387,60 +379,63 @@ void TClifo_application::init_query_mode(TMask& m)
int TClifo_application::read(TMask& m)
{
TToken_string riga(240);
m.autoload(_rel);
indsp_sheet().reset();
for (int i=0; i< _rel->indirizzi_items();i++)
TRelation_application::read(m);
if (_gesven)
{
TRectype& rec=_rel->indirizzo(i);
riga.cut(0);
riga.add(rec.get(IND_RAGSOC));
riga.add(rec.get(IND_INDIR));
riga.add(rec.get(IND_CIV));
riga.add(rec.get(IND_LOCALITA));
riga.add(rec.get(IND_CAP));
riga.add(rec.get(IND_STATO));
riga.add(rec.get(IND_COM));
riga.add(rec.get(IND_PTEL));
riga.add(rec.get(IND_TEL));
riga.add(rec.get(IND_PFAX));
riga.add(rec.get(IND_FAX));
riga.add(rec.get(IND_IVARID));
riga.add(rec.get(IND_CODIND));
indsp_sheet().row(i)=riga;
// Load the sheets of CODINDDOC, CODINDSP, CODINDEFF.
riga.cut(0);
riga.add(rec.get(IND_CODIND));
riga.add(rec.get(IND_RAGSOC));
riga.add(rec.get(IND_INDIR));
riga.add(rec.get(IND_CIV));
riga.add(rec.get(IND_LOCALITA));
field_sheet(F_CODINDDOC)->add(riga);
field_sheet(F_CODINDSP)->add(riga);
field_sheet(F_CODINDEFF)->add(riga);
}
TToken_string riga(240);
indsp_sheet().reset();
for (int i=0; i< _rel->indirizzi_items();i++)
{
TRectype& rec=_rel->indirizzo(i);
riga.cut(0);
riga.add(rec.get(IND_RAGSOC));
riga.add(rec.get(IND_INDIR));
riga.add(rec.get(IND_CIV));
riga.add(rec.get(IND_LOCALITA));
riga.add(rec.get(IND_CAP));
riga.add(rec.get(IND_STATO));
riga.add(rec.get(IND_COM));
riga.add(rec.get(IND_PTEL));
riga.add(rec.get(IND_TEL));
riga.add(rec.get(IND_PFAX));
riga.add(rec.get(IND_FAX));
riga.add(rec.get(IND_IVARID));
riga.add(rec.get(IND_CODIND));
indsp_sheet().row(i)=riga;
// Load the sheets of CODINDDOC, CODINDSP, CODINDEFF.
riga.cut(0);
riga.add(rec.get(IND_CODIND));
riga.add(rec.get(IND_RAGSOC));
riga.add(rec.get(IND_INDIR));
riga.add(rec.get(IND_CIV));
riga.add(rec.get(IND_LOCALITA));
field_sheet(F_CODINDDOC)->add(riga);
field_sheet(F_CODINDSP)->add(riga);
field_sheet(F_CODINDEFF)->add(riga);
}
}
return _rel->status();
}
int TClifo_application::rewrite(const TMask& m)
{
common_f(m);
return _rel->rewrite(TRUE);
return TRelation_application::rewrite(m);
}
int TClifo_application::write(const TMask& m)
{
common_f(m);
return _rel->write(TRUE);
return TRelation_application::write(m);
}
TArray_sheet* TClifo_application::field_sheet(const int n) const
{
TEdit_field& f=(TEdit_field&) _msk->field(n);
TArray_sheet* S=(TArray_sheet*) f.sheet()->sheet();
return S;
TArray_sheet* ss=(TArray_sheet*) f.sheet()->sheet();
return ss;
}
TSheet_field& TClifo_application::indsp_sheet() const
@ -477,35 +472,38 @@ void TClifo_application::indsp_pack()
void TClifo_application::common_f(const TMask& m)
{
char tipocf = m.get(F_TIPOCF)[0];
long codcf = m.get_long(F_CODCF);
_rel->lfile().zero();
m.autosave(_rel);
_rel->destroy_rows();
indsp_pack();
TArray& rows=indsp_sheet().rows_array();
int n_items = rows.items();
for (int i=0; i<n_items;i++)
if (_gesven)
{
TToken_string& row=(TToken_string&)rows[i];
TRectype& rec=_rel->indirizzo(i);
row.restart();
rec.zero();
rec.put(IND_TIPOCF,tipocf);
rec.put(IND_CODCF,codcf);
rec.put(IND_RAGSOC,row.get());
rec.put(IND_INDIR,row.get());
rec.put(IND_CIV,row.get());
rec.put(IND_LOCALITA,row.get());
rec.put(IND_CAP,row.get());
rec.put(IND_STATO,row.get_int());
rec.put(IND_COM,row.get());
rec.put(IND_PTEL,row.get());
rec.put(IND_TEL,row.get());
rec.put(IND_PFAX,row.get());
rec.put(IND_FAX,row.get());
rec.put(IND_IVARID,row.get());
rec.put(IND_CODIND,i+1);
const char tipocf = m.get(F_TIPOCF)[0];
const long codcf = m.get_long(F_CODCF);
_rel->destroy_rows();
indsp_pack();
TArray& rows=indsp_sheet().rows_array();
int n_items = rows.items();
for (int i = 0; i < n_items; i++)
{
TToken_string& row=(TToken_string&)rows[i];
TRectype& rec=_rel->indirizzo(i);
row.restart();
rec.zero();
rec.put(IND_TIPOCF,tipocf);
rec.put(IND_CODCF,codcf);
rec.put(IND_RAGSOC,row.get());
rec.put(IND_INDIR,row.get());
rec.put(IND_CIV,row.get());
rec.put(IND_LOCALITA,row.get());
rec.put(IND_CAP,row.get());
rec.put(IND_STATO,row.get_int());
rec.put(IND_COM,row.get());
rec.put(IND_PTEL,row.get());
rec.put(IND_TEL,row.get());
rec.put(IND_PFAX,row.get());
rec.put(IND_FAX,row.get());
rec.put(IND_IVARID,row.get());
rec.put(IND_CODIND,i+1);
}
}
}
@ -524,7 +522,6 @@ bool TClifo_application::indsp_handler(TMask_field& f, KEY key)
{
TToken_string& riga=(TToken_string&)righe[i];
TToken_string rigav;
riga.restart();
rigav.add(riga.get(12));
rigav.add(riga.get(0));
rigav.add(riga.get());
@ -560,17 +557,12 @@ bool TClifo_application::indsp_notify(int r, KEY key)
case K_INS:
// request to add the row #r
// To avoid rewriting of existing record.
if (indsp.items() >= 999)
// To avoid inserts in the middle of the sheet
if (r != -1 && indsp.items() > r)
{
error_box("Raggiunto il numero massimo degli indirizzi per questo C/F");
return FALSE; // Refuse Permission
} else
// To avoid inserts in the middle of the sheet
if (r != -1 && indsp.items() > r)
{
error_box("Si possono aggiungere indirizzi solo alla fine");
return FALSE; //Refuse permission
}
error_box("Si possono aggiungere indirizzi solo alla fine");
return FALSE; //Refuse permission
}
break;
default:
break;

View File

@ -125,13 +125,13 @@ BOOLEAN F_IVARIDI
BEGIN
PROMPT 2 13 "Riduzione IVA"
HELP "Indicare se Š soggetto a riduzione IVA"
GROUP 1
GROUP 1
END
NUMBER F_CODINDI 3
BEGIN
PROMPT 1 1 "Codice "
HELP "Codice riferito alla tabella indirizzi"
FLAGS "D"
END
BUTTON DLG_OK 9 2

View File

@ -1,20 +1,14 @@
#include <config.h>
#include "cg0201.h"
#include <clifo.h>
#include <indsp.h>
// Definizione dei metodi relativi alla classe TClifoVI
TClifoVI::TClifoVI():TRelation(LF_CLIFO), _oldindirizzi(0)
TClifoVI::TClifoVI():TRelation(LF_CLIFO), _oldindirizzi(0), _gesven(FALSE)
{
add(LF_CFVEN,"TIPOCF=TIPOCF|CODCF=CODCF");
add(LF_INDSP,"TIPOCF=TIPOCF|CODCF=CODCF");
TConfig conf(CONFIG_DITTA, "cg");
_gesven = conf.get_bool("GesVen");
}
void TClifoVI::destroy_rows()
@ -36,18 +30,18 @@ TRectype& TClifoVI::indirizzo(int i)
int TClifoVI::read_indirizzi()
{
destroy_rows();
if (_gesven)
{
const TLocalisamfile& rind = lfile(LF_INDSP);
position_rels();
destroy_rows();
for (bool ok=is_first_match(LF_INDSP); ok; ok=next_match(LF_INDSP))
{
const int nriga=rind.get_int(IND_CODIND) -1;
indirizzo(nriga)=rind.curr();
}
_oldindirizzi=indirizzi_items();
}
_oldindirizzi=indirizzi_items();
return NOERR;
}

View File

@ -31,6 +31,8 @@ public:
TRectype& indirizzo(int i);
int indirizzi_items() const {return _indirizzi.items();}
void destroy_rows();
void gestione_vendite(bool gv) { _gesven = gv; }
TClifoVI();
virtual ~TClifoVI() {}

View File

@ -22,6 +22,13 @@ typedef enum { no_descr, acquisto, vendita, incasso_pagamento,
class TCaus_app : public TRelation_application
{
TRelation* _rel; // Relazione principale
TMask* _msk; // Maschera principale
// Bitarray delle righe lette da file all'inizio.
// Quando leggo dal file la riga n setto il bit n.
TBit_array _righe_gia_presenti;
int _filtro; // tipo di filtro su tab. reg.
// 1 vendite senza corrisp
// 2 vendite con corrisp
@ -49,22 +56,15 @@ protected:
static bool m770_hndl (TMask_field& f, KEY k);
static bool ss_notify (int r, KEY k);
TRelation * _rel;
TMask * _msk;
// Bitarray delle righe lette da file all'inizio.
// Quando leggo dal file la riga n setto il bit n.
TBit_array _righe_gia_presenti;
void togli_dal_file(const TString&);
void read_rcaus(TMask&);
bool fill_sheet(TMask&);
void set_descr (int numrig=-1, const char * descr="");
void clear(int riga); // pulisce una riga in seguito ad Azzera
void clear_descr(); // cancella solo le descrizioni fisse
void carica_righe_libere();
void set_descr (int numrig, const char* descr);
void clear(int riga);
void clear_descr();
void carica_righe_libere(int from = -1);
void causale_inc_pag();
void causale_ritenute ();
void causale_vendite ();
@ -96,10 +96,10 @@ public:
void compila_array (const TString&, int, int, int);
TSheet_field& ss() const { return *_sheet; }
TMask& ss_mask() const { return _sheet->sheet_mask(); }
TMask& ss_mask() const { return _sheet->sheet_mask(); }
void add_riga (int numrig, char sz, TConto& tc, const TString& d, const TString& da);
bool mostra_campi(TMask_field& f);
void add_riga (int numrig, char sz, TConto& tc, const TString& d, const TString& da);
bool mostra_campi(TMask_field& f);
bool valuta() const { return _valuta; }
bool saldaconto() const { return _saldaconto; }
@ -159,100 +159,105 @@ void TCaus_app::set_descr(int i, const char * dfi)
r.add(dfi, 0);
}
void TCaus_app::carica_righe_libere()
void TCaus_app::carica_righe_libere(int from)
{
for (int i = ss().items(); i < 20; i++)
set_descr(i);
if (from < 0) from = ss().items();
for (int i = from; i < 20; i++)
set_descr(i, "");
ss().force_update();
}
// Cancella tutte le descrizioni delle righe
void TCaus_app::clear_descr()
{
TArray& a = ss().rows_array();
for (int i=0; i < a.items(); i++)
{
if (_tipo_des != no_descr)
{
TToken_string& r = (TToken_string&)a[i];
r.add("", 0);
}
app()._tipo_des = no_descr;
TArray& a = ss().rows_array();
for (int i = 0; i < a.items(); i++)
{
TToken_string& r = (TToken_string&)a[i];
r.add("", 0);
}
carica_righe_libere();
_tipo_des = no_descr;
}
}
void TCaus_app::causale_vendite()
{
if (_tipo_des == vendita)
return;
_tipo_des = vendita;
int i=0;
set_descr(i++, "C Clienti");
set_descr(i++, "C Di ricavo");
set_descr(i++, "C Iva vendite");
set_descr(i++, "C Iva non detraibile");
set_descr(i++, "C Imp. esenti");
set_descr(i++, "C Imp. non imponibili");
set_descr(i++, "C Imp. non soggetti");
set_descr(i++, "C Ritenute fiscali");
set_descr(i++, "C Ritenute soc.");
if (_tipo_des != vendita)
{
int i = 0;
set_descr(i++, "C Clienti");
set_descr(i++, "C Di ricavo");
set_descr(i++, "C Iva vendite");
set_descr(i++, "C Iva non detraibile");
set_descr(i++, "C Imp. esenti");
set_descr(i++, "C Imp. non imponibili");
set_descr(i++, "C Imp. non soggetti");
set_descr(i++, "C Ritenute fiscali");
set_descr(i++, "C Ritenute soc.");
carica_righe_libere(i);
_tipo_des = vendita;
}
}
void TCaus_app::causale_acquisti()
{
if (_tipo_des == acquisto)
return;
_tipo_des = acquisto;
int i=0;
set_descr( i++, "C Fornitori");
set_descr(i++, "C Di costo");
set_descr(i++, "C Iva acquisti");
set_descr(i++, "C Iva non detraibile");
set_descr(i++, "C Imp. esenti");
set_descr(i++, "C Imp. non imponibili");
set_descr(i++, "C Imp. non soggetti");
set_descr(i++, "C Ritenute fiscali");
set_descr(i++, "C Ritenute soc.");
if (_tipo_des != acquisto)
{
int i = 0;
set_descr( i++, "C Fornitori");
set_descr(i++, "C Di costo");
set_descr(i++, "C Iva acquisti");
set_descr(i++, "C Iva non detraibile");
set_descr(i++, "C Imp. esenti");
set_descr(i++, "C Imp. non imponibili");
set_descr(i++, "C Imp. non soggetti");
set_descr(i++, "C Ritenute fiscali");
set_descr(i++, "C Ritenute soc.");
carica_righe_libere(i);
_tipo_des = acquisto;
}
}
void TCaus_app::causale_ritenute()
{
if (_tipo_des == ritenuta_occas)
return;
_tipo_des = ritenuta_occas;
int i=0;
set_descr (i++, "Costo");
set_descr (i++, "Cassa/banca");
set_descr (i++, "Erario");
if (_tipo_des != ritenuta_occas)
{
int i = 0;
set_descr (i++, "Costo");
set_descr (i++, "Cassa/banca");
set_descr (i++, "Erario");
carica_righe_libere(i);
_tipo_des = ritenuta_occas;
}
}
void TCaus_app::causale_inc_pag()
{
const tipo_descr tipo_des = valuta() ? incasso_pagamento_gesval : incasso_pagamento;
if (_tipo_des == tipo_des)
return;
_tipo_des = tipo_des;
int i=0;
set_descr ( i++, "C Clienti/Fornitori");
set_descr ( i++, "C Cassa o banca");
set_descr ( i++, "C Tratta");
set_descr ( i++, "C Ricevuta bancaria");
set_descr ( i++, "C Cessione");
set_descr ( i++, "C Paghero'");
set_descr ( i++, "C Lettera di credito");
set_descr ( i++, "C Abb. pass/sc.");
set_descr ( i++, "C Abb. att/sc.");
set_descr ( i++, "C Spese e rimborsi");
set_descr ( i++, "C Ritenute fiscali");
if (_tipo_des == incasso_pagamento_gesval)
set_descr (i++, "C Differenza cambio");
if (_tipo_des != tipo_des)
{
int i = 0;
set_descr ( i++, "C Clienti/Fornitori");
set_descr ( i++, "C Cassa o banca");
set_descr ( i++, "C Tratta");
set_descr ( i++, "C Ricevuta bancaria");
set_descr ( i++, "C Cessione");
set_descr ( i++, "C Paghero'");
set_descr ( i++, "C Lettera di credito");
set_descr ( i++, "C Abb. pass/sc.");
set_descr ( i++, "C Abb. att/sc.");
set_descr ( i++, "C Spese e rimborsi");
set_descr ( i++, "C Ritenute fiscali");
if (_tipo_des == incasso_pagamento_gesval)
set_descr (i++, "C Differenza cambio");
carica_righe_libere(i);
_tipo_des = tipo_des;
}
}
////////////////////////////////////////////////////////////////////////////
@ -372,11 +377,10 @@ bool TCaus_app::codcausim_hndl (TMask_field& f, KEY k)
caus.put(CAU_CODCAUS, causim);
if (caus.read() == NOERR)
{
const int tpm = caus.get_int(CAU_TIPOMOV);
TString16 codreg = caus.get(CAU_REG);
const int tpm = caus.get_int(CAU_TIPOMOV);
const TString& codreg = caus.get(CAU_REG);
if (codreg.not_empty() || tpm != 0)
return f.warning_box("La causale per l'incasso immediato specificata (%s) deve essere puramente contabile",
(const char *) causim);
return f.warning_box("La causale per l'incasso/pagamento immediato deve essere puramente contabile");
}
}
return TRUE;
@ -395,7 +399,7 @@ bool TCaus_app::mostra_campi(TMask_field& f)
m.hide(F_FAT_RITARDO);
m.hide(F_OP_INTRACOM);
m.hide(F_VALINTRA);
// if (salda_conto())
m.hide(F_COD_CAUS_IM);
switch (tpm)
@ -602,8 +606,6 @@ bool TCaus_app::sottoconto_hndl(TMask_field& f, KEY k)
void TCaus_app::compila_array(const TString& tpd, int tpm, int tpr, int m770)
{
clear_descr();
if (tpd.empty() || tpd == "IN" || tpd == "AN" || tpd == "PG")
{
switch (tpm)
@ -618,18 +620,22 @@ void TCaus_app::compila_array(const TString& tpd, int tpm, int tpr, int m770)
if (m770 == 6)
causale_ritenute();
default:
clear_descr();
break;
}
}
else // C'e' il tipodoc.
{
if (tpr == 1)
causale_vendite();
else
if (tpr == 2)
causale_acquisti();
switch (tpr)
{
case 1:
causale_vendite(); break;
case 2:
causale_acquisti(); break;
default:
clear_descr(); break;
}
}
carica_righe_libere();
}

View File

@ -29,9 +29,10 @@
#define F_COD_CAUS2 126
#define F_DESCR2 127
#define SS_SEZIONE 102
#define SS_TIPOCF 103
#define SS_GRUPPO 104
#define SS_CONTO 105
#define SS_SOTTOCONTO 106
#define SS_DESCAGG 108
#define SS_SEZIONE 102
#define SS_TIPOCF 103
#define SS_GRUPPO 104
#define SS_CONTO 105
#define SS_SOTTOCONTO 106
#define SS_DESCAGG 108
#define SS_DESCRIPTION 109

View File

@ -34,7 +34,7 @@ BEGIN
MESSAGE COPY, F_COD_CAUS2
END
STRING F_DESCR 40
STRING F_DESCR 50
BEGIN
PROMPT 17 1 "Descrizione "
FIELD LF_CAUSALI->DESCR

View File

@ -184,6 +184,7 @@ BEGIN
OUTPUT 206 CODCF
OUTPUT 207 RAGSOC
GROUP 1
ADD RUN CG0 -1 C
END
// Descrizione FORNITORE
@ -203,6 +204,7 @@ BEGIN
OUTPUT 306 CODCF
OUTPUT 307 RAGSOC
GROUP 1
ADD RUN CG0 -1 F
END
STRING SS_DESCAGG 5
@ -216,16 +218,22 @@ BEGIN
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione @50" S0
OUTPUT SS_DESCAGG CODTAB
OUTPUT 109 S0
OUTPUT SS_DESCRIPTION S0
CHECKTYPE NORMAL
WARNING "Codice descrizione aggiuntiva assente"
WARNING "Codice descrizione aggiuntiva errato"
GROUP 1
END
STRING 109 50
STRING SS_DESCRIPTION 50
BEGIN
PROMPT 1 8 ""
FLAGS "D"
USE %DPN KEY 2
INPUT S0 SS_DESCRIPTION
DISPLAY "Descrizione @50" S0
DISPLAY "Codice" CODTAB
COPY OUTPUT SS_DESCAGG
CHECKTYPE NORMAL
WARNING "Descrizione aggiuntiva errata"
GROUP 1
END

View File

@ -63,6 +63,8 @@ TMask* TPrimanota_application::load_mask(int n)
m->set_handler(F_TOTALE, totale_handler);
m->set_handler(F_RITFIS, ritfis_handler);
m->set_handler(F_RITSOC, ritsoc_handler);
m->set_handler(F_CORRLIRE, corrlire_handler);
m->set_handler(F_CORRVALUTA, corrvaluta_handler);
m->set_handler(F_CODIVA, main_codiva_handler);
m->set_handler(F_OCCASEDIT, occas_handler);
m->set_handler(F_SOLAIVA, solaiva_handler);
@ -182,9 +184,9 @@ bool TPrimanota_application::read_caus(const char* cod, int year)
if (ok)
{
nob = _causale.num_doc();
dob = _causale.data_doc();
sal = gestione_saldaconto() && _causale.saldaconto();
dob = sal | _causale.data_doc();
nob = sal | _causale.num_doc();
iva = _causale.iva();
}
@ -194,7 +196,6 @@ bool TPrimanota_application::read_caus(const char* cod, int year)
m->efield(F_NUMDOC).check_type(nob ? CHECK_REQUIRED : CHECK_NORMAL); // Num. doc. obbligatorio
m->efield(F_DATADOC).check_type(dob ? CHECK_REQUIRED : CHECK_NORMAL); // Data doc. obbligatoria
if (iva != nessuna_iva)
{
const CheckType ct = sal ? CHECK_REQUIRED : CHECK_NORMAL;
@ -211,6 +212,55 @@ bool TPrimanota_application::read_caus(const char* cod, int year)
m->set(F_NUMRIF, val);
}
}
if (!ci_sono_importi())
{
cgs().reset();
for (int i = 1; i < _causale.size(); i++)
{
const TRectype* rcaus = (TRectype*)_causale.objptr(i);
if (rcaus == NULL) continue; // Evita eventuali righe nulle
const int nriga = rcaus->get_int(RCA_NRIGA);
if (nriga < 1) continue; // Considera solo righe reali (non riempimenti)
TBill tc; _causale.bill(nriga, tc);
if (tc.gruppo() < 1) continue; // Considera solo gruppi validi
if (tc.tipo() > ' ' && tc.sottoconto() != 0)
{
TBill clifo(0, 0, tc.sottoconto(), tc.tipo());
clifo.descrizione();
if (clifo.conto() != 0)
tc = clifo;
}
const char sezione = rcaus->get_char(RCA_SEZIONE);
const TImporto zero('D', ZERO);
const TString80 desc(_causale.desc_agg(i));
if (nriga == 1) m->set(F_DESCR, desc);
if (iva == nessuna_iva)
{
const int pos = set_cgs_row(-1,zero,tc,desc,' ');
if (sezione > ' ')
cgs().disable_cell(pos, sezione == 'A' ? 0 : 1);
}
else
{
if (nriga >= 2 && nriga <= 9)
continue; // Conti per IVA detraibile e non, ritenute sociali e fiscali
const char tipo = nriga == 1 ? 'T' : ' ';
if (nriga == 1 && tc.tipo() > ' ' && tc.sottoconto() != 0)
m->set(tc.tipo() == 'C' ? F_CLIENTE : F_FORNITORE, tc.sottoconto());
set_cgs_row(-1,zero,tc,desc,tipo);
}
}
fill_sheet(*m);
}
return ok;
}
@ -229,14 +279,11 @@ bool TPrimanota_application::changing_mask(int mode)
if (flag && _iva != nessuna_iva && !_iva_showed)
{
if (!ivas().dirty())
{
WINDOW w = ivas().parent();
show_window(w, TRUE);
set_front_window(w);
process_events();
show_window(w, FALSE);
}
WINDOW w = ivas().parent();
show_window(w, TRUE);
set_front_window(w);
process_events();
show_window(w, FALSE);
_iva_showed = TRUE;
}
@ -391,51 +438,6 @@ void TPrimanota_application::init_insert_mode(TMask& m)
const long protiva = causale().reg().protocol();
m.set(F_PROTIVA, protiva+1);
}
if (m.get(F_CODCAUS).empty()) return;
for (int i = 1; i < _causale.size(); i++)
{
const TRectype* rcaus = (TRectype*)_causale.objptr(i);
if (rcaus == NULL) continue; // Evita eventuali righe nulle
const int nriga = rcaus->get_int(RCA_NRIGA);
if (nriga < 1) continue; // Considera solo righe reali (non riempimenti)
TBill tc; _causale.bill(nriga, tc);
if (tc.conto() < 1) continue; // Considera solo conti validi
if (tc.tipo() > ' ' && tc.sottoconto() != 0)
{
TBill clifo(0, 0, tc.sottoconto(), tc.tipo());
clifo.descrizione();
if (clifo.conto() != 0)
tc = clifo;
}
const char sezione = rcaus->get_char(RCA_SEZIONE);
const TImporto zero('D', ZERO);
const TString80 desc(_causale.desc_agg(i));
if (nriga == 1) m.set(F_DESCR, desc);
if (iva() == nessuna_iva)
{
const int pos = set_cgs_row(-1,zero,tc,desc,' ');
if (sezione > ' ')
cgs().disable_cell(pos, sezione == 'D' ? 1 : 0);
}
else
{
if (nriga >= 2 && nriga <= 9)
continue; // Conti per IVA detraibile e non, ritenute sociali e fiscali
const char tipo = nriga == 1 ? 'T' : ' ';
if (nriga == 1 && tc.tipo() > ' ' && tc.sottoconto() != 0)
m.set(tc.tipo() == 'C' ? F_CLIENTE : F_FORNITORE, tc.sottoconto());
set_cgs_row(-1,zero,tc,desc,tipo);
}
}
}
@ -708,11 +710,6 @@ void TPrimanota_application::mask2rel(const TMask& m)
real imposta(row.get());
if (to_swap) imposta = -imposta;
if (imponibile.sign() * imposta.sign() < 0)
{
yesnofatal_box("Registrazione di imponibile e imposta discordi");
imposta = -imposta;
}
r.put("IMPOSTA", imposta);
r.put("TIPOCR", row.get());

View File

@ -53,6 +53,8 @@
#define F_AVERE 138
#define F_IMPONIBILI 139
#define F_IMPOSTE 140
#define F_VALUTAINTRA 141
#define F_CAMBIOINTRA 142
#define F_SHEETCG 300
#define F_SHEETIVA 301

View File

@ -503,22 +503,51 @@ BEGIN
CHECKTYPE REQUIRED
END
STRING F_VALUTAINTRA 3
BEGIN
PROMPT 1 17 "Valuta intracom. "
HELP "Codice della valuta per operazione intracomunitaria"
FIELD CODVALI
FLAGS "U"
GROUP 3
USE %VAL
INPUT CODTAB F_VALUTAINTRA
DISPLAY "Codice" CODTAB
DISPLAY "Nome@50" S0
DISPLAY "Cambio@15" R10
DISPLAY "Ultimo aggiornamento" D0
OUTPUT F_VALUTAINTRA CODTAB
OUTPUT F_CAMBIOINTRA R10
CHECKTYPE NORMAL
WARNING "Codice valuta assente"
END
NUMBER F_CAMBIOINTRA 12 5
BEGIN
PROMPT 37 17 "Cambio intracom. "
HELP "Cambio della valuta per operazione intracomunitaria"
FIELD CAMBIOI
FLAGS "RU"
GROUP 3
PICTURE ".5"
END
NUMBER F_CORRLIRE 15
BEGIN
PROMPT 1 16 "Corrispettivo Lire "
HELP "Corrispettivo in Lit. per operazioni intracomunitarie"
PROMPT 1 18 "Corrispettivo Lire "
HELP "Corrispettivo in Lit. per operazioni intracomunitarie. Il tasto F8 lo pone uguale alla somma degli imponibili"
FIELD LF_MOV->CORRLIRE
FLAGS "R"
PICTURE "."
END
NUMBER F_CORRVALUTA 15
NUMBER F_CORRVALUTA 15 2
BEGIN
PROMPT 45 16 "Corrisp. valuta "
PROMPT 37 18 "Corrispettivo valuta "
HELP "Corrispettivo in valuta per operazioni intracomunitarie"
FIELD LF_MOV->CORRVALUTA
FLAGS "R"
PICTURE "."
PICTURE ".2"
END
ENDPAGE
@ -611,14 +640,14 @@ END
NUMBER F_DARE 15
BEGIN
PROMPT 1 -1 "Sbilancio Dare "
PROMPT 1 18 "Sbilancio Dare "
FLAGS "DRV"
PICTURE "."
END
NUMBER F_AVERE 15
BEGIN
PROMPT 41 -1 "Sbilancio Avere "
PROMPT 41 18 "Sbilancio Avere "
FLAGS "DRV"
PICTURE "."
END

View File

@ -245,11 +245,6 @@ int TMovimentoPN::registra(bool re, bool force)
cancella(ri, i+1, _oldiva);
_oldiva = iva_items();
// Aggiorna data registrazione sul libro giornale
const TDate datareg(m.get("DATAREG"));
TLibro_giornale gio(date2esc(datareg));
gio.update(0L, datareg);
// Aggiorna data registrazione e protocollo IVA sul registro
if (reg.not_empty())
{

View File

@ -413,6 +413,18 @@ void TPrimanota_application::cgs_pack()
}
bool TPrimanota_application::ci_sono_importi() const
{
TArray& rows = cgs().rows_array();
for (int i = 0; i < rows.items(); i++)
{
TToken_string& r = (TToken_string&)rows[i];
if (r.get_char(0) > '0') return TRUE;
if (r.get_char() > '0') return TRUE;
}
return FALSE;
}
real TPrimanota_application::calcola_saldo() const
{
TArray& rows = cgs().rows_array();
@ -1114,7 +1126,11 @@ bool TPrimanota_application::caus_modify_handler(TMask_field& f, KEY key)
ok = app().causale().similar(c);
if (!ok) return FALSE;
app().causale().read(cau, ann);
if (key == K_TAB)
{
app().read_caus(cau, ann);
app().cgs().force_update();
}
}
return TRUE;
@ -1566,6 +1582,72 @@ bool TPrimanota_application::visval_handler(TMask_field& f, KEY key)
return TRUE;
}
// Handler of F_CORRLIRE
// Certified 99%
bool TPrimanota_application::corrlire_handler(TMask_field& f, KEY key)
{
TMask& m = f.mask();
if (key == K_ENTER && f.get().empty())
{
if (m.get(F_CORRVALUTA).not_empty())
m.field(F_CORRVALUTA).on_hit();
else
key == K_F8;
}
if (key == K_F8)
{
f.set(m.get(F_IMPONIBILI));
f.set_dirty();
m.reset(F_CORRVALUTA);
key = K_TAB;
}
if (key == K_TAB && f.focusdirty())
{
if (m.get(F_CORRVALUTA).empty())
{
const real cambio = m.get(F_CAMBIOINTRA);
if (cambio != ZERO && m.get(F_CORRVALUTA).empty())
{
real c = f.get();
c /= cambio;
m.set(F_CORRVALUTA, c.string());
}
}
}
return TRUE;
}
// Handler of F_CORRVALUTA
// Certified 99%
bool TPrimanota_application::corrvaluta_handler(TMask_field& f, KEY key)
{
if (key == K_TAB && f.focusdirty())
{
TMask& m = f.mask();
if (m.get(F_CORRLIRE).empty())
{
const real cambio = m.get(F_CAMBIOINTRA);
if (cambio != ZERO)
{
real c = f.get();
c *= cambio;
m.set(F_CORRLIRE, c.string());
}
}
} else
if (key == K_ENTER && f.get().empty())
{
TMask_field& cl = f.mask().field(F_CORRLIRE);
cl.set_dirty();
cl.on_hit();
}
return TRUE;
}
bool TPrimanota_application::solaiva_handler(TMask_field& f, KEY key)
{

View File

@ -68,6 +68,8 @@ class TPrimanota_application : public TRelation_application
static bool main_codiva_handler(TMask_field& f, KEY key);
static bool cambio_handler(TMask_field& f, KEY key);
static bool visval_handler(TMask_field& f, KEY key);
static bool corrlire_handler(TMask_field& f, KEY key);
static bool corrvaluta_handler(TMask_field& f, KEY key);
static bool occas_code_handler(TMask_field& f, KEY key);
static bool occas_handler(TMask_field& f, KEY key);
static bool solaiva_handler(TMask_field& f, KEY key);
@ -157,6 +159,7 @@ protected:
TImporto sub_cgs_imp(int n, const real& imp);
void cgs_pack();
bool ci_sono_importi() const;
real calcola_saldo() const;
real calcola_imp() const;

View File

@ -52,7 +52,7 @@ END
NUMBER 101 15
BEGIN
PROMPT 2 4 "Imponibile "
HELP "Importo imponibile della riga"
HELP "Importo imponibile"
FLAGS "RV"
PICTURE "."
END
@ -60,7 +60,7 @@ END
NUMBER 104 15
BEGIN
PROMPT 48 4 "Imposta "
HELP "Imporot dell'IVA della riga"
HELP "Importo dell'IVA. Se e' nullo, col tasto F8 si puo' effettuare lo scorporo"
FLAGS "RV"
PICTURE "."
END
@ -73,7 +73,7 @@ END
LIST 106 1 12
BEGIN
PROMPT 2 7 "Tipo "
HELP "Tipo del conto della riga"
HELP "Tipo del conto"
FIELD TMCF
ITEM " |Conto"
MESSAGE SHOW,109|HIDE,209|HIDE,309|SHOW,110|HIDE,210|HIDE,310
@ -87,14 +87,14 @@ END
NUMBER 107 3
BEGIN
PROMPT 22 7 "Gruppo "
HELP "Codice del conto della riga"
HELP "Codice del gruppo"
FIELD GRUPPO
END
NUMBER 108 3
BEGIN
PROMPT 38 7 "Conto "
HELP "Codice del conto della riga"
HELP "Codice del conto"
FIELD CONTO
USE LF_PCON SELECT (CONTO!="") && (SOTTOCONTO="")
INPUT GRUPPO 107
@ -117,7 +117,7 @@ END
NUMBER 109 6
BEGIN
PROMPT 55 7 "Sottoconto "
HELP "Codice del conto della riga"
HELP "Codice del sottoconto"
FIELD SOTTOCONTO
USE LF_PCON SELECT SOTTOCONTO!=""
INPUT GRUPPO 107
@ -142,7 +142,7 @@ END
NUMBER 209 6
BEGIN
PROMPT 55 7 "Cliente "
HELP "Codice del cliente della riga"
HELP "Codice del cliente"
USE LF_CLIFO
INPUT TIPOCF "C"
INPUT CODCF 209
@ -162,7 +162,7 @@ END
NUMBER 309 6
BEGIN
PROMPT 55 7 "Fornitore "
HELP "Codice del fornitore della riga"
HELP "Codice del fornitore"
USE LF_CLIFO
INPUT TIPOCF "F"
INPUT CODCF 309
@ -182,7 +182,7 @@ END
STRING 110 50
BEGIN
PROMPT 2 8 "Descrizione "
HELP "Descrizione del conto della riga"
HELP "Descrizione del conto"
FIELD LF_PCON->DESCR
USE LF_PCON KEY 2
INPUT DESCR 110
@ -198,7 +198,7 @@ END
STRING 210 50
BEGIN
PROMPT 2 8 "Cliente "
HELP "Ragione sociale del cliente della riga"
HELP "Ragione sociale del cliente"
FIELD LF_CLIFO->RAGSOC
USE LF_CLIFO KEY 2
INPUT TIPOCF "C"
@ -216,7 +216,7 @@ END
STRING 310 50
BEGIN
PROMPT 2 8 "Fornitore "
HELP "Ragione sociale del forntore della riga"
HELP "Ragione sociale del forntore"
FIELD LF_PCON->SOTTOCONTO
USE LF_CLIFO KEY 2
INPUT TIPOCF "F"
@ -242,7 +242,7 @@ BEGIN
ITEM "5|5. Beni per rivendita da non ventilare"
ITEM "8|8. Altri beni strumentali acquistati in leasing"
FLAGS "D"
HELP "Indicare il tipo Costo/Ricavo del conto"
HELP "Tipo Costo/Ricavo del conto"
END
BUTTON DLG_OK 9 2