Gestione saldaconto
git-svn-id: svn://10.65.10.50/trunk@1776 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
		
							parent
							
								
									e6a4caa2fa
								
							
						
					
					
						commit
						e0f1f18c7e
					
				@ -312,7 +312,7 @@ bool TPrimanota_application::read_caus(const char* cod, int year)
 | 
			
		||||
        char tipr = ' ';                   
 | 
			
		||||
        if (_is_saldaconto) 
 | 
			
		||||
        {
 | 
			
		||||
          if (nriga < 12 && nriga != 10) continue;  // Si considerano solo le spese
 | 
			
		||||
          if (nriga < 13 && nriga != 10) continue;  // Si considerano solo le spese
 | 
			
		||||
          tipr = 'G';
 | 
			
		||||
        }
 | 
			
		||||
        const int pos = set_cgs_row(-1, zero, tc, desc, tipr);
 | 
			
		||||
@ -564,6 +564,7 @@ void TPrimanota_application::init_modify_mode(TMask& m)
 | 
			
		||||
  {
 | 
			
		||||
    const long numreg = m.get_long(F_NUMREG);
 | 
			
		||||
    partite().add_numreg(numreg);
 | 
			
		||||
    remove_unassigned();
 | 
			
		||||
  }  
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -7,7 +7,8 @@
 | 
			
		||||
#define P_ANNO         107
 | 
			
		||||
#define P_NUMERO       108
 | 
			
		||||
#define P_SHOWALL      180
 | 
			
		||||
#define P_SCAMBIO      190
 | 
			
		||||
#define P_SCAMBIO      181
 | 
			
		||||
#define P_NUOVO        182
 | 
			
		||||
#define P_PARTITE      201
 | 
			
		||||
#define P_SCADENZE     202
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -2,9 +2,10 @@
 | 
			
		||||
 | 
			
		||||
TOOLBAR "" 0 20 0 2
 | 
			
		||||
 | 
			
		||||
BUTTON DLG_NEWREC 10 2
 | 
			
		||||
BUTTON P_NUOVO 10 2
 | 
			
		||||
BEGIN
 | 
			
		||||
  PROMPT -12 -1 "~Nuovo"
 | 
			
		||||
  PICTURE 105
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
BUTTON DLG_OK 10 2
 | 
			
		||||
 | 
			
		||||
@ -125,10 +125,7 @@ BEGIN
 | 
			
		||||
  PROMPT 2 8 "Importo pagamento "
 | 
			
		||||
  PICTURE "."
 | 
			
		||||
  FLAGS "U"
 | 
			
		||||
  WARNING "Inserire un importo inferiore al residuo"
 | 
			
		||||
  FIELD IMPORTO
 | 
			
		||||
  MESSAGE EMPTY CLEAR,S_RITENUTE
 | 
			
		||||
  MESSAGE ENABLE,S_RITENUTE
 | 
			
		||||
END         
 | 
			
		||||
 | 
			
		||||
NUMBER S_IMPORTOVAL 15 2
 | 
			
		||||
 | 
			
		||||
@ -224,6 +224,7 @@ protected:
 | 
			
		||||
  bool notify_cgline_deletion(int numrig);
 | 
			
		||||
 | 
			
		||||
  bool notify_edit_pagamento(TPartita& partita, TRectype& new_pag, int deleting = -1);
 | 
			
		||||
  bool remove_unassigned();
 | 
			
		||||
  
 | 
			
		||||
  long calcola_m770(int tipo_coll, real& spese, real& compenso, real& iva, real& ritfis);
 | 
			
		||||
  bool link_m770();                                 
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										339
									
								
								cg/cg2105.cpp
									
									
									
									
									
								
							
							
						
						
									
										339
									
								
								cg/cg2105.cpp
									
									
									
									
									
								
							@ -56,11 +56,11 @@ TGame_mask::TGame_mask(const TBill& bill) : TMask("cg2100p"), _conto(bill)
 | 
			
		||||
  set(P_SOTTOCONTO, _conto.sottoconto());
 | 
			
		||||
  set(P_DESCR,      ((TBill&)_conto).descrizione());
 | 
			
		||||
  
 | 
			
		||||
  set_handler(P_ANNO,     annopart_handler);
 | 
			
		||||
  set_handler(P_NUMERO,   numpart_handler);
 | 
			
		||||
  set_handler(P_SHOWALL,  show_all_handler);
 | 
			
		||||
  set_handler(P_SCAMBIO,  scambio_handler);
 | 
			
		||||
  set_handler(DLG_NEWREC, nuovo_handler);
 | 
			
		||||
  set_handler(P_ANNO,    annopart_handler);
 | 
			
		||||
  set_handler(P_NUMERO,  numpart_handler);
 | 
			
		||||
  set_handler(P_SHOWALL, show_all_handler);
 | 
			
		||||
  set_handler(P_SCAMBIO, scambio_handler);
 | 
			
		||||
  set_handler(P_NUOVO,   nuovo_handler);
 | 
			
		||||
  
 | 
			
		||||
  partite().set_notify(partite_notify);
 | 
			
		||||
  scadenze().sheet_mask().set_handler(100, edit_scadenza_handler);
 | 
			
		||||
@ -206,8 +206,8 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k)
 | 
			
		||||
          row.add(rigp.get(PART_NREG));
 | 
			
		||||
          row.add(rigp.get(PART_DATAREG));
 | 
			
		||||
          row.add(scad.get(SCAD_DATASCAD)); 
 | 
			
		||||
          row.add(pag.get_real(SCAD_IMPORTO).string());
 | 
			
		||||
          row.add(in_valuta ? pag.get_real(SCAD_IMPORTOVAL).string(0, 2) : "");
 | 
			
		||||
          row.add(pag.get_real(PAGSCA_IMPORTO).string());
 | 
			
		||||
          row.add(in_valuta ? pag.get_real(PAGSCA_IMPORTOVAL).string(0, 2) : "");
 | 
			
		||||
          row.add(rigp.get(PART_DESCR));
 | 
			
		||||
          row.add(rigp.get(PART_NUMDOC)); 
 | 
			
		||||
          row.add(""); 
 | 
			
		||||
