Corretto handler percipienti sui fornitori

Continuato sviluppo gestione partite
Tolti include inutili in cg2600


git-svn-id: svn://10.65.10.50/trunk@1184 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 1995-03-28 16:27:03 +00:00
parent 6663d4fa54
commit 79509e0417
5 changed files with 1807 additions and 1785 deletions

View File

@ -237,15 +237,21 @@ bool TClifo_application::percip_handler(TMask_field& f, KEY key)
if (f.to_check(key) && m.get(F_CODANAGPER).not_empty())
{
TLocalisamfile anag(LF_ANAG);
const TRectype& anag = m.efield(F_CODANAGPER).browse()->cursor()->file().curr();
TString80 c(m.get(F_COFI)), p(m.get(F_PAIV));
if ((c.not_empty() && c != anag.get(ANA_COFI)) ||
(p.not_empty() && p != anag.get(ANA_PAIV))) return error_box("Percipiente non corretto");
TString80 r(anag.get(ANA_RAGSOC));
if (m.get(F_RAGSOC).empty() ||
(key == K_TAB && yesno_box("Ragione sociale differente correggo in %s", (const char*) r)))
m.set(F_RAGSOC, r, TRUE);
(p.not_empty() && p != anag.get(ANA_PAIV)))
return error_box("Percipiente non corretto: codice fiscale o partita IVA diversa");
const TString80 r(anag.get(ANA_RAGSOC));
if (key == K_TAB && m.get(F_RAGSOC).empty() &&
yesno_box("Ragione sociale mancante: assumo %s", (const char*)r))
{
m.set(F_RAGSOC, r.left(30), TRUE);
m.set(F_RAGSOCA, r.mid(30), TRUE);
}
if (m.get(F_INDCF).empty()) m.set(F_INDCF, anag.get(ANA_INDRES));
if (m.get(F_CIVCF).empty()) m.set(F_CIVCF, anag.get(ANA_CIVRES));
if (m.get(F_CAPCF).empty()) m.set(F_CAPCF, anag.get(ANA_CAPRES));
@ -265,14 +271,13 @@ bool TClifo_application::percip_handler(TMask_field& f, KEY key)
fis.zero();
fis.put(ANF_CODANAGR, anag.get(ANA_CODANAGR));
fis.read();
if (fis.good())
if (fis.read() == NOERR)
{
if (m.get(F_DATANASC).empty()) m.set(F_DATANASC, fis.get(ANF_DATANASC));
if (m.get(F_COMNASC).empty())
{
m.set(F_STATONASC, fis.get(ANF_STATONASC));
m.set(F_COMNASC, fis.get(ANF_COMNASC));
m.set(F_STATONASC, fis.get(ANF_STATONASC), TRUE);
m.set(F_COMNASC, fis.get(ANF_COMNASC), TRUE);
}
}
}

View File

@ -190,7 +190,7 @@ END
TEXT DLG_NULL
BEGIN
PROMPT 2 12 "@bConto di contropartita"
PROMPT 2 12 "@bContropartita"
END
LIST S_TIPO 1 12

View File

@ -211,7 +211,7 @@ protected:
bool edit_partite(int riga);
bool edit_scadenze(int riga, const TBill& b, int anno, const char* num);
bool edit_pagamento(const TRectype& parbas, const TRectype& scaden, TRectype& part);
bool edit_pagamento(TRectype& parbas, TRectype& scaden, TRectype& part);
static TPrimanota_application& app() { return (TPrimanota_application&)main_app(); }

View File

