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()) 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)); TString80 c(m.get(F_COFI)), p(m.get(F_PAIV));
if ((c.not_empty() && c != anag.get(ANA_COFI)) || if ((c.not_empty() && c != anag.get(ANA_COFI)) ||
(p.not_empty() && p != anag.get(ANA_PAIV))) return error_box("Percipiente non corretto"); (p.not_empty() && p != anag.get(ANA_PAIV)))
TString80 r(anag.get(ANA_RAGSOC)); return error_box("Percipiente non corretto: codice fiscale o partita IVA diversa");
if (m.get(F_RAGSOC).empty() ||
(key == K_TAB && yesno_box("Ragione sociale differente correggo in %s", (const char*) r))) const TString80 r(anag.get(ANA_RAGSOC));
m.set(F_RAGSOC, r, TRUE); 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_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_CIVCF).empty()) m.set(F_CIVCF, anag.get(ANA_CIVRES));
if (m.get(F_CAPCF).empty()) m.set(F_CAPCF, anag.get(ANA_CAPRES)); 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.zero();
fis.put(ANF_CODANAGR, anag.get(ANA_CODANAGR)); fis.put(ANF_CODANAGR, anag.get(ANA_CODANAGR));
fis.read(); if (fis.read() == NOERR)
if (fis.good())
{ {
if (m.get(F_DATANASC).empty()) m.set(F_DATANASC, fis.get(ANF_DATANASC)); if (m.get(F_DATANASC).empty()) m.set(F_DATANASC, fis.get(ANF_DATANASC));
if (m.get(F_COMNASC).empty()) if (m.get(F_COMNASC).empty())
{ {
m.set(F_STATONASC, fis.get(ANF_STATONASC)); m.set(F_STATONASC, fis.get(ANF_STATONASC), TRUE);
m.set(F_COMNASC, fis.get(ANF_COMNASC)); m.set(F_COMNASC, fis.get(ANF_COMNASC), TRUE);
} }
} }
} }

View File

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

View File

@ -211,7 +211,7 @@ protected:
bool edit_partite(int riga); bool edit_partite(int riga);
bool edit_scadenze(int riga, const TBill& b, int anno, const char* num); 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(); } static TPrimanota_application& app() { return (TPrimanota_application&)main_app(); }

View File

