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:
parent
6663d4fa54
commit
79509e0417
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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(); }
|
||||
|
||||
|
@ -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;
|
||||
|
3487
cg/cg2600.cpp
3487
cg/cg2600.cpp
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user