@ -498,9 +498,13 @@ bool TPrimanota_application::edit_partite(int riga)
{
begin_wait();
const long curreg = curr_mask().get_long(F_NUMREG); // Numero registrazione
TToken_string& cgr = cgs().row(riga);
const TBill b(cgr, 2, 0x3); // Legge il conto della riga selezionata
TImporto soldi; soldi = cgr; // Importo della riga selezionata
TString80 caption("Partite aperte del conto ");
caption << b.gruppo() << ' ' << b.conto() << ' ' << b.sottoconto();
@ -521,6 +525,7 @@ bool TPrimanota_application::edit_partite(int riga)
int ult, anno; // Anno ultima partita
TString16 last, num; // Ultimo numero partita e numero corrente
long nreg;
TString desc; // Descrizione prima partita del gruppo
TImporto saldo; // Saldo ultima parita
TToken_string r(80);
@ -529,19 +534,28 @@ bool TPrimanota_application::edit_partite(int riga)
{
num = partita.get(PART_NUMPART);
anno = partita.get_int(PART_ANNO);
nreg = partita.get_long(PART_NREG);
if (num == last && anno == ult) // Se la partita e' la stessa ...
{
const TImporto i(partita.get_char(PART_SEZ), partita.get_real(PART_IMPORTO));
saldo += i; // ... incrementa totale
if (nreg == curreg)
{
const int numrig = partita.get_int(PART_NUMRIG);
if (numrig == (riga+1))
soldi -= i;
}
}
else
{
if (!saldo.is_zero()) // Se il saldo non e' nullo allora e' aperta
if (!saldo.is_zero() || nreg == curreg) // Se il saldo non e' nullo allora e' aperta
{
r.cut(0);
r.add(ult); r.add(last); r.add(desc);
r.add(saldo.valore().string(".")); r.add(saldo.sezione());
a.add(r); // Aggiunge partita alla lista
a.add(r); // Aggiunge partita alla lista
}
ult = anno;
last = num;
@ -550,7 +564,7 @@ bool TPrimanota_application::edit_partite(int riga)
}
}
if (!saldo.is_zero()) // Aggiunge ultima partita se aperta
if (!saldo.is_zero() || nreg == curreg) // Aggiunge ultima partita se aperta
{
r.cut(0);
r.add(ult); r.add(last); r.add(desc);
@ -584,7 +598,7 @@ bool TPrimanota_application::edit_scadenze(int currig, const TBill& b, int anno,
TLocalisamfile scadenza(LF_SCADENZE);
scadenza.zero(); scadenza.put(SCAD_ANNO, anno); scadenza.put(SCAD_NUMPART, num);
const TRectype recsca(scadenza.curr());
const TRectype recsca(scadenza.curr()); // Filtra scadenze su anno partita
TToken_string r(80);
for (int err = scadenza.read(_isgteq);
@ -592,11 +606,11 @@ bool TPrimanota_application::edit_scadenze(int currig, const TBill& b, int anno,
err = scadenza.next())
{
r.cut(0);
r.add(scadenza.get(SCAD_NRATA));
r.add(scadenza.get(SCAD_DATASCAD));
r.add(scadenza.get(SCAD_IMPORTO));
r.add("");
r.add("");
r.add(scadenza.get(SCAD_NRATA)); // Numero rata
r.add(scadenza.get(SCAD_DATASCAD)); // Data scadenza rata
r.add(scadenza.get(SCAD_IMPORTO)); // Importo rata
r.add(""); // Descrizione movimento
r.add(""); // Tipo movimento
a.add(r);
}
@ -608,7 +622,7 @@ bool TPrimanota_application::edit_scadenze(int currig, const TBill& b, int anno,
const TString16 curreg(curr_mask().get(F_NUMREG)); // Numero registrazione corrente
TString desc; // Descrizione di default
TRectype parbas(recpar);
TRectype parbas(recpar); // Partita base
for (err = partita.read(_isgteq); err == NOERR && partita.curr() == recpar; err = partita.next())
{
@ -622,13 +636,13 @@ bool TPrimanota_application::edit_scadenze(int currig, const TBill& b, int anno,
for (int i = 0; i < a.items(); i++)
{
TToken_string& t = a.row(i);
if (t.get(3)[0] <= ' ')
t.add(desc, 3);
const TFixed_string d(t.get(3));
if (d.blank()) t.add(desc, 3);
}
}
if (rata < 1 || partita.get(PART_REG).not_empty())
continue;
continue; // Ignora chi non e' un pagamento
for (long i = a.items()-1; i >= 0; i--) // Cerca scadenza corrispondente
if (a.row(i).get_int(0) == rata) break;
@ -643,8 +657,9 @@ bool TPrimanota_application::edit_scadenze(int currig, const TBill& b, int anno,
r.add(desc);
r.add(partita.get(PART_NRIGA));
i = a.insert(r, i >= 0 ? i+1 : -1);
if (partita.get(PART_NREG) != curreg || partita.get_int(PART_NRIGA) != currig)
// Disabilita la righe che non riguardano la riga cliccata
if (partita.get(PART_NREG) != curreg || partita.get_int(PART_NUMRIG) != (currig+1))
a.disable(i);
}
@ -662,13 +677,13 @@ bool TPrimanota_application::edit_scadenze(int currig, const TBill& b, int anno,
scadenza.put(SCAD_NUMPART, num);
scadenza.put(SCAD_NRATA, rata);
err = scadenza.read();
CHECKD(err == NOERR, "Non ritrovo piu' la rata ", rata);
CHECKD(err == NOERR, "Non ritrovo piu' la scadenza della rata ", rata);
int urig = 1;
int nrig = a.row().get_int(4);
if (nrig == 0) // Ho cliccato su una scadenza
{
for (pos = a.selected()+1; pos < a.items(); pos++) // Cerca pagamento
for (pos = a.selected()+1; pos < a.items(); pos++) // Cerca pagamento
{
const int nr = a.row(pos).get_int(4);
if (nr) urig = nr;
@ -682,7 +697,7 @@ bool TPrimanota_application::edit_scadenze(int currig, const TBill& b, int anno,
const bool nuovo = nrig == 0;
TRectype part(parbas);
if (nuovo) // Inserimento di un nuovo pagamento
if (nuovo) // Inserimento di un nuovo pagamento
{
// PART_ANNO viene preso dalla partita base
// PART_NUMPART viene preso dalla partita base
@ -692,8 +707,9 @@ bool TPrimanota_application::edit_scadenze(int currig, const TBill& b, int anno,
part.put(PART_TIPOMOV, causale().tipomov()); // Dati causale corrente
part.put(PART_CODCAUS, causale().codice());
part.put(PART_NUMRIG, currig); // Riga su cui ho cliccato
part.put(PART_NREG, curreg); // Numero operazione
part.put(PART_NUMRIG, currig+1); // Riga su cui ho cliccato
// Copia dati movimento corrente
part.put(PART_DATAREG, curr_mask().get(F_DATAREG));
@ -843,7 +859,7 @@ static bool importopag_handler(TMask_field& f, KEY k)
}
bool TPrimanota_application::edit_pagamento(const TRectype& parbas, const TRectype& scaden, TRectype& part)
bool TPrimanota_application::edit_pagamento(TRectype& parbas, TRectype& scaden, TRectype& part)
{
TMask m("cg2100s");
m.set_handler(S_IMPORTOPAG, importopag_handler);
@ -853,10 +869,9 @@ bool TPrimanota_application::edit_pagamento(const TRectype& parbas, const TRecty
partita.curr() = part;
m.autoload(&rel); // Load current record on mask
const real importo(scaden.get(SCAD_IMPORTO));
const real importopag(part.get(SCAD_IMPORTO));
const real ritenute(part.get(PART_RITENUTE));
const real residuo = importo - importopag;
const real dapagare(scaden.get(SCAD_IMPORTO));
const real pagato(scaden.get(SCAD_IMPORTOPAG));
const real residuo = dapagare - pagato;
// Dati del documento (fattura) che ha generato la scadenza
m.set(S_NUMDOC, parbas.get(PART_NUMDOC)); // Numero documento
@ -867,11 +882,15 @@ bool TPrimanota_application::edit_pagamento(const TRectype& parbas, const TRecty
// Dati della scadenza che ha generato la partita
m.set(S_RESIDUO, residuo.string()); // Residuo da pagare
m.set(S_DATASCAD, scaden.get(SCAD_DATASCAD)); // Data della scadenza
m.set(S_IMPORTO, scaden.get(SCAD_IMPORTO)); // Importo della rata
m.set(S_IMPORTO, dapagare.string()); // Importo della rata
m.set(S_IMPORTOVAL, scaden.get(SCAD_IMPORTOVAL)); // " in valuta
m.set(S_RATA, scaden.get(SCAD_NRATA));
if (importopag.is_zero())
// Memorizza importi prima di eventuali variazioni
const real importo(part.get(PART_IMPORTO));
const real ritenute(part.get(PART_RITENUTE));
if (importo.is_zero())
m.set(S_IMPORTOPAG, residuo.string());
const KEY key = m.run();
@ -879,6 +898,9 @@ bool TPrimanota_application::edit_pagamento(const TRectype& parbas, const TRecty
{
m.autosave(&rel);
part = partita.curr();
const real imp(m.get(S_IMPORTOPAG));
scaden.put(SCAD_IMPORTOPAG, pagato-importo+imp);
}
return key == K_ENTER;

File diff suppressed because it is too large Load Diff