Patch level : 10.0
Files correlati : fe0100.exe fe0100c.msk Ricompilazione Demo : [ ] Commento : Potenziata funzione +Contratto per Pharmatex git-svn-id: svn://10.65.10.50/branches/R_10_00@22562 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
bb763f194a
commit
686620a0bb
@ -7,6 +7,7 @@
|
|||||||
#include <recarray.h>
|
#include <recarray.h>
|
||||||
#include <relation.h>
|
#include <relation.h>
|
||||||
#include <reputils.h>
|
#include <reputils.h>
|
||||||
|
#include <tabmod.h>
|
||||||
|
|
||||||
#include <alleg.h>
|
#include <alleg.h>
|
||||||
#include <attiv.h>
|
#include <attiv.h>
|
||||||
@ -1412,8 +1413,8 @@ void TDati_rilevanti_msk::enable_buttons()
|
|||||||
one_sent = recset.move_first();
|
one_sent = recset.move_first();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (id2pos(DLG_COPY) > 0)
|
if (id2pos(DLG_COPY) > 0) // Solo 10.0
|
||||||
enable(DLG_COPY, full_rows && get_long(F_CODCF) > 0 && primo_contratto().full());
|
enable(DLG_COPY, full_rows);
|
||||||
enable(DLG_CANCEL, full_rows);
|
enable(DLG_CANCEL, full_rows);
|
||||||
enable(DLG_SAVEREC, _sheet_dirty);
|
enable(DLG_SAVEREC, _sheet_dirty);
|
||||||
enable(DLG_EXPORT, full_rows);
|
enable(DLG_EXPORT, full_rows);
|
||||||
@ -1544,31 +1545,83 @@ bool TDati_rilevanti_msk::on_field_event(TOperable_field& o, TField_event e, lon
|
|||||||
case DLG_COPY:
|
case DLG_COPY:
|
||||||
if (e == fe_button)
|
if (e == fe_button)
|
||||||
{
|
{
|
||||||
TString80 contratto1 = primo_contratto();
|
TSheet_field& s = sfield(F_RIGHE);
|
||||||
|
const int sel = s.selected();
|
||||||
|
const char tipocf1 = *s.cell(sel, A_TIPOCF);
|
||||||
|
const long codcf1 = atol(s.cell(sel, A_CODCF));
|
||||||
|
int modpag1 = atoi(s.cell(sel, A_MODPAG));
|
||||||
|
TString80 contratto1 = s.cell(sel, A_CONTRATTO);
|
||||||
contratto1.trim();
|
contratto1.trim();
|
||||||
if (contratto1.not_empty() &&
|
if (contratto1.empty())
|
||||||
yesno_box("Si desidera inserire il contratto '%s' nelle righe che ne sono prive?", (const char*)contratto1))
|
|
||||||
{
|
{
|
||||||
const TContratto contr(get(F_TIPOCF)[0], get_long(F_CODCF), contratto1);
|
TMask m("fe0100c");
|
||||||
const int modpag = contr.modalita_pagamento();
|
m.set(F_ANNO, get(F_ANNO));
|
||||||
|
m.set(F_TIPOCF, tipocf1 == 'F' ? "F" : "C");
|
||||||
TSheet_field& s = sfield(F_RIGHE);
|
m.set(F_CODCF, codcf1);
|
||||||
const int f = s.cid2index(A_FORZATA);
|
m.set(F_RAGSOC, s.cell(sel, A_RAGSOC));
|
||||||
const int c = s.cid2index(A_CONTRATTO);
|
TString16 k; k << "CONTRATTO_" << get(F_ANNO);
|
||||||
const int n = s.cid2index(A_NUMRETT);
|
m.set(A_CONTRATTO, k);
|
||||||
const int m = s.cid2index(A_MODPAG);
|
k.cut(0) << "Contratto " << get(F_ANNO);
|
||||||
TString80 contratto;
|
m.set(F_RAGOCC, k);
|
||||||
TString16 numdoc;
|
if (m.run() == K_ENTER)
|
||||||
FOR_EACH_SHEET_ROW(s, r, row)
|
|
||||||
{
|
{
|
||||||
row->get(n, numdoc);
|
contratto1 = m.get(A_CONTRATTO);
|
||||||
row->get(c, contratto);
|
modpag1 = m.get_int(A_MODPAG);
|
||||||
if (numdoc.blank() && contratto.blank())
|
TString80 codtab;
|
||||||
|
codtab.format("%c%6ld%s", tipocf1, codcf1, (const char*)contratto1);
|
||||||
|
TModule_table con("CON");
|
||||||
|
con.put("CODTAB", codtab);
|
||||||
|
con.put("S0", m.get(F_RAGOCC));
|
||||||
|
con.put("S6", modpag1);
|
||||||
|
const int err = con.write();
|
||||||
|
if (err != NOERR)
|
||||||
{
|
{
|
||||||
row->add("X", f);
|
if (err == _isreinsert)
|
||||||
row->add(modpag, m);
|
{
|
||||||
row->add(contratto1, c);
|
if (!yesno_box(FR("Il contratto '%s' esiste già: si desidera continuare ugualmente?"), (const char*)contratto1))
|
||||||
s.enable_cell(r, c);
|
{
|
||||||
|
modpag1 = 1;
|
||||||
|
contratto1.cut(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cantwrite_box(con.description());
|
||||||
|
modpag1 = 1;
|
||||||
|
contratto1.cut(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (modpag1 > 1 && contratto1.not_empty() && yesno_box("Si desidera applicare il contratto '%s' alle righe successive?", (const char*)contratto1))
|
||||||
|
{
|
||||||
|
const int tcf = s.cid2index(A_TIPOCF);
|
||||||
|
const int ccf = s.cid2index(A_CODCF);
|
||||||
|
const int frz = s.cid2index(A_FORZATA);
|
||||||
|
const int con = s.cid2index(A_CONTRATTO);
|
||||||
|
const int ret = s.cid2index(A_NUMRETT);
|
||||||
|
const int mod = s.cid2index(A_MODPAG);
|
||||||
|
|
||||||
|
TString80 contratto;
|
||||||
|
TString16 numrett;
|
||||||
|
for (int r = sel; r < s.items(); r++)
|
||||||
|
{
|
||||||
|
TToken_string& row = s.row(r);
|
||||||
|
|
||||||
|
const char tipocf = row.get_char(tcf);
|
||||||
|
const long codcf = row.get_long(ccf);
|
||||||
|
if (tipocf != tipocf1 || codcf != codcf1)
|
||||||
|
break; // Sconfinamento in altro cliente
|
||||||
|
|
||||||
|
row.get(ret, numrett);
|
||||||
|
row.get(con, contratto);
|
||||||
|
if (numrett.blank() && contratto.blank())
|
||||||
|
{
|
||||||
|
row.add("X", frz);
|
||||||
|
row.add(modpag1, mod);
|
||||||
|
row.add(contratto1, con);
|
||||||
|
s.enable_cell(r, con);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
s.force_update();
|
s.force_update();
|
||||||
|
78
fe/fe0100c.uml
Normal file
78
fe/fe0100c.uml
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
#include "fe0100a.h"
|
||||||
|
|
||||||
|
PAGE "Nuovo contratto" -1 -1 56 9
|
||||||
|
|
||||||
|
GROUPBOX DLG_NULL 53 4
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 0 "@bCliente"
|
||||||
|
END
|
||||||
|
|
||||||
|
LIST F_TIPOCF 1 10
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 1 ""
|
||||||
|
ITEM "C|Cliente"
|
||||||
|
ITEM "F|Fornitore"
|
||||||
|
FLAGS "D"
|
||||||
|
END
|
||||||
|
|
||||||
|
NUMBER F_CODCF 6
|
||||||
|
BEGIN
|
||||||
|
PROMPT 21 1 ""
|
||||||
|
FLAGS "D"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_RAGSOC 50
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 2 ""
|
||||||
|
FLAGS "D"
|
||||||
|
END
|
||||||
|
|
||||||
|
GROUPBOX DLG_NULL 53 5
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 4 "@bContratto"
|
||||||
|
END
|
||||||
|
|
||||||
|
NUMBER F_ANNO 4
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 5 "Anno "
|
||||||
|
FLAGS "D"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING A_CONTRATTO 18
|
||||||
|
BEGIN
|
||||||
|
PROMPT 17 5 "Codice "
|
||||||
|
FLAGS "U"
|
||||||
|
CHECKTYPE REQUIRED
|
||||||
|
END
|
||||||
|
|
||||||
|
LIST A_MODPAG 1 18
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 6 "Modalità di pagamento "
|
||||||
|
ITEM "2|2 - Frazionato"
|
||||||
|
ITEM "3|3 - Periodico"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_RAGOCC 50 36
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 7 "Descrizione "
|
||||||
|
END
|
||||||
|
|
||||||
|
ENDPAGE
|
||||||
|
|
||||||
|
TOOLBAR "topbar" 0 0 0 2
|
||||||
|
|
||||||
|
BUTTON DLG_OK 2 2
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 1 ""
|
||||||
|
END
|
||||||
|
|
||||||
|
BUTTON DLG_CANCEL 2 2,
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 2 "Annulla"
|
||||||
|
END
|
||||||
|
|
||||||
|
#include <helpbar.h>
|
||||||
|
|
||||||
|
ENDPAGE
|
||||||
|
|
||||||
|
ENDMASK
|
29
fe/felib.cpp
29
fe/felib.cpp
@ -149,7 +149,7 @@ const TString& TAnagrafica::stato_estero_UNICO() const
|
|||||||
u.format("%03d", _stato_estero);
|
u.format("%03d", _stato_estero);
|
||||||
const TString& cod = cache().get("%STA", u, "S8"); // S8=UNICO S9=ISTAT
|
const TString& cod = cache().get("%STA", u, "S8"); // S8=UNICO S9=ISTAT
|
||||||
if (cod.len() == 3)
|
if (cod.len() == 3)
|
||||||
u = cod;
|
return cod;
|
||||||
return get_tmp_string() = u;
|
return get_tmp_string() = u;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -218,6 +218,7 @@ bool TAnagrafica::init(const TRectype& rec)
|
|||||||
if (_com_res.empty())
|
if (_com_res.empty())
|
||||||
_com_res = rec.get(ANA_COMRES);
|
_com_res = rec.get(ANA_COMRES);
|
||||||
build_ind_res(rec, ANA_INDRES, ANA_CIVRES);
|
build_ind_res(rec, ANA_INDRES, ANA_CIVRES);
|
||||||
|
_stato_estero = rec.get_int(ANA_STATORES);
|
||||||
|
|
||||||
// Dati di nascita persone fisiche
|
// Dati di nascita persone fisiche
|
||||||
if (_tipo == 'F')
|
if (_tipo == 'F')
|
||||||
@ -249,15 +250,35 @@ bool TAnagrafica::init(const TRectype& rec)
|
|||||||
|
|
||||||
_tipo = ' '; // Non faccio assunzioni sulla persona fisica
|
_tipo = ' '; // Non faccio assunzioni sulla persona fisica
|
||||||
|
|
||||||
if (rec.get_char(CLI_TIPOCF) == 'F') // Fornitore -> Percipiente
|
// Persona Fisica?
|
||||||
|
if (rec.get_char(CLI_TIPOAPER) == 'F' || rec.get(CLI_DATANASC).not_empty())
|
||||||
{
|
{
|
||||||
const long cod = rec.get_long(CLI_CODANAGPER);
|
const long cod = rec.get_long(CLI_CODANAGPER);
|
||||||
if (cod > 0)
|
if (cod > 0)
|
||||||
init(LF_ANAG, 'F', cod);
|
init(LF_ANAG, 'F', cod);
|
||||||
|
if (rec.get(CLI_DATANASC).not_empty())
|
||||||
|
{
|
||||||
|
_data_nasc = rec.get(CLI_DATANASC);
|
||||||
|
_tipo = 'F';
|
||||||
|
}
|
||||||
if (rec.get(CLI_COMNASC).not_empty())
|
if (rec.get(CLI_COMNASC).not_empty())
|
||||||
_com_nasc = rec.get(CLI_COMNASC);
|
_com_nasc = rec.get(CLI_COMNASC);
|
||||||
if (rec.get(CLI_DATANASC).not_empty())
|
if (_com_nasc.empty() && rec.get(CLI_STATONASC).not_empty())
|
||||||
_data_nasc = rec.get(CLI_DATANASC);
|
{
|
||||||
|
const TString80 stato = cache().get("%STA", rec.get(CLI_STATONASC), "S0");
|
||||||
|
TISAM_recordset comuni("USE COMUNI\nFROM CODCOM=Z");
|
||||||
|
double best = 0.75;
|
||||||
|
for (bool ok = comuni.move_first(); ok; ok = comuni.move_next())
|
||||||
|
{
|
||||||
|
const TString& desc = comuni.get(COM_DENCOM).as_string();
|
||||||
|
const double score = xvt_str_fuzzy_compare_ignoring_case(desc, stato);
|
||||||
|
if (score > best)
|
||||||
|
{
|
||||||
|
best = score;
|
||||||
|
_com_nasc = comuni.get(COM_COM).as_string();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Assegno codice fiscale e partita IVA se validi, altrimenti mantengo quelli dell'anagrafica
|
// Assegno codice fiscale e partita IVA se validi, altrimenti mantengo quelli dell'anagrafica
|
||||||
|
Loading…
x
Reference in New Issue
Block a user