@ -498,9 +498,13 @@ bool TPrimanota_application::edit_partite(int riga)
{ {
begin_wait(); begin_wait();
const long curreg = curr_mask().get_long(F_NUMREG); // Numero registrazione
TToken_string& cgr = cgs().row(riga); TToken_string& cgr = cgs().row(riga);
const TBill b(cgr, 2, 0x3); // Legge il conto della riga selezionata 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 "); TString80 caption("Partite aperte del conto ");
caption << b.gruppo() << ' ' << b.conto() << ' ' << b.sottoconto(); caption << b.gruppo() << ' ' << b.conto() << ' ' << b.sottoconto();
@ -521,6 +525,7 @@ bool TPrimanota_application::edit_partite(int riga)
int ult, anno; // Anno ultima partita int ult, anno; // Anno ultima partita
TString16 last, num; // Ultimo numero partita e numero corrente TString16 last, num; // Ultimo numero partita e numero corrente
long nreg;
TString desc; // Descrizione prima partita del gruppo TString desc; // Descrizione prima partita del gruppo
TImporto saldo; // Saldo ultima parita TImporto saldo; // Saldo ultima parita
TToken_string r(80); TToken_string r(80);
@ -529,19 +534,28 @@ bool TPrimanota_application::edit_partite(int riga)
{ {
num = partita.get(PART_NUMPART); num = partita.get(PART_NUMPART);
anno = partita.get_int(PART_ANNO); anno = partita.get_int(PART_ANNO);
nreg = partita.get_long(PART_NREG);
if (num == last && anno == ult) // Se la partita e' la stessa ... if (num == last && anno == ult) // Se la partita e' la stessa ...
{ {
const TImporto i(partita.get_char(PART_SEZ), partita.get_real(PART_IMPORTO)); const TImporto i(partita.get_char(PART_SEZ), partita.get_real(PART_IMPORTO));
saldo += i; // ... incrementa totale saldo += i; // ... incrementa totale
if (nreg == curreg)
{
const int numrig = partita.get_int(PART_NUMRIG);
if (numrig == (riga+1))
soldi -= i;
}
} }
else 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.cut(0);
r.add(ult); r.add(last); r.add(desc); r.add(ult); r.add(last); r.add(desc);
r.add(saldo.valore().string(".")); r.add(saldo.sezione()); 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; ult = anno;
last = num; 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.cut(0);
r.add(ult); r.add(last); r.add(desc); 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); TLocalisamfile scadenza(LF_SCADENZE);
scadenza.zero(); scadenza.put(SCAD_ANNO, anno); scadenza.put(SCAD_NUMPART, num); 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); TToken_string r(80);
for (int err = scadenza.read(_isgteq); 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()) err = scadenza.next())
{ {
r.cut(0); r.cut(0);
r.add(scadenza.get(SCAD_NRATA)); r.add(scadenza.get(SCAD_NRATA)); // Numero rata
r.add(scadenza.get(SCAD_DATASCAD)); r.add(scadenza.get(SCAD_DATASCAD)); // Data scadenza rata
r.add(scadenza.get(SCAD_IMPORTO)); r.add(scadenza.get(SCAD_IMPORTO)); // Importo rata
r.add(""); r.add(""); // Descrizione movimento
r.add(""); r.add(""); // Tipo movimento
a.add(r); 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 const TString16 curreg(curr_mask().get(F_NUMREG)); // Numero registrazione corrente
TString desc; // Descrizione di default 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()) 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++) for (int i = 0; i < a.items(); i++)
{ {
TToken_string& t = a.row(i); TToken_string& t = a.row(i);
if (t.get(3)[0] <= ' ') const TFixed_string d(t.get(3));
t.add(desc, 3); if (d.blank()) t.add(desc, 3);
} }
} }
if (rata < 1 || partita.get(PART_REG).not_empty()) 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 for (long i = a.items()-1; i >= 0; i--) // Cerca scadenza corrispondente
if (a.row(i).get_int(0) == rata) break; 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(desc);
r.add(partita.get(PART_NRIGA)); r.add(partita.get(PART_NRIGA));
i = a.insert(r, i >= 0 ? i+1 : -1); 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); 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_NUMPART, num);
scadenza.put(SCAD_NRATA, rata); scadenza.put(SCAD_NRATA, rata);
err = scadenza.read(); 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 urig = 1;
int nrig = a.row().get_int(4); int nrig = a.row().get_int(4);
if (nrig == 0) // Ho cliccato su una scadenza 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); const int nr = a.row(pos).get_int(4);
if (nr) urig = nr; 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; const bool nuovo = nrig == 0;
TRectype part(parbas); 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_ANNO viene preso dalla partita base
// PART_NUMPART 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_TIPOMOV, causale().tipomov()); // Dati causale corrente
part.put(PART_CODCAUS, causale().codice()); 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 // Copia dati movimento corrente
part.put(PART_DATAREG, curr_mask().get(F_DATAREG)); 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"); TMask m("cg2100s");
m.set_handler(S_IMPORTOPAG, importopag_handler); m.set_handler(S_IMPORTOPAG, importopag_handler);
@ -853,10 +869,9 @@ bool TPrimanota_application::edit_pagamento(const TRectype& parbas, const TRecty
partita.curr() = part; partita.curr() = part;
m.autoload(&rel); // Load current record on mask m.autoload(&rel); // Load current record on mask
const real importo(scaden.get(SCAD_IMPORTO)); const real dapagare(scaden.get(SCAD_IMPORTO));
const real importopag(part.get(SCAD_IMPORTO)); const real pagato(scaden.get(SCAD_IMPORTOPAG));
const real ritenute(part.get(PART_RITENUTE)); const real residuo = dapagare - pagato;
const real residuo = importo - importopag;
// Dati del documento (fattura) che ha generato la scadenza // Dati del documento (fattura) che ha generato la scadenza
m.set(S_NUMDOC, parbas.get(PART_NUMDOC)); // Numero documento 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 // Dati della scadenza che ha generato la partita
m.set(S_RESIDUO, residuo.string()); // Residuo da pagare m.set(S_RESIDUO, residuo.string()); // Residuo da pagare
m.set(S_DATASCAD, scaden.get(SCAD_DATASCAD)); // Data della scadenza 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_IMPORTOVAL, scaden.get(SCAD_IMPORTOVAL)); // " in valuta
m.set(S_RATA, scaden.get(SCAD_NRATA)); 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()); m.set(S_IMPORTOPAG, residuo.string());
const KEY key = m.run(); const KEY key = m.run();
@ -879,6 +898,9 @@ bool TPrimanota_application::edit_pagamento(const TRectype& parbas, const TRecty
{ {
m.autosave(&rel); m.autosave(&rel);
part = partita.curr(); part = partita.curr();
const real imp(m.get(S_IMPORTOPAG));
scaden.put(SCAD_IMPORTOPAG, pagato-importo+imp);
} }
return key == K_ENTER; return key == K_ENTER;

File diff suppressed because it is too large Load Diff