@ -229,6 +229,28 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k)
 | 
			
		||||
        }  
 | 
			
		||||
        sal.add("Saldo della rata "); sal << ra;
 | 
			
		||||
      }
 | 
			
		||||
      
 | 
			
		||||
      TRecord_array& unas = game->unassigned();
 | 
			
		||||
      const int lastp = unas.last_row();
 | 
			
		||||
      for (int pa = unas.first_row(); pa <= lastp; pa = unas.succ_row(pa))
 | 
			
		||||
      {
 | 
			
		||||
        const TRectype& pag = unas.row(pa);
 | 
			
		||||
        const TRiga_partite& rigp = game->riga(pa);
 | 
			
		||||
        
 | 
			
		||||
        TToken_string& row = scadenze.row(scadenze.add(""));
 | 
			
		||||
        row.add(pag.get(PAGSCA_NRIGA));
 | 
			
		||||
        row.add(pag.get(PAGSCA_NRATA));
 | 
			
		||||
        row.add(rigp.get(PART_DATADOC)); 
 | 
			
		||||
        row.add(rigp.get(PART_NREG));
 | 
			
		||||
        row.add(rigp.get(PART_DATAREG));
 | 
			
		||||
        row.add(""); 
 | 
			
		||||
        row.add(pag.get_real(PAGSCA_IMPORTO).string());
 | 
			
		||||
        row.add(in_valuta ? pag.get_real(PAGSCA_IMPORTOVAL).string(0, 2) : "");
 | 
			
		||||
        row.add(rigp.get(PART_DESCR));
 | 
			
		||||
        row.add(rigp.get(PART_NUMDOC)); 
 | 
			
		||||
        row.add(""); 
 | 
			
		||||
        row.add(pa);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    gm.scadenze().force_update();
 | 
			
		||||
@ -260,9 +282,9 @@ bool TGame_mask::edit_scadenza_handler(TMask_field& f, KEY k)
 | 
			
		||||
    int nrigp = m.get_int(112);
 | 
			
		||||
    if (nrigp == 0)
 | 
			
		||||
    {                              
 | 
			
		||||
      nrigp = app().nuovo_pagamento(game, nriga, nrata, rmov);
 | 
			
		||||
      if (nrigp < 1)
 | 
			
		||||
      if (game.rata_pagata(nriga, nrata))
 | 
			
		||||
        return f.error_box("La rata %d e' gia' stata pagata", nrata);
 | 
			
		||||
      nrigp = app().nuovo_pagamento(game, nriga, nrata, rmov);
 | 
			
		||||
    }  
 | 
			
		||||
    else
 | 
			
		||||
    {                                   
 | 
			
		||||
@ -272,8 +294,7 @@ bool TGame_mask::edit_scadenza_handler(TMask_field& f, KEY k)
 | 
			
		||||
      if (cur_reg != nreg)
 | 
			
		||||
        return f.error_box("Il movimento corrente e' il %ld", cur_reg);
 | 
			
		||||
      
 | 
			
		||||
      const TRiga_scadenze& scad = game.rata(nriga, nrata);
 | 
			
		||||
      const int paga = scad.pagata();
 | 
			
		||||
      const int paga = game.rata_pagata(nriga, nrata);
 | 
			
		||||
      if (paga != 0 && paga != nrigp)
 | 
			
		||||
        return f.error_box("Pagamento non modificabile");
 | 
			
		||||
    }
 | 
			
		||||
@ -295,21 +316,34 @@ bool TGame_mask::nuovo_handler(TMask_field& f, KEY k)
 | 
			
		||||
{
 | 
			
		||||
  if (k == K_SPACE)
 | 
			
		||||
  {           
 | 
			
		||||
    TMask new_game("Nuova partita", 1, 24, 6);
 | 
			
		||||
    new_game.add_number(101, 0, "Anno    ", 1, 1, 4);
 | 
			
		||||
    new_game.add_string(102, 0, "Partita ", 1, 2, 7);
 | 
			
		||||
    new_game.add_button(DLG_OK, 0, "", -12, -1, 8);
 | 
			
		||||
    new_game.add_button(DLG_CANCEL, 0, "", -22, -1, 8);
 | 
			
		||||
    new_game.set(101, TDate(TODAY).year());
 | 
			
		||||
    TMask new_game("Nuova partita", 1, 24, 5);
 | 
			
		||||
    new_game.add_number(P_ANNO, 0, "Anno    ", 1, 1, 4, "A");
 | 
			
		||||
    new_game.add_string(P_NUMERO, 0, "Partita ", 1, 2, 7);
 | 
			
		||||
    new_game.add_button(DLG_OK, 0, "", -12, 3, 8, 2);
 | 
			
		||||
    new_game.add_button(DLG_CANCEL, 0, "", -22, 3, 8, 2);
 | 
			
		||||
    
 | 
			
		||||
    if (new_game.run() == K_ENTER)
 | 
			
		||||
    {                        
 | 
			
		||||
      const TGame_mask& gm = (TGame_mask&)f.mask();
 | 
			
		||||
      const int anno = new_game.get_int(101);
 | 
			
		||||
      const TString16 numero(new_game.get(102));
 | 
			
		||||
      TGame_mask& gm = (TGame_mask&)f.mask();
 | 
			
		||||
      const int anno = new_game.get_int(P_ANNO);
 | 
			
		||||
      const TString16 numero(new_game.get(P_NUMERO));
 | 
			
		||||
      TPartita& game = app().partite().partita(gm.conto(), anno, numero);
 | 
			
		||||
      if (game.ok())
 | 
			
		||||
        return error_box("La partita %d %s esiste gia'.", anno, (const char*)numero);
 | 
			
		||||
      const int nriga = TPartita::UNASSIGNED;
 | 
			
		||||
      const int nrata = TPartita::UNASSIGNED;
 | 
			
		||||
      const int nrigp = app().nuovo_pagamento(game, nriga, nrata, app().cgs().selected()+1);
 | 
			
		||||
      
 | 
			
		||||
      app().edit_pagamento(game, nriga, nrata, nrigp);
 | 
			
		||||
      if (game.ok())
 | 
			
		||||
      {
 | 
			
		||||
        game.write();
 | 
			
		||||
        gm.send_key(K_SPACE, P_SHOWALL);    // Aggiorna sheet partite
 | 
			
		||||
        gm.set(P_ANNO, anno);
 | 
			
		||||
        gm.set(P_NUMERO, numero, TRUE);     // Selezione nuova partita
 | 
			
		||||
      }   
 | 
			
		||||
      else
 | 
			
		||||
        app().partite().destroy(gm.conto(), anno, numero);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return TRUE;
 | 
			
		||||
@ -470,39 +504,63 @@ void TGame_mask::fill_partite(bool all) const
 | 
			
		||||
class TPay_mask : public TMask
 | 
			
		||||
{                            
 | 
			
		||||
  bool _in_valuta;
 | 
			
		||||
  real _residuo, _residuo_val;
 | 
			
		||||
  real _da_pagare;
 | 
			
		||||
  
 | 
			
		||||
protected:
 | 
			
		||||
  static bool importo_handler(TMask_field& f, KEY k);
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
  void set_scad(const TRiga_scadenze& scad);
 | 
			
		||||
  void set_pag(const TRectype& oldpag, const TRiga_scadenze& scad);
 | 
			
		||||
  void get_pag(TRectype& oldpag) const;
 | 
			
		||||
 | 
			
		||||
  TPay_mask();
 | 
			
		||||
  virtual ~TPay_mask() {}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
TPay_mask::TPay_mask() : TMask("cg2100p")
 | 
			
		||||
TPay_mask::TPay_mask() : TMask("cg2100s")
 | 
			
		||||
{
 | 
			
		||||
  set_handler(S_IMPORTO, importo_handler); 
 | 
			
		||||
  set_handler(S_IMPORTOVAL, importo_handler);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TPay_mask::set_scad(const TRiga_scadenze& scad)
 | 
			
		||||
void TPay_mask::set_pag(const TRectype& oldpag, const TRiga_scadenze& scad)
 | 
			
		||||
{                   
 | 
			
		||||
  TRelation rel(LF_PAGSCA);                // Working relation
 | 
			
		||||
  rel.lfile().curr() = oldpag;
 | 
			
		||||
  autoload(&rel);                          // Load current record on mask
 | 
			
		||||
  
 | 
			
		||||
  const TRiga_partite& parbas = scad.riga();
 | 
			
		||||
  set(S_NUMDOC,  parbas.get(PART_NUMDOC));           // Numero documento
 | 
			
		||||
  set(S_DATADOC, parbas.get(PART_DATADOC));          // Data documento
 | 
			
		||||
  set(S_NUMPROT, parbas.get(PART_PROTIVA));          // Protocollo IVA
 | 
			
		||||
  set(S_DESCR,   parbas.get(PART_DESCR));            // Descrizione documento
 | 
			
		||||
 | 
			
		||||
  set(S_DATASCAD,        scad.get(SCAD_DATASCAD));   // Data della scadenza
 | 
			
		||||
  set(S_SEZIONE_SCAD,    scad.riga().sezione());     // Sezione della rata
 | 
			
		||||
  set(S_RATA,            scad.get(SCAD_NRATA));
 | 
			
		||||
  set(S_IMPORTO_SCAD,    scad.get(SCAD_IMPORTO));    // Importo della rata
 | 
			
		||||
  set(S_IMPORTOVAL_SCAD, scad.get(SCAD_IMPORTOVAL)); // Importo in valuta
 | 
			
		||||
 | 
			
		||||
  _in_valuta   = scad.in_valuta();
 | 
			
		||||
  _residuo     = scad.residuo(FALSE);
 | 
			
		||||
  _residuo_val = scad.residuo(TRUE);
 | 
			
		||||
  _da_pagare   = scad.residuo(_in_valuta);           // Calcola residuo in valuta
 | 
			
		||||
  
 | 
			
		||||
  TReal_field& res = (TReal_field&)field(S_RESIDUO);
 | 
			
		||||
  res.set_decimals(_in_valuta ? 2 : 0);
 | 
			
		||||
  res.set(_in_valuta ? _residuo_val.string() : _residuo.string());
 | 
			
		||||
  res.set(_da_pagare.string());
 | 
			
		||||
  if (!_da_pagare.is_zero())
 | 
			
		||||
    set_handler(_in_valuta ? S_IMPORTOVAL : S_IMPORTO, importo_handler); 
 | 
			
		||||
  
 | 
			
		||||
  // Ricorda l'importo da pagare
 | 
			
		||||
  _da_pagare += oldpag.get_real(_in_valuta ? PAGSCA_IMPORTOVAL : PAGSCA_IMPORTO);   
 | 
			
		||||
  
 | 
			
		||||
  show(S_IMPORTOVAL_SCAD, _in_valuta);
 | 
			
		||||
  show(S_IMPORTOVAL, _in_valuta);
 | 
			
		||||
  
 | 
			
		||||
} 
 | 
			
		||||
 | 
			
		||||
void TPay_mask::get_pag(TRectype& newpag) const
 | 
			
		||||
{
 | 
			
		||||
  TRelation rel(LF_PAGSCA);                // Working relation
 | 
			
		||||
  rel.lfile().curr() = newpag;
 | 
			
		||||
  autosave(&rel);                          // Load current record from mask
 | 
			
		||||
  newpag = rel.lfile().curr();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool TPay_mask::importo_handler(TMask_field& f, KEY k)
 | 
			
		||||
@ -511,24 +569,18 @@ bool TPay_mask::importo_handler(TMask_field& f, KEY k)
 | 
			
		||||
 | 
			
		||||
  if (k == K_F8)
 | 
			
		||||
  {
 | 
			
		||||
    m.set(S_IMPORTO, m._residuo.string());           
 | 
			
		||||
    if (m._in_valuta)
 | 
			
		||||
      m.set(S_IMPORTOVAL, m._residuo_val.string(), f.dlg() == S_IMPORTO);
 | 
			
		||||
    f.set(m._da_pagare.string());           
 | 
			
		||||
    k = K_TAB;
 | 
			
		||||
  }           
 | 
			
		||||
  
 | 
			
		||||
  if (k == K_TAB && f.focusdirty())
 | 
			
		||||
  {  
 | 
			
		||||
    if (!m._in_valuta || f.dlg() == S_IMPORTOVAL)
 | 
			
		||||
    {
 | 
			
		||||
      const real& res = (f.dlg() == S_IMPORTO) ? m._residuo : m._residuo_val;
 | 
			
		||||
      const real i(f.get());
 | 
			
		||||
      if (i >= res)
 | 
			
		||||
        m.set(S_SALDOACC, "S");
 | 
			
		||||
    const real i(f.get());
 | 
			
		||||
    if (i >= m._da_pagare)
 | 
			
		||||
      m.set(S_SALDOACC, "S");
 | 
			
		||||
    
 | 
			
		||||
      const real residuo(res-i);
 | 
			
		||||
      m.set(S_RESIDUO, residuo.string());
 | 
			
		||||
    }
 | 
			
		||||
    const real residuo(m._da_pagare - i);
 | 
			
		||||
    m.set(S_RESIDUO, residuo.string());
 | 
			
		||||
  } 
 | 
			
		||||
  
 | 
			
		||||
  return TRUE;
 | 
			
		||||
@ -597,31 +649,25 @@ bool TPrimanota_application::edit_partite(int riga)
 | 
			
		||||
 | 
			
		||||
int TPrimanota_application::nuovo_pagamento(TPartita& partita, int nriga, int rata, int rmov)
 | 
			
		||||
{              
 | 
			
		||||
  const TRiga_partite& riga_part = partita.riga(nriga);
 | 
			
		||||
  CHECKD(rata >= 1 && rata <= riga_part.rate(), "Rata errata ", rata);
 | 
			
		||||
  
 | 
			
		||||
  TRiga_scadenze& riga_scad = riga_part.rata(rata);
 | 
			
		||||
  if (riga_scad.pagata())
 | 
			
		||||
    return -1;
 | 
			
		||||
  CHECKD(!partita.rata_pagata(nriga, rata), "Rata pagata ", rata);
 | 
			
		||||
  
 | 
			
		||||
  TBill conto; partita.conto(conto);                   // Legge conto principale
 | 
			
		||||
 | 
			
		||||
  const long numreg = curr_mask().get_long(F_NUMREG);
 | 
			
		||||
  int nrigp = partita.mov2rig(numreg, rmov);           // Cerca riga partita relativa alla riga rmov
 | 
			
		||||
  
 | 
			
		||||
  if (nrigp < 1)                                       // Devo creare una nuova riga di partita
 | 
			
		||||
  if (nrigp <= 0)                                      // Devo creare una nuova riga di partita
 | 
			
		||||
  {                              
 | 
			
		||||
    TRiga_partite& part = partita.nuova_riga();        // Creazione nuova riga vuota
 | 
			
		||||
    nrigp = part.get_int(PART_NRIGA);
 | 
			
		||||
 | 
			
		||||
    // Copia dati movimento corrente
 | 
			
		||||
    part.put(PART_NREG, numreg);                       // Numero operazione
 | 
			
		||||
    part.put(PART_NUMRIG, rmov);                       // Riga su cui ho cliccato
 | 
			
		||||
    part.put(PART_NREG,    numreg);                    // Numero operazione
 | 
			
		||||
    part.put(PART_NUMRIG,  rmov);                      // Riga su cui ho cliccato
 | 
			
		||||
    part.put(PART_DATAREG, curr_mask().get(F_DATAREG));
 | 
			
		||||
    part.put(PART_DATADOC, curr_mask().get(F_DATADOC));
 | 
			
		||||
    part.put(PART_NUMDOC,  curr_mask().get(F_NUMDOC));
 | 
			
		||||
    part.put(PART_DESCR,   curr_mask().get(F_DESCR));
 | 
			
		||||
    
 | 
			
		||||
    part.put(PART_CODVAL,  curr_mask().get(S_VALUTA)); 
 | 
			
		||||
    part.put(PART_CAMBIO,  curr_mask().get(S_CAMBIO)); 
 | 
			
		||||
    part.put(PART_DATACAM, curr_mask().get(S_DATACAMBIO));
 | 
			
		||||
@ -630,52 +676,64 @@ int TPrimanota_application::nuovo_pagamento(TPartita& partita, int nriga, int ra
 | 
			
		||||
    const int tipomov = causale().tipomov();
 | 
			
		||||
    part.put(PART_TIPOMOV, tipomov);       
 | 
			
		||||
    part.put(PART_CODCAUS, causale().codice());
 | 
			
		||||
    const TRegistro& reg = causale().reg();    
 | 
			
		||||
    part.put(PART_REG, reg.name());
 | 
			
		||||
    part.put(PART_PROTIVA, reg.protocol());
 | 
			
		||||
    if (causale().iva() != nessuna_iva)
 | 
			
		||||
    {
 | 
			
		||||
      part.put(PART_REG,     curr_mask().get(F_CODREG));
 | 
			
		||||
      part.put(PART_PROTIVA, curr_mask().get(F_PROTIVA));
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    // Complesso algoritmo per calcolare la sezione di una nuova riga partita
 | 
			
		||||
    char sezione = ' ';                                // Sezione nulla
 | 
			
		||||
    TBill bill; causale().bill(1, bill);               // Legge primo conto causale
 | 
			
		||||
    if (bill.tipo() == conto.tipo())                   // Se il tipo coincide ...
 | 
			
		||||
      sezione = causale().sezione(1);                  // ... usa la sezione della causale
 | 
			
		||||
    
 | 
			
		||||
    char sezione = causale().sezione(1);               // Usa la sezione della causale
 | 
			
		||||
    if (sezione <= ' ')                                // Se non c'e' la sezione bell'e' ch'e' pronta
 | 
			
		||||
    {
 | 
			
		||||
      if (tipomov == 1 || tipomov == 5)                // calcola in base al tipo movimento e
 | 
			
		||||
        sezione = (conto.tipo() == 'C') ? 'D' : 'A';   // al tipo cliente/fornitore
 | 
			
		||||
      else  
 | 
			
		||||
        sezione = (conto.tipo() == 'C') ? 'A' : 'D';
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
      if (bill.tipo() != conto.tipo())                 // Compensazioni
 | 
			
		||||
    if (conto.tipo() > ' ')                            // Se il tipo e' C o F
 | 
			
		||||
    {
 | 
			
		||||
      TBill bill; causale().bill(1, bill);             // Legge primo conto causale
 | 
			
		||||
      if (bill.tipo() != conto.tipo())
 | 
			
		||||
        sezione = (sezione == 'D') ? 'A' : 'D';        // scambia segno
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    part.put(PART_SEZ, sezione);                       // Memorizza solo la sezione (importi nulli)
 | 
			
		||||
    part.put(PART_SEZABB, sezione); 
 | 
			
		||||
    part.put(PART_SEZDIFCAM, sezione);
 | 
			
		||||
  }      
 | 
			
		||||
 | 
			
		||||
  TRectype& pagamento = riga_scad.new_row(nrigp);      // Crea nuovo pagamento
 | 
			
		||||
  TRectype& pagamento = partita.pagamento(nriga, rata, nrigp);      // Crea nuovo pagamento
 | 
			
		||||
 | 
			
		||||
  int caus = 2;          // Calcola riga causale per la contropartita in base al tipo pagamento
 | 
			
		||||
  switch (riga_scad.get_int(SCAD_TIPOPAG))
 | 
			
		||||
  if (rata != TPartita::UNASSIGNED)
 | 
			
		||||
  {         
 | 
			
		||||
  case 2:              // Tratta
 | 
			
		||||
  case 7:              // Tratta accettata
 | 
			
		||||
    caus = 3; break;   
 | 
			
		||||
  case 3:              // Ricevuta bancaria
 | 
			
		||||
    caus = 4; break;   
 | 
			
		||||
  case 4:              // Cessione
 | 
			
		||||
    caus = 5; break;   
 | 
			
		||||
  case 5:              // Paghero'
 | 
			
		||||
    caus = 6; break;   
 | 
			
		||||
  case 6:              // Fattura di credito
 | 
			
		||||
    caus = 7; break;   
 | 
			
		||||
  case 1:              // Rimessa
 | 
			
		||||
  case 8:              // Rapporti interbancari diretti
 | 
			
		||||
  case 9:              // Bonifico
 | 
			
		||||
  default:
 | 
			
		||||
    caus = 2; break;  
 | 
			
		||||
    const TRiga_scadenze& scad = partita.rata(nriga, rata);
 | 
			
		||||
    switch (scad.get_int(SCAD_TIPOPAG))
 | 
			
		||||
    {       
 | 
			
		||||
    case 2:              // Tratta
 | 
			
		||||
    case 7:              // Tratta accettata
 | 
			
		||||
      caus = 3; break;   
 | 
			
		||||
    case 3:              // Ricevuta bancaria
 | 
			
		||||
      caus = 4; break;   
 | 
			
		||||
    case 4:              // Cessione
 | 
			
		||||
      caus = 5; break;   
 | 
			
		||||
    case 5:              // Paghero'
 | 
			
		||||
      caus = 6; break;   
 | 
			
		||||
    case 6:              // Fattura di credito
 | 
			
		||||
      caus = 7; break;   
 | 
			
		||||
    case 1:              // Rimessa
 | 
			
		||||
    case 8:              // Rapporti interbancari diretti
 | 
			
		||||
    case 9:              // Bonifico
 | 
			
		||||
    default:
 | 
			
		||||
      caus = 2; break;  
 | 
			
		||||
    }
 | 
			
		||||
    pagamento.put(PAGSCA_CODABIPR, scad.get(SCAD_CODABIPR));
 | 
			
		||||
    pagamento.put(PAGSCA_CODCABPR, scad.get(SCAD_CODCABPR));
 | 
			
		||||
    pagamento.put(PAGSCA_CODABI,   scad.get(SCAD_CODABI));
 | 
			
		||||
    pagamento.put(PAGSCA_CODCAB,   scad.get(SCAD_CODCAB));
 | 
			
		||||
    pagamento.put(PAGSCA_CODAG,    scad.get(SCAD_CODAG));
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  TBill contro; causale().bill(caus, contro);  // Legge conto contropartita
 | 
			
		||||
@ -683,46 +741,35 @@ int TPrimanota_application::nuovo_pagamento(TPartita& partita, int nriga, int ra
 | 
			
		||||
    causale().bill(caus = 1, contro);          // ... prende il primo
 | 
			
		||||
  contro.put(pagamento, TRUE);                 // Scrive conto contropartita
 | 
			
		||||
  
 | 
			
		||||
  // Da regalare a Ferdinando                            
 | 
			
		||||
  if (conto.tipo() > ' ')                      // Se cliente o fornitore cerca sua banca
 | 
			
		||||
  {
 | 
			
		||||
    TRelation cliforel(LF_CLIFO);
 | 
			
		||||
    cliforel.add(LF_CFVEN, "TIPOCF=TIPOCF|CODCF=CODCF");
 | 
			
		||||
    TRectype& clifo = cliforel.lfile().curr();
 | 
			
		||||
  /* TBG Da regalare a Ferdinando                            
 | 
			
		||||
     if (conto.tipo() > ' ')                      // Se cliente o fornitore cerca sua banca
 | 
			
		||||
     {
 | 
			
		||||
     TRelation cliforel(LF_CLIFO);
 | 
			
		||||
     cliforel.add(LF_CFVEN, "TIPOCF=TIPOCF|CODCF=CODCF");
 | 
			
		||||
     TRectype& clifo = cliforel.lfile().curr();
 | 
			
		||||
     
 | 
			
		||||
    clifo.put(CLI_TIPOCF, conto.tipo());
 | 
			
		||||
    clifo.put(CLI_CODCF, conto.codclifo());
 | 
			
		||||
    const int err = cliforel.read();
 | 
			
		||||
    CHECK(err == NOERR, "Chiss'e' fregato il clifo");
 | 
			
		||||
    
 | 
			
		||||
    pagamento.put(PAGSCA_CODABI, clifo.get(CLI_CODABI));
 | 
			
		||||
    pagamento.put(PAGSCA_CODCAB, clifo.get(CLI_CODCAB));
 | 
			
		||||
    pagamento.put(PAGSCA_CODAG,  cliforel.lfile(LF_CFVEN).get(CLI_CODAG));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /*  Prossima implementazione
 | 
			
		||||
      pagamento.put(PAGSCA_CODABI, riga_scad.get(SCAD_CODABI));
 | 
			
		||||
      pagamento.put(PAGSCA_CODCAB, riga_scad.get(SCAD_CODCAB));
 | 
			
		||||
      pagamento.put(PAGSCA_CODAG,  riga_scad.get(SCAD_CODAG));
 | 
			
		||||
      */
 | 
			
		||||
  pagamento.put(PAGSCA_CODABIPR, riga_scad.get(SCAD_CODABIPR));
 | 
			
		||||
  pagamento.put(PAGSCA_CODCABPR, riga_scad.get(SCAD_CODCABPR));
 | 
			
		||||
     clifo.put(CLI_TIPOCF, conto.tipo());
 | 
			
		||||
     clifo.put(CLI_CODCF, conto.codclifo());
 | 
			
		||||
     const int err = cliforel.read();
 | 
			
		||||
     CHECK(err == NOERR, "Chiss'e' fregato il clifo");
 | 
			
		||||
     
 | 
			
		||||
     pagamento.put(PAGSCA_CODABI, clifo.get(CLI_CODABI));
 | 
			
		||||
     pagamento.put(PAGSCA_CODCAB, clifo.get(CLI_CODCAB));
 | 
			
		||||
     pagamento.put(PAGSCA_CODAG,  cliforel.lfile(LF_CFVEN).get(CLI_CODAG));
 | 
			
		||||
     }
 | 
			
		||||
     */
 | 
			
		||||
  return nrigp;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
bool TPrimanota_application::notify_edit_pagamento(TPartita& p, TRectype& new_pag, int deleting)
 | 
			
		||||
{   
 | 
			
		||||
  if (deleting != 0)
 | 
			
		||||
  {
 | 
			
		||||
    const int nriga = new_pag.get_int(PAGSCA_NRIGA);       // Riga fattura
 | 
			
		||||
    const TRiga_partite& parbas = p.riga(nriga);
 | 
			
		||||
    
 | 
			
		||||
    const int nrata = new_pag.get_int(PAGSCA_NRATA);       // Numero rata
 | 
			
		||||
    TRiga_scadenze& scaden = parbas.rata(nrata);         
 | 
			
		||||
    
 | 
			
		||||
    const int nrigp = new_pag.get_int(PAGSCA_NRIGP);       // Riga pagamento
 | 
			
		||||
    const TRectype& old_pag = scaden.row(nrigp);
 | 
			
		||||
    const TRectype& old_pag = p.pagamento(nriga, nrata, nrigp);
 | 
			
		||||
    const TRiga_partite& somma = p.riga(nrigp);
 | 
			
		||||
    
 | 
			
		||||
    const char sez = somma.sezione();                      // Sezione importo e ritenute
 | 
			
		||||
@ -853,31 +900,26 @@ bool TPrimanota_application::notify_edit_pagamento(TPartita& p, TRectype& new_pa
 | 
			
		||||
 | 
			
		||||
bool TPrimanota_application::edit_pagamento(TPartita& p, int nriga, int nrata, int nrigp)
 | 
			
		||||
{ 
 | 
			
		||||
  const TRectype& oldpag = p.pagamento(nriga, nrata, nrigp);
 | 
			
		||||
  TRiga_partite&  somma  = p.riga(nrigp);
 | 
			
		||||
  
 | 
			
		||||
  TPay_mask m;    
 | 
			
		||||
  
 | 
			
		||||
  const TRiga_partite&  parbas = p.riga(nriga);
 | 
			
		||||
  const TRiga_scadenze& scaden = parbas.rata(nrata);
 | 
			
		||||
  const TRectype&       oldpag = scaden.row(nrigp);
 | 
			
		||||
  TRiga_partite&        somma  = p.riga(nrigp);
 | 
			
		||||
  
 | 
			
		||||
  const bool in_valuta = scaden.in_valuta();
 | 
			
		||||
  m.show(S_IMPORTOVAL_SCAD, in_valuta);
 | 
			
		||||
  m.show(S_IMPORTOVAL, in_valuta);
 | 
			
		||||
 | 
			
		||||
  TRelation rel(LF_PAGSCA);                // Working relation
 | 
			
		||||
  rel.lfile().curr() = oldpag;
 | 
			
		||||
  m.autoload(&rel);                        // Load current record on mask
 | 
			
		||||
  
 | 
			
		||||
  m.set(S_DESCAGG, somma.get(PART_DESCR));
 | 
			
		||||
  
 | 
			
		||||
  // Dati del documento (fattura) che ha generato la scadenza
 | 
			
		||||
  m.set(S_NUMDOC,  parbas.get(PART_NUMDOC));             // Numero documento
 | 
			
		||||
  m.set(S_DATADOC, parbas.get(PART_DATADOC));            // Data documento
 | 
			
		||||
  m.set(S_NUMPROT, parbas.get(PART_PROTIVA));            // Protocollo IVA
 | 
			
		||||
  m.set(S_DESCR,   parbas.get(PART_DESCR));              // Descrizione documento
 | 
			
		||||
  
 | 
			
		||||
  // Dati della scadenza che ha generato la partita
 | 
			
		||||
  m.set_scad(scaden);
 | 
			
		||||
  if (nriga != TPartita::UNASSIGNED)
 | 
			
		||||
  {
 | 
			
		||||
    const TRiga_scadenze& scaden = p.rata(nriga, nrata);
 | 
			
		||||
    m.set_pag(oldpag, scaden);
 | 
			
		||||
  }  
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    nriga = p.primo_pagamento();
 | 
			
		||||
    TRiga_partite& riga = p.riga(nriga);
 | 
			
		||||
    TRiga_scadenze& scaden = riga.new_row();
 | 
			
		||||
    m.set_pag(oldpag, scaden);
 | 
			
		||||
    riga.destroy_rows();
 | 
			
		||||
  }
 | 
			
		||||
  m.set(S_DESCAGG, somma.get(PART_DESCR));
 | 
			
		||||
  
 | 
			
		||||
  const KEY key = m.run();
 | 
			
		||||
  if (key == K_ENTER || key == K_DEL)
 | 
			
		||||
@ -893,8 +935,8 @@ bool TPrimanota_application::edit_pagamento(TPartita& p, int nriga, int nrata, i
 | 
			
		||||
      somma.put(PART_DESCR, m.get(S_DESCAGG));      // Aggiorna descrizione (comune ai pagamenti)
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    m.autosave(&rel);
 | 
			
		||||
    TRectype& new_pag = rel.lfile().curr();
 | 
			
		||||
    TRectype new_pag(oldpag);
 | 
			
		||||
    m.get_pag(new_pag);
 | 
			
		||||
    notify_edit_pagamento(p, new_pag);
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
@ -953,3 +995,38 @@ bool TPrimanota_application::notify_cgline_deletion(int numrig)
 | 
			
		||||
  
 | 
			
		||||
  return found;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool TPrimanota_application::remove_unassigned()
 | 
			
		||||
{              
 | 
			
		||||
  bool found = FALSE;
 | 
			
		||||
 | 
			
		||||
  const long nreg = curr_mask().get_long(F_NUMREG);
 | 
			
		||||
  for (TPartita* game = partite().first(); game; game = partite().next())
 | 
			
		||||
  {
 | 
			
		||||
    if (game->prima_fattura() > 0)
 | 
			
		||||
    {         
 | 
			
		||||
      TRecord_array& unas = game->unassigned();
 | 
			
		||||
      for (int u = unas.last_row(); u > 0; u = unas.pred_row(u))
 | 
			
		||||
      {
 | 
			
		||||
        const TRectype& pag = unas.row(u);
 | 
			
		||||
        const int nrigp = pag.get_int(PAGSCA_NRIGP);
 | 
			
		||||
        TRiga_partite& sum = game->riga(nrigp);
 | 
			
		||||
        if (sum.get_long(PART_NREG) == nreg)
 | 
			
		||||
        {                                      
 | 
			
		||||
          const int rmov = sum.get_int(PART_NUMRIG)-1;
 | 
			
		||||
          const TImporto imp(sum.sezione(), pag.get_real(PAGSCA_IMPORTO));
 | 
			
		||||
          add_cgs_imp(rmov, imp);
 | 
			
		||||
          
 | 
			
		||||
          TRectype zero(pag); zero.zero();
 | 
			
		||||
          sum.update(pag, zero, PART_IMPORTO);
 | 
			
		||||
          sum.update(pag, zero, PART_IMPORTOVAL);
 | 
			
		||||
          sum.update(pag, zero, PART_RITENUTE);
 | 
			
		||||
          unas.destroy_row(u);
 | 
			
		||||
          found = TRUE;
 | 
			
		||||
        }
 | 
			
		||||
      }  
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  return found;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										137
									
								
								cg/saldacon.cpp
									
									
									
									
									
								
							
							
						
						
									
										137
									
								
								cg/saldacon.cpp
									
									
									
									
									
								
							@ -464,15 +464,18 @@ bool TPartita::reread()
 | 
			
		||||
  return read(zio, year, num);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool TPartita::write(bool re)
 | 
			
		||||
bool TPartita::write(bool re) const
 | 
			
		||||
{                   
 | 
			
		||||
  const bool ok = _part.write(re);
 | 
			
		||||
  return ok;
 | 
			
		||||
  int err = _part.write(re);
 | 
			
		||||
  if (err == NOERR)
 | 
			
		||||
    err = _unassigned.write(re);
 | 
			
		||||
  return err == NOERR;
 | 
			
		||||
} 
 | 
			
		||||
 | 
			
		||||
bool TPartita::remove()
 | 
			
		||||
{
 | 
			
		||||
  _part.destroy_rows();
 | 
			
		||||
  _unassigned.destroy_rows();
 | 
			
		||||
  return rewrite();
 | 
			
		||||
} 
 | 
			
		||||
 | 
			
		||||
@ -489,11 +492,48 @@ TRiga_partite& TPartita::nuova_riga()
 | 
			
		||||
 | 
			
		||||
TRiga_scadenze& TPartita::rata(int nriga, int nrata) const
 | 
			
		||||
{
 | 
			
		||||
  if (nriga < 1) nriga = prima_fattura();
 | 
			
		||||
  if (nriga <= 0) nriga = prima_fattura();
 | 
			
		||||
  const TRiga_partite& r = riga(nriga);
 | 
			
		||||
  return r.rata(nrata);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int TPartita::rata_pagata(int nriga, int nrata) const
 | 
			
		||||
{        
 | 
			
		||||
  int pag = 0;
 | 
			
		||||
  if (nriga != UNASSIGNED)
 | 
			
		||||
  {
 | 
			
		||||
    const TRiga_scadenze& r = rata(nriga, nrata);
 | 
			
		||||
    pag = r.pagata();
 | 
			
		||||
  }
 | 
			
		||||
  return pag;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TRectype& TPartita::pagamento(int nriga, int nrata, int nrigp)
 | 
			
		||||
{
 | 
			
		||||
  if (nriga == UNASSIGNED)
 | 
			
		||||
    return _unassigned.row(nrigp, TRUE);
 | 
			
		||||
  TRiga_scadenze& r = rata(nriga, nrata);
 | 
			
		||||
  return r.row(nrigp);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool TPartita::esiste(int nriga, int nrata, int nrigp) const
 | 
			
		||||
{
 | 
			
		||||
  if (nriga == UNASSIGNED)
 | 
			
		||||
    return _unassigned.exist(nrigp);
 | 
			
		||||
  
 | 
			
		||||
  if (nrata <= 0)
 | 
			
		||||
    return _part.exist(nriga);
 | 
			
		||||
  
 | 
			
		||||
  if (nrigp <= 0)
 | 
			
		||||
  {
 | 
			
		||||
    const TRiga_partite& r = riga(nriga);
 | 
			
		||||
    return r.rows_array().exist(nrata);
 | 
			
		||||
  }  
 | 
			
		||||
  
 | 
			
		||||
  const TRiga_scadenze& r = rata(nriga, nrata);
 | 
			
		||||
  return r.rows_array().exist(nrigp);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TImporto TPartita::importo_speso(long nreg, int numrig, bool extra) const
 | 
			
		||||
{           
 | 
			
		||||
  TImporto imp;
 | 
			
		||||
@ -661,46 +701,39 @@ bool TPartita::utilizzata(int nrigp) const
 | 
			
		||||
  return _unassigned.exist(nrigp);
 | 
			
		||||
} 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
bool TPartita::remove_unassigned(long nreg)
 | 
			
		||||
{              
 | 
			
		||||
  bool found = FALSE;
 | 
			
		||||
 | 
			
		||||
  for (int u = _unassigned.last_row(); u > 0; u = _unassigned.pred_row(u))
 | 
			
		||||
  {
 | 
			
		||||
    const TRectype& pag = _unassigned.row(u);
 | 
			
		||||
    const int nrigp = pag.get_int(PAGSCA_NRIGP);
 | 
			
		||||
    TRiga_partite& sum = riga(nrigp);
 | 
			
		||||
    if (sum.get_long(PART_NREG) == nreg)
 | 
			
		||||
    {         
 | 
			
		||||
      TRectype zero(pag); zero.zero();
 | 
			
		||||
      sum.update(pag, zero, PART_IMPORTO);
 | 
			
		||||
      sum.update(pag, zero, PART_IMPORTOVAL);
 | 
			
		||||
      sum.update(pag, zero, PART_RITENUTE);
 | 
			
		||||
      _unassigned.destroy_row(u);
 | 
			
		||||
      found = TRUE;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  return found;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool TPartita::modifica_pagamento(const TRectype& new_pag,
 | 
			
		||||
                                  char& old_ap, TImporto& old_abb, TImporto& old_diffcam,  
 | 
			
		||||
                                  char& new_ap, TImporto& new_abb, TImporto& new_diffcam)
 | 
			
		||||
{                    
 | 
			
		||||
  const int nriga = new_pag.get_int(PAGSCA_NRIGA);
 | 
			
		||||
  const TRiga_partite& fattura = riga(nriga);
 | 
			
		||||
  
 | 
			
		||||
  const int nrata = new_pag.get_int(PAGSCA_NRATA);
 | 
			
		||||
  TRiga_scadenze& scaden = fattura.rata(nrata);
 | 
			
		||||
 | 
			
		||||
  const int nrigp = new_pag.get_int(PAGSCA_NRIGP);
 | 
			
		||||
  const TRectype& old_pag = scaden.row(nrigp);
 | 
			
		||||
 | 
			
		||||
  const bool empty = scaden.modifica_pagamento(new_pag,
 | 
			
		||||
                                               old_ap, old_abb, old_diffcam,  
 | 
			
		||||
                                               new_ap, new_abb, new_diffcam);
 | 
			
		||||
  bool empty = FALSE;
 | 
			
		||||
  
 | 
			
		||||
  if (nriga != UNASSIGNED)    
 | 
			
		||||
  {                       
 | 
			
		||||
    TRiga_scadenze& scaden = rata(nriga, nrata);
 | 
			
		||||
    empty = scaden.modifica_pagamento(new_pag,
 | 
			
		||||
                                      old_ap, old_abb, old_diffcam,  
 | 
			
		||||
                                      new_ap, new_abb, new_diffcam);
 | 
			
		||||
  }                            
 | 
			
		||||
  else
 | 
			
		||||
  {                                    
 | 
			
		||||
    const TRectype& old_pag = pagamento(nriga, nrata, nrigp);
 | 
			
		||||
    
 | 
			
		||||
    TRiga_partite& sum = riga(nrigp);
 | 
			
		||||
    empty = sum.update(old_pag, new_pag, PART_IMPORTO);
 | 
			
		||||
    sum.update(old_pag, new_pag, PART_IMPORTOVAL);
 | 
			
		||||
    sum.update(old_pag, new_pag, PART_RITENUTE);
 | 
			
		||||
    
 | 
			
		||||
    if (new_pag.get_real(PAGSCA_IMPORTO).is_zero())        
 | 
			
		||||
      _unassigned.destroy_row(nrigp);
 | 
			
		||||
    else    
 | 
			
		||||
      _unassigned.row(nrigp, FALSE) = new_pag;
 | 
			
		||||
 | 
			
		||||
    old_ap = new_ap = ' ';       // Non ci possono essere abbuoni di sorta!
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  if (empty && !utilizzata(nrigp))
 | 
			
		||||
    _part.destroy_row(nrigp);
 | 
			
		||||
@ -710,8 +743,13 @@ bool TPartita::modifica_pagamento(const TRectype& new_pag,
 | 
			
		||||
 | 
			
		||||
bool TPartita::chiusa(bool update)
 | 
			
		||||
{ 
 | 
			
		||||
  const TRiga_partite& row = riga(first());
 | 
			
		||||
  bool chiusa = row.get_bool(PART_CHIUSA);
 | 
			
		||||
  bool chiusa = FALSE;          
 | 
			
		||||
  const int ultima = last();
 | 
			
		||||
  if (ultima > 0)
 | 
			
		||||
  {
 | 
			
		||||
    const TRiga_partite& row = riga(ultima);
 | 
			
		||||
    chiusa = row.get_bool(PART_CHIUSA);
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  if (update)
 | 
			
		||||
  {
 | 
			
		||||
@ -738,7 +776,7 @@ bool TPartita::chiusa(bool update)
 | 
			
		||||
      chiusa = forse_chiusa;
 | 
			
		||||
      for (p = last(); p > 0; p = pred(p))
 | 
			
		||||
      {
 | 
			
		||||
        TRiga_partite& part = riga(first());
 | 
			
		||||
        TRiga_partite& part = riga(p);
 | 
			
		||||
        part.put(PART_CHIUSA, chiusa);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
@ -770,13 +808,7 @@ TPartita* TPartite_array::find(const TBill& clifo, int anno, const char* num, bo
 | 
			
		||||
  if (p == NULL && create)
 | 
			
		||||
  {
 | 
			
		||||
    p = new TPartita(clifo, anno, num);
 | 
			
		||||
    if (p->ok()) 
 | 
			
		||||
      add(k, p);
 | 
			
		||||
    else 
 | 
			
		||||
    {
 | 
			
		||||
      delete p;
 | 
			
		||||
      p = NULL;
 | 
			
		||||
    }
 | 
			
		||||
    add(k, p);
 | 
			
		||||
  }
 | 
			
		||||
  return p;
 | 
			
		||||
}
 | 
			
		||||
@ -792,7 +824,7 @@ TPartita* TPartite_array::find(const TRectype& r, bool create)
 | 
			
		||||
TPartita& TPartite_array::partita(const TBill& clifo, int anno, const char* num)
 | 
			
		||||
{                           
 | 
			
		||||
  TPartita* game = find(clifo, anno, num, TRUE);
 | 
			
		||||
  CHECKS(game, "Partita errata ", num);
 | 
			
		||||
  CHECK(game, "Partita errata");
 | 
			
		||||
  return *game;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -803,6 +835,12 @@ TPartita& TPartite_array::partita(const TRectype& r)
 | 
			
		||||
  return *game;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool TPartite_array::destroy(const TBill& clifo, int anno, const char* num)
 | 
			
		||||
{
 | 
			
		||||
  const TString& k = key(clifo, anno, num);
 | 
			
		||||
  return remove(k);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool TPartite_array::write(bool re)
 | 
			
		||||
{       
 | 
			
		||||
  int err = NOERR;
 | 
			
		||||
@ -843,10 +881,7 @@ int TPartite_array::add_numreg(long nreg)
 | 
			
		||||
    TCursor cur(&rel, "", 2, &filter, &filter);
 | 
			
		||||
    
 | 
			
		||||
    for (cur = 0; cur.ok(); ++cur)
 | 
			
		||||
    {
 | 
			
		||||
      TPartita& p = partita(part); // Aggiungi partita se non esiste gia'
 | 
			
		||||
      p.remove_unassigned(nreg);   // Togli righe non assegnate
 | 
			
		||||
    }  
 | 
			
		||||
      partita(part);                // Aggiungi partita se non esiste gia'
 | 
			
		||||
 | 
			
		||||
    _numreg = nreg;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@ -39,8 +39,9 @@ protected: // TRectype
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
  const TRectype& row(int r) const { return _recarr.row(r); }
 | 
			
		||||
  TRectype& row(int r) { return _recarr.row(r, FALSE); }
 | 
			
		||||
  TRectype& row(int r) { return _recarr.row(r, TRUE); }
 | 
			
		||||
  TRectype& new_row(int r = -1) { return _recarr.row(r > 0 ? r : last()+1, TRUE); }
 | 
			
		||||
  void destroy_rows() { _recarr.destroy_rows(); }
 | 
			
		||||
  
 | 
			
		||||
  int first() const { return _recarr.first_row(); }
 | 
			
		||||
  int last() const { return _recarr.last_row(); }
 | 
			
		||||
@ -95,10 +96,6 @@ class TRiga_partite : public TTree_rectype
 | 
			
		||||
  friend class TRiga_scadenze;
 | 
			
		||||
  TPartita* _partita;
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
  bool update(const TRectype& vec, const TRectype& nuo, const char* field);
 | 
			
		||||
  bool update(const TImporto& vec, const TImporto& nuo, const char* sez, const char* val);
 | 
			
		||||
  
 | 
			
		||||
public: // TTree_rectype     
 | 
			
		||||
  virtual TObject* dup() const { return new TRiga_partite(*this); }
 | 
			
		||||
  virtual int read(TBaseisamfile& f, word op);
 | 
			
		||||
@ -113,6 +110,9 @@ public:
 | 
			
		||||
  char sezione() const { return get_char(PART_SEZ); }
 | 
			
		||||
  bool in_valuta() const { return get(PART_CODVAL).not_empty(); }
 | 
			
		||||
 | 
			
		||||
  bool update(const TRectype& vec, const TRectype& nuo, const char* field);
 | 
			
		||||
  bool update(const TImporto& vec, const TImporto& nuo, const char* sez, const char* val);
 | 
			
		||||
 | 
			
		||||
  TPartita& partita() const { CHECK(_partita, "Partita nulla"); return *_partita; }
 | 
			
		||||
 | 
			
		||||
  TRiga_partite(TPartita* game);
 | 
			
		||||
@ -122,8 +122,6 @@ public:
 | 
			
		||||
 | 
			
		||||
class TPartita : public TObject
 | 
			
		||||
{             
 | 
			
		||||
  enum { UNASSIGNED = 9999 };
 | 
			
		||||
 | 
			
		||||
  TRecord_array _part;
 | 
			
		||||
  TRecord_array _unassigned;
 | 
			
		||||
  
 | 
			
		||||
@ -131,10 +129,15 @@ public: // TObject
 | 
			
		||||
  virtual bool ok() const { return _part.rows() > 0; }
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
  enum { UNASSIGNED = 9999 };
 | 
			
		||||
 | 
			
		||||
  TRiga_partite& riga(int r) const { return (TRiga_partite&)_part.row(r); } 
 | 
			
		||||
  TRiga_partite& nuova_riga();
 | 
			
		||||
  void  rimuovi_riga(int r) { _part.destroy_row(r); }
 | 
			
		||||
  TRiga_scadenze& rata(int nriga, int nrata) const;
 | 
			
		||||
  TRectype& pagamento(int nriga, int nrata, int nrigp);
 | 
			
		||||
  int rata_pagata(int nriga, int nrata) const;
 | 
			
		||||
  bool esiste(int nriga, int nrata = 0, int nrigp = 0) const;
 | 
			
		||||
 | 
			
		||||
  int succ(int r) const { return _part.succ_row(r); } 
 | 
			
		||||
  int pred(int r) const { return _part.pred_row(r); } 
 | 
			
		||||
@ -143,8 +146,8 @@ public:
 | 
			
		||||
 | 
			
		||||
  bool reread();         
 | 
			
		||||
  bool read(const TBill& clifo, int anno, const char* num);
 | 
			
		||||
  bool write(bool re = FALSE);
 | 
			
		||||
  bool rewrite() { return write(TRUE); }
 | 
			
		||||
  bool write(bool re = FALSE) const;
 | 
			
		||||
  bool rewrite() const { return write(TRUE); }
 | 
			
		||||
  bool remove();
 | 
			
		||||
  
 | 
			
		||||
  int mov2rig(long nreg, int rmov) const;
 | 
			
		||||
@ -153,7 +156,7 @@ public:
 | 
			
		||||
  int primo_pagamento(long nreg = -1l) const; 
 | 
			
		||||
  
 | 
			
		||||
  bool utilizzata(int r) const;    // Controlla se esistono pagamenti sommati alla riga r
 | 
			
		||||
  bool remove_unassigned(long nreg);
 | 
			
		||||
  TRecord_array& unassigned() { return _unassigned; }
 | 
			
		||||
  
 | 
			
		||||
  bool chiusa(bool update = FALSE);
 | 
			
		||||
 | 
			
		||||
@ -199,6 +202,8 @@ public:
 | 
			
		||||
  TPartita* exist(const TRectype& part) const
 | 
			
		||||
  { return ((TPartite_array*)this)->find(part, FALSE); }
 | 
			
		||||
  
 | 
			
		||||
  bool destroy(const TBill& clifo, int anno, const char* num);
 | 
			
		||||
  
 | 
			
		||||
  bool write(bool re = FALSE);
 | 
			
		||||
  bool rewrite() { return write(TRUE); }
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user