campo-sirio/cg/cg0201.cpp
alex 7235cf28fa Patch level : 10.0 430
Files correlati     : cg0.exe cg1.exe
Ricompilazione Demo : [ ]
Commento

Bug 0001462

Aggiungere secondi riga indirizzo di 35 caratteri nella scheda indirizzi presente nella’anagrafica clienti.
La seconda riga indirizzo deve essere inserita nella stampa clienti/fornitori (prospetto vendite)

Bug 0001463

il cliente segnala che gli indirizzi di spedizione del cliente 1, se vengono annullati tutti, al nuovo richiamo del cliente ricompaiono come prima.

Ho verificato che sul file indsped in realtà quegli indirizzi sono relativi al cliente 17 (e sono i primi del file). Il cliente 17 mi sembra formalmente valido.

l'area dati cui fare riferimento è nella cartella ftp://www.aga.it/Ilaria/20090928.zip [^]


git-svn-id: svn://10.65.10.50/trunk@19369 c028cbd2-c16b-5b4b-a496-9718f37d4682
2009-10-04 11:56:19 +00:00

149 lines
2.9 KiB
C++
Executable File

#include "cg0201.h"
#include <clifo.h>
#include <indsp.h>
// Definizione dei metodi relativi alla classe TClifoVI
TClifoVI::TClifoVI() : TRelation(LF_CLIFO), _oldindirizzi(0), _gesven(FALSE)
{
add(LF_CFVEN,"TIPOCF==TIPOCF|CODCF==CODCF");
add(LF_INDSP,"TIPOCF==TIPOCF|CODCF==CODCF");
}
void TClifoVI::destroy_rows()
{
_indirizzi.destroy();
}
TRectype& TClifoVI::indirizzo(int i)
{
TRectype *r=(TRectype*)_indirizzi.objptr(i);
if (r == NULL)
{
r = new TRectype(LF_INDSP);
_indirizzi.add(r,i);
}
return *r;
}
int TClifoVI::read_indirizzi()
{
destroy_rows();
if (_gesven)
{
const TLocalisamfile& rind = lfile(LF_INDSP);
for (bool ok=is_first_match(LF_INDSP); ok; ok=next_match(LF_INDSP))
{
const int nriga=rind.get_int(IND_CODIND) -1;
indirizzo(nriga)=rind.curr();
}
_oldindirizzi=indirizzi_items();
}
return NOERR;
}
int TClifoVI::read(TIsamop op, TReclock lockop)
{
int err = file().read(op,lockop);
position_rels();
if (err == NOERR)
read_indirizzi();
return err;
}
int TClifoVI::write_rec(bool re, const TRectype& rec, TLocalisamfile& f)
{
if (re)
{
const bool scrivi= (f.rewrite(rec)!=NOERR);
if (scrivi) f.write(rec);
} else
f.write(rec);
return f.status();
}
int TClifoVI::cancella(TLocalisamfile& f, int da, int a)
{
const char tipocf=lfile().get(IND_TIPOCF)[0];
const long codcf=lfile().get_long(IND_CODCF);
for (int i=da; i<=a;i++)
{
f.zero();
f.put(IND_TIPOCF,tipocf);
f.put(IND_CODCF,codcf);
f.put(IND_CODIND,i);
if (f.read(_isequal,_lock)==NOERR)
f.remove();
}
return f.status();
}
int TClifoVI::registra(bool re, bool force)
{
TLocalisamfile& c=lfile(LF_CLIFO);
int err=write_rec(re,c.curr(),c);
if (err!=NOERR) return err;
TLocalisamfile& v = lfile(LF_CFVEN);
err = write_rec(TRUE,v.curr(),v);
if (err!=NOERR) return err;
// Put here gest_vend() discrimination
if (_gesven)
{
TLocalisamfile& rind=lfile(LF_INDSP);
const char tipocf=c.get(CLI_TIPOCF)[0];
const long codcf=c.get_long(CLI_CODCF);
int i;
for (i=0; i<indirizzi_items(); i++)
{
if (!re)
{
indirizzo(i).put(IND_TIPOCF,tipocf);
indirizzo(i).put(IND_CODCF,codcf);
}
err=write_rec(TRUE,indirizzo(i),rind);
}
if (i<_oldindirizzi)
cancella(rind,i+1,_oldindirizzi);
_oldindirizzi=indirizzi_items();
}
// END of gest_vend() discrimination
return err;
}
int TClifoVI::write(bool force)
{
_oldindirizzi=0;
return registra(FALSE,force);
}
int TClifoVI::rewrite(bool force)
{
return registra(TRUE,force);
}
int TClifoVI::remove()
{
TLocalisamfile& c=lfile(LF_CLIFO);
c.remove();
// Put here gest_vend() discrimination
if (_gesven)
{
TLocalisamfile& v=lfile(LF_CFVEN);
TLocalisamfile& rind=lfile(LF_INDSP);
cancella(rind,1,_oldindirizzi);
v.remove();
}
_oldindirizzi=0;
return c.status();
}