campo-sirio/db/dbcv09.cpp
alex 12d9315082 Patch level : xx.7.054
Files correlati     :
Ricompilazione Demo : [ ]
Commento            :
Riportata la versione 1.7 patch 054 aga sul main trunk


git-svn-id: svn://10.65.10.50/trunk@9659 c028cbd2-c16b-5b4b-a496-9718f37d4682
2001-05-02 13:40:49 +00:00

1303 lines
30 KiB
C++
Executable File
Raw Blame History

#include "..\db\dblib.h"
#include "dbcv09.h"
#include "dbcv00a.h"
#include <relation.h>
#include <execp.h>
#include "..\mg\anamag.h"
#include "..\mg\mglib.h"
void delete_files(const char *wild)
{
TString_array transactions;
list_files(wild, transactions);
FOR_EACH_ARRAY_ROW(transactions, row, name)
remove(*name);
}
// ******************************************
bool force_write(TLocalisamfile & f)
{
int err=f.write();
if (err != NOERR) // fallisce se c'e' gia'
err=f.rewrite();
return err;
}
// ******************************************
long method2location(int method)
{
switch (method)
{
case 0: return 0;
case 1: return 1530;
case 2: return 59;
case 3: return 2008;
case 4: return 63;
case 5: return 872;
case 6: return 66;
case 7: return 1700;
case 8: return 115;
case 9: return 935;
case 10: return 911;
case 11: return 1812;
case 12: return 230;
case 13: return 433;
case 14: return 272;
case 15: return 1382;
case 16: return 467;
case 17: return 1352;
case 18: return 233;
case 19: return 498;
case 20: return 651;
case 21: return 511;
case 22: return 519;
case 23: return 2017;
case 24: return 798;
case 25: return 582;
case 26: return 618;
case 27: return 1190;
case 28: return 1360;
case 29: return 1727;
case 30: return 2081;
case 31: return 1330;
case 32: return 565;
case 33: return 2079;
case 34: return 2194;
case 35: return 229;
case 36: return 2280;
case 37: return 60;
case 38: return 50037;
case 39: return 1154;
case 40: return 2153;
case 41: return 1569; // M&M srl
case 42: return 1569;
case 43: return 2237;
case 44: return 2668; // rotolito
case 45: return -3; // sconfezionamento
}
return -99; // terzista generico
}
int location2method(long location)
{
switch (location)
{
case 0: return 0;
case 1530: return 1;
case 59: return 2;
case 2008: return 3;
case 63: return 4;
case 872: return 5;
case 66: return 6;
case 1700: return 7; // Ex COVER
case 115: return 8;
case 935: return 9;
case 911: return 10;
case 1812: return 11;
case 230: return 12;
case 433: return 13;
case 272: return 14;
case 1382: return 15;
case 467: return 16;
case 1352: return 17;
case 233: return 18;
case 498: return 19;
case 651: return 20;
case 511: return 21;
case 519: return 22;
case 2017: return 23;
case 798: return 24;
case 582: return 25;
case 618: return 26;
case 1190: return 27;
case 1360: return 28;
case 1727: return 29;
case 2081: return 30;
case 1330: return 31;
case 565: return 32;
case 2079: return 33;
case 2194: return 34;
case 229: return 35;
case 2280: return 36;
case 60: return 37;
case 50037: return 38;
case 1154: return 39;
case 2153: return 40;
case -1: return 41; // M&M srl
case 1569: return 42;
case 2237: return 43;
case 2668: return 44; // ??
case -3: return 45; // sconfezionamento
}
return 99; // terzista generico
}
void delete_boms(bool lavsexcl,bool onlylavs)
{
TWait_cursor hourglass;
TIndwin info(60,"Cancellazione distinte...",FALSE,FALSE);
TLocalisamfile dist(LF_DIST);
TLocalisamfile rdist(LF_RDIST);
// distinte
for (long i=dist.items(); i>0; i--)
{
dist.readat(i);
const bool is_lav=!cache().get("LAV",dist.get("CODDIST")).empty();
if (lavsexcl==!is_lav || onlylavs==is_lav)
{
// non e' una lavorazione
dist.remove();
}
if ((i%TICK)==0)
do_events();
}
// righe distinte
for (i=rdist.items(); i>0; i--)
{
rdist.readat(i);
const bool is_lav=!(rdist.get("TIPO")!="L");
if (lavsexcl==!is_lav || onlylavs==is_lav)
{
// non e' una lavorazione
rdist.remove();
}
if ((i%TICK)==0)
do_events();
}
}
const char * descr_method(int method)
{
switch (method)
{
case 1: return ("Areosol lab. Italia");
case 2: return ("Areosol service Italia");
case 3: return ("Bertoncini");
case 4: return ("Bregaglio");
case 5: return ("CABL service");
case 6: return ("CIP4");
case 7: return ("Stabilimenti Cover di PD/PR");
case 8: return ("Deskin");
case 9: return ("Farmol Safca");
case 10: return ("FATAI Nyl");
case 11: return ("Hydra Farm.");
case 12: return ("IMAPACK");
case 13: return ("Interchem Italia");
case 14: return ("Ivers Lee Italia");
case 15: return ("Liquichim");
case 16: return ("Manilab");
case 17: return ("MP");
case 18: return ("Niada");
case 19: return ("Noviplast");
case 20: return ("OCE");
case 21: return ("Pantapack");
case 22: return ("PimepackDue");
case 23: return ("Pernici Cereira");
case 24: return ("Re.Le.Vi.");
case 25: return ("Synthesis");
case 26: return ("Treccificio BS");
case 27: return ("Tosvar Areosol");
case 28: return ("Unifill");
case 29: return ("Unispray");
case 30: return ("Artical");
case 31: return ("La cosmografica");
case 32: return ("Chizzoni");
case 33: return ("E.Bonetto Lito");
case 34: return ("CT Service srl");
case 35: return ("M&M sas");
case 36: return ("Brelil");
case 37: return ("Akronimex");
case 38: return ("Globol UK");
case 39: return ("Lito Sestese");
case 40: return ("Serialfa");
case 41: return ("M&M"); // M&M srl
case 42: return ("M&M srl");
case 43: return ("ERREDI ser. srl");
case 44: return ("Rotolito"); // rotolito
}
return "-- Unknown --";
}
void num_mag2main_imp(int magno, TString & codimp)
{
switch (magno)
{
case 91: // magazzino terzisti (suddiviso in locazioni)
case 93: // magazzino terzisti (suddiviso in locazioni)
case 25: // magazzino DI FATTURAZIONE
case 26: // magazzino interno
codimp="SE";
break;
case 92: // magazzino terzisti (suddiviso in locazioni)
case 27: // magazzino DI FATTURAZIONE
case 28: // magazzino interno
codimp="TS";
break;
default:
codimp="XX";
}
}
void complete_gmc(TString & gmc,const char *iclas)
{
TString des;
TString16 subgmc(iclas);
char type;
if (subgmc=="AM") {
type = 'H';
des="Ambipur";
} else if (subgmc=="IN") {
type = 'H';
des="Ambipur";
} else if (subgmc=="KM") {
type = 'H';
des="Kiwi Mobili";
} else if (subgmc=="KS") {
type = 'H';
des="Kiwi Shoecare";
} else if (subgmc=="OS") {
type = 'H';
des="Shoe care generico";
} else if (subgmc=="PV") {
type = 'H';
des="Pulizia vetri";
} else if (subgmc=="HA") {
type = 'H';
des="House care generico";
} else if (subgmc=="OC") {
type = 'O';
des="Oral care generico";
} else if (subgmc=="SB") {
type = 'O';
des="Oral care Smithcline Beecham";
} else if (subgmc=="AV") {
type = 'P';
des="Acqua Velva";
} else if (subgmc=="BA") {
type = 'P';
des="Badedas";
} else if (subgmc=="BR") {
type = 'P';
des="Brylcreem";
} else if (subgmc=="DE") {
type = 'P';
des="Depilzero ";
} else if (subgmc=="FB") {
type = 'P';
des="Fissan Baby";
} else if (subgmc=="FO") {
type = 'P';
des="Fissan body generico";
} else if (subgmc=="GL") {
type = 'P';
des="Glysolid";
} else if (subgmc=="GP") {
type = 'P';
des="General purpose personal case";
} else if (subgmc=="OB") {
type = 'P';
des="Personal care generico";
} else if (subgmc=="QU") {
type = 'P';
des="Quickies";
} else if (subgmc=="SA") {
type = 'P';
des="Savane";
} else if (subgmc=="SO") {
type = 'P';
des="Super soap";
} else if (subgmc=="SX") {
type = 'P';
des="Sanex";
} else if (subgmc=="WI") {
type = 'P';
des="Williams";
} else
return;
gmc << type << 'C';
if (cache().get("GMC",gmc).empty())
{
cache().discard("GMC",gmc);
TTable ttt("GMC");
ttt.put("CODTAB",gmc);
ttt.put("S0",type=='H' ? "House care" : (type=='P' ? "Personal care" :"Oral care"));
ttt.write();
}
gmc << subgmc;
if (cache().get("GMC",gmc).empty())
{
cache().discard("GMC",gmc);
TTable ttt("GMC");
ttt.put("CODTAB",gmc);
ttt.put("S0",des);
ttt.write();
}
}
const char * check_clasdog(long stdo)
{
static TString cld;
if (stdo)
{
cld.format("%010ld",stdo);
if (cache().get("%CLD",cld).empty())
{
cache().discard("%CLD",cld);
TTable ttt("%CLD");
ttt.put("CODTAB",cld);
ttt.put("S0","???");
ttt.write();
}
}
else
cld.cut(0);
return cld;
}
void imploc2codmagdep(TString &codimp,TString &location, TString &codmag)
{
int terzista = 0;
codmag = codimp;
codmag << 1;
if (!location.blank())
{
// must be a terzist....
if (atoi(location))
{
terzista = location2method(atoi(location));
if (terzista == 7)
{
if (codimp!="SE")
{
if (codimp=="SE3")
codmag = "SE1";
else
codmag = "TS1";
}
}
}
if (location == "CICCA")
codmag << "C0";
else if (location == "CMINT")
codmag << "C1";
else if (location == "COMMEX")
codmag << "X0";
else if (terzista>0)
{
codmag << format("%02d",terzista);
codimp = "XT";
} else if (!location.blank())
error_box("Locazione sconosciuta '%s'",(const char *)location);
} else {
codmag << "PF";
}
}
void codimp2codmagdep(TString &codimp,int terzista, TString &codmag)
{
codmag = codimp;
codmag << 1;
if (terzista>0)
{
codmag << format("%02d",terzista);
codimp = "XT";
} else {
codmag << "PF";
}
if (terzista == 7)
{
if (codimp=="SE")
codimp = "PR";
else
codimp = "PD";
}
}
void num_mag2cod_imp(int magno, TString & codimp)
{
switch (magno)
{
case 91:
case 93:
codimp="SE3";
break;
case 25:
case 26:
codimp="SE";
break;
case 92:
codimp="TS3";
break;
case 27:
case 28:
codimp="TS";
break;
default:
codimp="XX";
}
}
int cod_mag2num_mag(TString & codmagdep)
{
const int terzista = atoi(codmagdep.sub(3));
// if (terzista!=7)
// {
TString codmag = codmagdep.left(3);
if (codmag=="SE1")
return terzista ? 91 : 26;
if (codmag=="TS1")
return terzista ? 92 : 28;
if (!codmag.blank())
if (codmag != "VGG" && codmag != "SE3" && codmag != "TS3")
{
codmagdep.overwrite("07",3);
if (codmag == "COM")
return 26;
if (codmag == "PD1")
return 92;
if (codmag == "PR1")
return 91;
error_box("Che minchia di magazzino <20> %s?", (const char *)codmag);
}
// }
return -1;
}
void coddep2location(const char * codmag, const char * coddep, TString & codlocation, int & nummag)
{
codlocation.cut(0);
if (coddep[0]>='0' && coddep[0]<='9')
codlocation = format("%02d", method2location(atoi(coddep))) ;
else if (coddep == "C0")
codlocation = "CICCA";
else if (coddep == "C1")
codlocation = "CMINT";
else if (coddep == "X0")
codlocation = "COMMEX";
}
const TString & converti_codval(const TString & codval)
{
static TString4 _codval;
_codval = codval;
if (codval == "LIT")
_codval.cut(0);
else if (codval == "NLG")
_codval = "HLG";
return _codval;
}
void cambio_fisso(const TString & codval, real & val)
{
if (codval == "DEM")
val = 989.99913;
else if (codval == "FRF")
val = 295.182458;
else if (codval == "ESP")
val = 11.637217;
else if (codval == "IEP")
val = 2458.555749;
else if (codval == "HLG" || codval == "NLG" )
val = 878.641019;
else if (codval == "")
val = 0;
}
void set_workcenter_code(TString & stdwrkc, const char * codimp, long wrkc, int bomm)
{
int type=int (wrkc/100);
if ( type == 1010 || (bomm != 0 && bomm != 99)) // non e' una linea di confezionamento di Segrate o terzista
{
int lineno;
if (type == 1010 )
{
lineno=int (wrkc - type*100);
stdwrkc = codimp;
} else {
lineno= 100;
stdwrkc="X";
}
switch (lineno)
{
// centri di lavoro interni all'impianto
case 1:
case 2:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
case 14:
stdwrkc << format("%03d", lineno);
break;
case 15:
stdwrkc << "999";
break;
// centri di lavoro dei terzisti
case 100:
stdwrkc << format("%02d", bomm);
stdwrkc << codimp;
break;
}
} else {
stdwrkc="";
}
}
void add_stdlabors(const char * item, long wrkc, int bomm)
{
int type=int (wrkc/100);
if ( type == 1010 || (bomm != 0 && bomm != 99)) // non e' una linea di confezionamento di Segrate o terzista
{
// ************
// lav su SEGRATE
TString8 postcode("SE");
if (bomm != 0 )
postcode.format("X%02d%s", bomm, "SE");
TString tmpcode(item);
tmpcode << "__" << postcode;
TLocalisamfile rdist(LF_RDIST);
rdist.put("CODDIST",tmpcode);
rdist.read(_isgteq);
int nrig=0;
while (!rdist.eof() && rdist.get("CODDIST")==item)
{
if (rdist.get("TIPO")=="L") break;
rdist.next();
nrig++;
}
if (rdist.eof() || rdist.get("CODDIST")!=item)
{
// nessuna lavorazione precedentemente inserita
int lineno;
if (bomm != 0 )
lineno= 100;
else
lineno=int (wrkc - type*100);
int pzxca;
switch (lineno)
{
case 1:
tmpcode="SE_ALCOL1";
pzxca=12;
break;
case 2:
tmpcode="SE_DOCCIA";
pzxca=12;
break;
case 4:
tmpcode="SE_GLYSOL";
pzxca=12;
break;
case 5:
tmpcode="SE_BRYLCR";
pzxca=12;
break;
case 6:
tmpcode="SE_BAGNOS";
pzxca=12;
break;
case 7:
tmpcode="SE_SAPONE";
pzxca=12;
break;
case 8:
tmpcode="SE_SAPRIC";
pzxca=12;
break;
case 9:
tmpcode="SE_DENTIF";
pzxca=24;
break;
case 10:
tmpcode="SE_PENTO";
pzxca=12;
break;
case 14:
tmpcode="SE_ALC.EDT";
pzxca=12;
break;
case 15:
tmpcode="SE_MANGEN";
pzxca=0;
break;
// lavorazioni terzisti
case 100:
tmpcode="SE_RICONF";
pzxca=12;
break;
default:
error_box("Linea sconosciuta per l'articolo %s:%d",item,lineno);
lineno=0;
}
TString16 um=cache().get(LF_DIST,item).get("UM");
if (lineno && !um.empty())
{
TToken_string key(item);
key.add("1",1);
if (cache().get(LF_UMART,key).get("UM")=="CA")
{
if (pzxca)
tmpcode<< "_X" << pzxca;
}
else if (cache().get(LF_UMART,key).get("UM")=="PZ")
tmpcode<< "_SL";
real fc;
if (cache().get(LF_UMART,key).get("UM")==um)
{
fc=cache().get(LF_UMART,key).get_real("FC");
} else {
key.add("2",1);
fc=cache().get(LF_UMART,key).get_real("FC");
}
if (cache().get("LAV",tmpcode).empty())
{
if (noyes_box("Impossibile trovare la lavorazione %s per l'articolo %s. Inserimento automatico?", (const char *)tmpcode, item))
{
cache().discard("LAV",tmpcode);
TTable ttt("LAV");
ttt.put("CODTAB",tmpcode);
ttt.put("S0","???");
ttt.put("S6",cache().get(LF_UMART,key).get("UM"));
ttt.write();
}
}
rdist.put("CODDIST",item);
rdist.put("NRIG",nrig+1);
rdist.put("TIPO","L");
rdist.put("CODCOMP",tmpcode);
rdist.put("UM",um);
rdist.put("EXPR",fc.string());
rdist.write();
}
}
}
}
bool sposta_lavs()
{
TIndwin iw(80, "Spostamento lavorazioni sulle varianti fantasma di impianto",FALSE,FALSE);
int err;
int nrig,oldnrig;
long distno=1L;
TString cod="";
TLocalisamfile rdist(LF_RDIST);
err = rdist.read(_isfirst);
bool some_moved=FALSE;
while (err == NOERR)
{
cod = rdist.get("CODDIST");
if ((distno%TICK)==1)
{
iw.set_text(format("Riga distinta n. %ld", distno));
do_events();
}
distno++;
oldnrig=rdist.get_int("NRIG");
if (*rdist.get("TIPO") == 'L' && cod.find("__")<=0)
{
// lavorazione
TString newcod(cod);
TString codlav(rdist.get("CODCOMP"));
TString4 codimp(codlav.left(2));
newcod << "__";
if (codimp == "L_")
{
newcod << "SE";
codlav = codlav.sub(1);
codlav.insert("SE");
rdist.put("CODCOMP", codlav);
}
else
newcod << codimp;
rdist.put("CODDIST", newcod);
rdist.put("NRIG", 100+oldnrig);
rdist.write();
rdist.put("CODDIST", cod);
rdist.put("NRIG", oldnrig);
rdist.remove();
some_moved=TRUE;
}
rdist.put("NRIG",oldnrig+1);
err = rdist.read(_isgteq);
nrig++;
}
return some_moved;
}
bool build2levmsp()
{
if (!noyes_box("La presenza di varianti non di stabilimento identifichera' una distinta NON master. Confermi?"))
return FALSE;
TIndwin iw(80, "Creazione articoli MASTER per MSP a 2 livelli",FALSE,FALSE);
int err;
bool oldmaster,master;
long artdist=1L, numdist=1L;
TString8 variante;
TString cod="";
TString distinta="",codvariant="";
TLocalisamfile dist(LF_DIST),dist2(LF_DIST);
err = dist.read(_isfirst);
while (err == NOERR)
{
cod = dist.get("CODDIST");
if ((numdist%TICK)==1)
{
iw.set_text(format("Distinta articolo n. %ld/%ld", artdist,numdist));
do_events();
}
numdist++;
int var=cod.find("__");
if (var <=0) // non variante
{
distinta=cod;
oldmaster=cache().get(LF_DIST,distinta).get_bool("MASTER");
if (cache().get(LF_ANAMAG,distinta).get("GRMERC")[0]=='B')
master=FALSE;
else
master=TRUE;
codvariant=distinta;
codvariant << "__";
var = codvariant.len();
dist2.put("CODDIST",codvariant);
err = dist2.read(_isgteq);
while (master && err == NOERR)
{
cod = dist2.get("CODDIST");
if (cod.left(var)!=codvariant)
break;
if (cod[var+2]>'\0') // variante non di stabilimento
master=FALSE;
err = dist2.next();
}
if (master!=oldmaster)
{
dist2.put("CODDIST",distinta);
dist2.read();
dist2.put("MASTER",master);
dist2.rewrite();
}
cache().discard(LF_DIST,distinta);
}
err = dist.next();
}
return TRUE;
}
bool rinumera_dist()
{
TIndwin iw(80, "Rinumerazione progr. righe distinte ...",FALSE,FALSE);
bool some_done=FALSE;
int err;
int nrig,oldnrig;
long distno=1L;
TString cod="";
TLocalisamfile rdist(LF_RDIST);
err = rdist.read(_isfirst);
while (err == NOERR)
{
if (cod != rdist.get("CODDIST"))
{
if ((distno%TICK)==1)
{
iw.set_text(format("Rinumerazione distinta n. %ld", distno));
do_events();
}
cod = rdist.get("CODDIST");
nrig=1;
distno++;
}
oldnrig=rdist.get_int("NRIG");
if (oldnrig != nrig)
{
rdist.put("NRIG",nrig);
err = rdist.write();
rdist.put("NRIG",oldnrig);
err = rdist.remove();
some_done=TRUE;
rdist.put("NRIG",oldnrig+1);
err = rdist.read(_isgteq);
} else
err = rdist.next();
nrig++;
}
return some_done;
}
bool rinumera_mags()
{
TIndwin iw(80, "Rinumerazione righe di giacenza ...",FALSE,FALSE);
bool some_done=FALSE;
int err;
int nrig,oldnrig=0L;
long distno=1L;
TString cod="";
TLocalisamfile mag(LF_MAG);
err = mag.read(_isfirst);
while (err == NOERR)
{
oldnrig=mag.get_int("NRIGA");
if (cod != mag.get("CODART"))
{
distno++;
if ((distno%TICK)==1)
{
iw.set_text(format("Rinumerazione giacenze: riga %ld", distno));
do_events();
}
cod = mag.get("CODART");
nrig=1;
}
if (oldnrig != nrig)
{
mag.put("NRIGA",nrig);
err = mag.write();
mag.put("NRIGA",oldnrig);
err = mag.remove();
some_done=TRUE;
}
mag.put("NRIGA",oldnrig+1);
err = mag.read(_isgteq);
nrig++;
}
return some_done;
}
bool rinumera_ums()
{
TIndwin iw(80, "Rinumerazione unita' di misura ...",FALSE,FALSE);
bool some_done=FALSE;
int err;
int nrig,oldnrig=0L;
long distno=1L;
TString cod="";
TLocalisamfile umart(LF_UMART);
err = umart.read(_isfirst);
while (err == NOERR)
{
oldnrig=umart.get_int("NRIGA");
if (cod != umart.get("CODART"))
{
distno++;
if ((distno%TICK)==1)
{
iw.set_text(format("Rinumerazione UMS: riga %ld", distno));
do_events();
}
cod = umart.get("CODART");
nrig=1;
}
if (oldnrig != nrig)
{
umart.put("NRIGA",nrig);
err = umart.write();
umart.put("NRIGA",oldnrig);
err = umart.remove();
some_done=TRUE;
}
umart.put("NRIGA",oldnrig+1);
err = umart.read(_isgteq);
nrig++;
}
return some_done;
}
// Imposta la formula delle varianti sui finiti e semilavorati
void setformulavar()
{
TIndwin iw(80, "Impostazione formula delle varianti ...",FALSE,FALSE);
int err;
long distno=1L;
TLocalisamfile dist(LF_DIST);
err = dist.read(_isfirst);
TString varvar;
TString cod(' ',20);
while (err == NOERR)
{
if ((distno%TICK)==1)
{
iw.set_text(format("Impostazione formula distinta n. %ld", distno));
do_events();
}
cod=dist.get("CODDIST");
if (cod.find("__")<0)
{
const TRectype &ana=cache().get(LF_ANAMAG,cod);
if (!ana.empty())
{
varvar="VARIANTE=_DISTINTA+\"__\"+";
// se non e' un fantasma lo definisce come variante (distinta contenente una riga di tipo variabile)
// se e' un finito, anche varianti di sconfezionamento
if (ana.get(ANAMAG_GRMERC)[0]=='F')
//varvar << "IF(_IMPIANTO==\"XT\",_LINEA,IF(_LINEA?=\"??9??\",_LINEA,_IMPIANTO))" ;
varvar << "IF((_IMPIANTO==\"XT\")||(_LINEA?=\"??9??\"),_LINEA,_IMPIANTO)" ;
else
varvar << "IF(_IMPIANTO==\"XT\",_LINEA,_IMPIANTO)" ;
if (dist.get("PARAMETRI").blank() ||
(varvar != dist.get("PARAMETRI") &&
yesno_box("Setto la formula di %s\nattuale:%s;\nnuova :%s",(const char *)cod,(const char *)dist.get("PARAMETRI") ,(const char *)varvar)))
{
dist.put("PARAMETRI",varvar);
dist.rewrite();
}
}
}
err = dist.read(_isnext);
distno++;
}
}
void round_date(TDate& date, const int bucket_size, bool up)
{
// Riporta la data al primo lunedi prima dell'inizio
const int wday = date.wday();
if (wday > 1) date -= wday-1;
//TDate begin("01-01-1999");
TDate begin(TODAY);
begin.set_day(1);
const int wday2 = begin.wday();
if (wday2 > 1)
begin -= wday2-1; // primo lunedi' considerato
int bucks=int((date-begin) / bucket_size);
date=begin;
date+=bucket_size*bucks;
if (up) // Arrotonda alla fine del bucket
date += (bucket_size - 1);
else // Arrotonda all'inizio del bucket
date = date ;
}
bool check_mag_locations(const TString &path,const TFilename &source)
{
TImport_file movmag(path,source);
movmag.first();
long l;
do {
l= movmag.get_long("TLOCT");
if (location2method(l)==99)
if (yesno_box("Locazione %ld sconosciuta. Interrompo?",l))
return FALSE;
} while (!movmag.next());
return TRUE;
}
bool bonifica_vendite(TMask &m, const TString & codimp)
{
TString8 codnum=codimp;
codnum<< "MM";
TRelation *r= new TRelation(LF_DOC);
r->add(LF_RIGHEDOC,"CODNUM==CODNUM|ANNO==ANNO|PROVV==PROVV|NDOC==NDOC");
TCursor c(r);
TRectype frec(LF_DOC);
frec.put("CODNUM",codnum);
frec.put("PROVV","D");
frec.put("ANNO" ,"1999");
c.setregion(frec,frec);
c.freeze();
const long items=c.items();
TProgind info(items,"Eliminazione causali di riga dalle bolle di vendita...",FALSE,TRUE);
for (long i= 0; i< items ; i++)
{
c=i;
info.addstatus(1);
TRelation *r =c.relation();
TLocalisamfile & teste = c.relation()->lfile(LF_DOC);
TLocalisamfile & righe = c.relation()->lfile(LF_RIGHEDOC);
if (teste.get("CAUSMAG")=="VNENT")
{
bool ok = r->is_first_match(LF_RIGHEDOC);
while (ok)
{
real q=righe.get("QTA");
if (righe.get("CAUSMAG")=="SCAR")
q=-q;
righe.put("CAUSMAG"," ");
righe.put("QTA",q);
righe .rewrite();
ok = r->next_match(LF_RIGHEDOC);
}
}
}
return TRUE;
}
int inserisci_articolo(const char * codart, const char * um)
{
delete_files("NA_0*.ini");
{
TConfig art_ini("NA_00001.ini");
art_ini.set_paragraph("Transaction");
art_ini.set("Action","INSERT");
if (um && *um)
art_ini.set("Mode","AUTO");
else
{
// cerca di capire la mejo unit' di misura
switch (*codart)
{
case '0':
case '1':
case '2':
case '3':
case '4':
um = "PZ";
break;
case '5':
um = "CA";
break;
case 'U':
switch (*(codart+1))
{
case '0':
um = "KG";
break;
case 'K':
if ((*(codart+2)) <= '9')
um = "CA";
break;
}
break;
}
}
art_ini.set("Firm","1");
art_ini.set_paragraph("47");
art_ini.set("CODART",codart);
art_ini.set("DESCR",format("*--- descrizione art. %s", codart));
art_ini.set("CODIVA","20");
art_ini.set_paragraph("49,1");
if (um && *um)
{
art_ini.set("UM",um);
if (strcmp(um,"KG")==0 || strcmp(um,"GR")== 0)
art_ini.set("UMP",um); // unita' di misura del peso
art_ini.set("FC","1.0");
}
}
TExternal_app *_gestart=NULL;
if (_gestart==NULL)
_gestart = new TExternal_app("ve2.exe -3 -iNA_000*.ini");
while (_gestart->run()!=0 && yesno_box("Ritento l'esecuzione di ve2.exe ?"))
;
return 0;
}
// **************************************
TImport_file::TImport_file(const char *path, const char * name)
{
TFilename fname(path);
fname.add(name);
_f = new TExternisamfile(fname, TRUE, TRUE);
_f->setkey(1);
}
void TImport_file::zero(const char filler)
{
_f->zero(filler);
}
void TImport_file::put(const char *field, const char * val)
{
_f->put(field,val);
}
TString & TImport_file::get(const char *field)
{
_sbuffer = _f->get(field);
return _sbuffer.trim();
}
TString & TImport_file::get_codice(const char *field)
{
_sbuffer = _f->get(field);
_sbuffer.trim();
// special computing....
if (_sbuffer == "U00254G")
_sbuffer = "U00254";
return _sbuffer;
}
const real & TImport_file::get_real(const char *field)
{
get(field).replace(',','.');
_rbuffer=real(_sbuffer);
return _rbuffer;
}
const long TImport_file::get_long(const char *field)
{
const long l= _f->get_long(field);
return l;
}
const TDate & TImport_file::get_date(const char *field)
{
_dbuffer=_f->get_long(field);
return _dbuffer;
}
bool TImport_file::first()
{
return _f->first();
}
bool TImport_file::prev()
{
return _f->prev();
}
bool TImport_file::next()
{
return _f->next();
}
bool TImport_file::eof()
{
return _f->eof();
}
long TImport_file::items()
{
return _f->items();
}
int TImport_file::read(int mode)
{
int err = _f->read(mode);
return err;
}
int TImport_file::write()
{
return _f->write();
}
void TImport_file::zap(bool pack)
{
_f->zap();
}
// **************************************
void TSupport_file::zap()
{
int err;
for (long i=_f->items(); i>0; i--)
{
_f->readat(i);
err=_f->remove();
}
}
int TSupport_file::read(TRectype & r)
{
CHECK(r.num() == _f->num(),"TIpo record inconsistente");
TString k(r.build_key(1));
r = _cache->get(k);
if (r.empty())
return _iskeynotfound;
return NOERR;
}
int TSupport_file::write()
{
TString k(_f->curr().build_key(1));
_cache->discard(k);
return _f->write();
}
void TSupport_file::put(const char * field, const char * value)
{
_f->put(field,value);
}
TSupport_file::TSupport_file (int logicnum,const char * radix)
{
_f = new TIsamtempfile(logicnum,radix,FALSE,FALSE);
_cache= new TRecord_cache(_f);
}
TSupport_file::~TSupport_file()
{
delete _f;
delete _cache;
}
bool number_box(const char * prompt, real & v)
{
TMask m("Input",1,60,10);
m.add_number(FIRST_FIELD,0,prompt, 2,2,18,"",3);
m.set(FIRST_FIELD,v);
m.add_button(DLG_OK,0,"OK",-12 ,6,10,2);
m.add_button(DLG_CANCEL,0,"Annulla", -22,6,10,2);
if (m.run()==K_ESC)
return FALSE;
v = m.get_real(FIRST_FIELD);
return TRUE;
}
const char * external_refnum(TImport_file &import)
{
static TString _wrk;
_wrk=import.get("TCOM");
while (_wrk[0] && (_wrk[0]<'0' || _wrk[0]>'9' || _wrk[0]=='/'|| _wrk[0]=='-'|| _wrk[0]=='.'))
_wrk = _wrk.mid(1);
int lenextdoc=_wrk.len();
if (lenextdoc > 6)
_wrk.cut(lenextdoc-6);
_wrk.trim();
if (_wrk.len()>7)
_wrk = _wrk.right(7);
if (atol(_wrk)==0L)
return "";
return _wrk;
}
const char * external_refdate(TImport_file &import)
{
static TString _wrk;
_wrk=import.get("TCOM");
while (_wrk[0] && (_wrk[0]<'0' || _wrk[0]>'9' || _wrk[0]=='/'|| _wrk[0]=='-'|| _wrk[0]=='.'))
_wrk = _wrk.mid(1);
if (_wrk.len() < 6)
_wrk.cut(0);
else
{
_wrk = _wrk.right(6);
if (atol(_wrk)==0L)
return "";
if (_wrk[5]=='9')
_wrk.insert("19",4);
else
_wrk.insert("20",4);
_wrk.insert("-",4);
_wrk.insert("-",2);
}
return _wrk;
}
long trascode_for(const long oldcod)
{
static TExternisamfile *_trascofor=NULL;
if (_trascofor==NULL)
_trascofor=new TExternisamfile("TRS_FORN",TRUE, TRUE);
_trascofor->put("OLDCODE", oldcod);
if (_trascofor->read()==NOERR)
{
long newcod = _trascofor->get_long("newcode");
return newcod > 0 ? newcod : oldcod;
}
return oldcod;
}