Patch level : 2.1 nopatch

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :
Personalizzazione CRPA


git-svn-id: svn://10.65.10.50/trunk@12246 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 2004-07-15 08:45:25 +00:00
parent a2eabd022e
commit 137797e17c
9 changed files with 2309 additions and 0 deletions

164
crpa/crpa.cpp Executable file
View File

@ -0,0 +1,164 @@
#include <iostream>
#include <fstream>
#include <time.h>
#define WINDOWS_EXTRA_LEAN
#include <windows.h>
#pragma warning(disable : 4786)
#define WIN32COMMON
#include <occi.h>
using namespace oracle::occi;
using namespace std;
class campo2pmc
{
private:
Environment* env;
Connection* conn;
public:
int executeCommand(const char* command);
int readCommands(const char* filename);
void writeResult(const char* resultfile, int error);
void writeLog(const char* message);
bool getIniParam(const char* name, string& value);
campo2pmc();
~campo2pmc();
};
campo2pmc::campo2pmc(): env(NULL), conn(NULL)
{
string username, password, connect;
getIniParam("Username", username);
getIniParam("Password", password);
getIniParam("Connect", connect);
try
{
env = Environment::createEnvironment(Environment::DEFAULT);
conn = env->createConnection(username, password, connect);
}
catch (...)
{
conn = NULL;
}
}
campo2pmc::~campo2pmc()
{
if (conn != NULL)
env->terminateConnection(conn);
Environment::terminateEnvironment(env);
}
void campo2pmc::writeLog(const char* message)
{
ofstream logfile("crpa.log", ios::app);
char date[128];
char time[128];
_strtime(time);
_strdate(date);
logfile << date << ' ' << time << ' ' << message << endl;
}
void campo2pmc::writeResult(const char* resultfile, int error)
{
char stringerr[16];
sprintf(stringerr, "%d", error);
::WritePrivateProfileString("Transaction", "Error", stringerr, resultfile);
::WritePrivateProfileString("Transaction", "Result", error ? "ERROR": "OK", resultfile);
}
bool campo2pmc::getIniParam(const char* name, string& value)
{
char val[256];
bool ok = ::GetPrivateProfileString("Oracle", name, "", val,
sizeof(val), "./crpa.ini") != 0;
if (ok) value = val;
return ok;
}
int campo2pmc::executeCommand(const char* command)
{
int err = 0;
if (conn != NULL)
{
Statement* stmt = conn->createStatement(command);
if (stmt != NULL)
{
try
{
stmt->executeUpdate();
}
catch(SQLException ex)
{
err = ex.getErrorCode();
OCCI_STD_NAMESPACE::string mess = ex.getMessage();
char message[1024];
sprintf(message, "Errore %d: %s nel comando %s", err, mess.c_str(), command);
writeLog(message);
}
conn->terminateStatement(stmt);
}
else
{
char message[1024];
sprintf(message, "Statement non valido: %s", command);
writeLog(message);
err = -2;
}
}
else
{
writeLog("Connessione non valida");
err = -1;
}
return err;
}
int campo2pmc::readCommands(const char* filename)
{
int err = 0;
ifstream fin(filename);
while ((!fin.eof()) && (err==0))
{
char line[4096];
fin.getline(line, sizeof(line), 'æ');
if (!fin.eof())
{
strcat(line,"\n");
err = executeCommand(line);
}
}
if (err != 0)
conn->rollback();
return err;
}
void wake_up_caller()
{
const unsigned int WM_WAKEUP = RegisterWindowMessage("WAKEUP");
const HANDLE ht = 0; // GetCurrentProcess();
PostMessage(HWND_BROADCAST, WM_WAKEUP, (WPARAM)ht, 0L);
}
int main(int argc, char* argv[])
{
const char* commandfile = "crpa.sql";
const char* resultfile = "./crpasql.ini";
if (argc > 1)
commandfile = argv[1];
if (argc > 2)
resultfile = argv[2];
campo2pmc passa;
int err = passa.readCommands(commandfile);
passa.writeResult(resultfile, err);
wake_up_caller();
return err;
}

103
crpa/crpa.dsp Executable file
View File

@ -0,0 +1,103 @@
# Microsoft Developer Studio Project File - Name="crpa" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=crpa - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "crpa.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "crpa.mak" CFG="crpa - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "crpa - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "crpa - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "crpa - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /W3 /GX /O2 /I "c:\oracle\ora90\oci\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c
# SUBTRACT CPP /YX /Yc /Yu
# ADD BASE RSC /l 0x410 /d "NDEBUG"
# ADD RSC /l 0x410 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
!ELSEIF "$(CFG)" == "crpa - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "c:\oracle\ora90\oci\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /FD /GZ /c
# SUBTRACT CPP /X /YX /Yc /Yu
# ADD BASE RSC /l 0x410 /d "_DEBUG"
# ADD RSC /l 0x410 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib c:\oracle\ora90\oci\lib\msvc\oraocci9.lib /nologo /subsystem:console /debug /machine:I386 /out:"d:\u\cris\v17.aga\exe\crpa.exe" /pdbtype:sept
!ENDIF
# Begin Target
# Name "crpa - Win32 Release"
# Name "crpa - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\Crpa.cpp
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project

29
crpa/crpa.dsw Executable file
View File

@ -0,0 +1,29 @@
Microsoft Developer Studio Workspace File, Format Version 6.00
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
###############################################################################
Project: "crpa"=.\crpa.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Global:
Package=<5>
{{{
}}}
Package=<3>
{{{
}}}
###############################################################################

103
crpa/crpa.ini Executable file
View File

@ -0,0 +1,103 @@
[Oracle]
Username=pmc
Password=pmc
Connect=zen1
Run=
[23]
TABLE=AGA_PRJDOC_T146_P
UNICO=
ARCH=!_FIRM,_MOV
UNICARCH=!_UNICMOV
DTATRASF=!_DATAORA
TIPDOC=:PN
DESDOC=!_DESMOV
NUMDOC=
DTADOC=!_D,DATAREG
NUMDOCFIS=NUMDOC
DTADOCFIS=!_D,DATADOC
DTAPERT=!_D,DATACOMP
AZIENDA=!_FIRM
TIPANA=TIPOCF
CODCF=CODCF
CODVAL=!_CODVAL
[24]
TABLE=AGA_PRJDET_T147_P
UNICO=
ARCH=!_FIRM,_MOV
UNICARCH=!_UNICMOV
UNICRIGA=NUMRIG
CODART=!_CODART
DESART=!_DESRMOV
QUANT=1
UNMIS=
CONSAL=
IMPVAL=IMPORTO
NUMCOMM=CODCMS
CODATTCM=
ELSPESA=!_ELSPESAMOV
CENTCOST=FASCMS
DTACONS=
RIFRICH=
RIFORD=
RIFBOL=
CODVAL=!_CODVAL
STATO_IMP=
SEGNO=SEZIONE
[33]
TABLE=AGA_PRJDOC_T146_P
UNICO=
ARCH=!_FIRM,_DOC
UNICARCH=!_UNICDOC
DTATRASF=!_DATAORA
TIPDOC=!_TIPODOC
DESDOC=!_DESDOC
NUMDOC=NDOC
DTADOC=!_D,DATADOC
NUMDOCFIS=NUMDOCRIF
DTADOCFIS=!_D,DATADOCRIF
DTAPERT=!_D,DATADOC
AZIENDA=!_FIRM
TIPANA=TIPOCF
CODCF=CODCF
CODVAL=!_CODVAL
[34]
TABLE=AGA_PRJDET_T147_P
UNICO=
ARCH=!_FIRM,_DOC
UNICARCH=!_UNICDOC
UNICRIGA=#RDOC,NRIGA
CODART=CODART
QUANT=#!_,QTA
DESART=!_T,70,DESCR
UNMIS=UMQTA
CONSAL=
IMPVAL=#!_,IMPORTO
NUMCOMM=#!_,COMMESSA
CODATTCM=
ELSPESA=!_ELSPESADOC
CENTCOST=#!_,FASE
DTACONS=#!_,DATACONS
RIFRICH=
RIFORD=!_RIFORD
RIFBOL=!_RIFBOL
CODVAL=!_CODVAL
STATO_IMP=
SEGNO=
[Tipo documento]
O=I**
B=IM*
BO=*M*
FB=**F
FO=*MF
F=IMF
[Codice valuta]
EUR=EU
[Descrizioni]
F01=Percentuale,QTAGG1|Giorni,QTAGG2

1081
crpa/crpa0.cpp Executable file

File diff suppressed because it is too large Load Diff

613
crpa/pmc.sql Executable file
View File

@ -0,0 +1,613 @@
CREATE TABLE PRACTOR_LOG (
LOG_ID NUMBER (10) NOT NULL,
TIPO VARCHAR2 (25) NOT NULL,
DATA DATE NOT NULL,
UTENTE VARCHAR2 (240) NOT NULL,
TESTO VARCHAR2 (240),
CONSTRAINT PRACTOR_LOGXP
PRIMARY KEY ( LOG_ID ) )
/
CREATE OR REPLACE PROCEDURE prcLog (vMessage PRACTOR_LOG.testo%TYPE) IS vErrMsg VARCHAR2(100);
BEGIN
INSERT INTO PRACTOR_LOG VALUES (note_seq.NEXTVAL, '-', SYSDATE, USER, vMessage);
-- dbms_output.put_line(vMessage);
EXCEPTION
WHEN OTHERS THEN
vErrMsg := SQLERRM(SQLCODE);
INSERT INTO PRACTOR_LOG VALUES (note_seq.NEXTVAL, '-', SYSDATE, USER, vErrMsg);
END prcLog;
/
CREATE TABLE SMC_PRJDOC_T146 (
UNICO NUMBER,
ARCH VARCHAR2 (10) NOT NULL,
UNICARCH NUMBER NOT NULL,
DTATRASF DATE,
TIPDOC VARCHAR2 (2),
DESDOC VARCHAR2 (100),
NUMDOC VARCHAR2 (20),
DTADOC DATE,
NUMDOCFIS VARCHAR2 (20),
DTADOCFIS DATE,
DTAPERT DATE,
AZIENDA VARCHAR2 (3),
TIPANA VARCHAR2 (1),
CODCF VARCHAR2 (10),
CODVAL VARCHAR2 (3),
CONSTRAINT T146XP
PRIMARY KEY ( ARCH, UNICARCH ) )
/
ALTER TABLE SMC_PRJDOC_T146 ADD CONSTRAINT R011146
FOREIGN KEY (CODVAL)
REFERENCES PMC.VL_T011 (C_VL)
/
CREATE TABLE SMC_PRJDET_T147 (
UNICO NUMBER,
ARCH VARCHAR2 (10) NOT NULL,
UNICARCH NUMBER NOT NULL,
UNICRIGA NUMBER NOT NULL,
CODART VARCHAR2 (15),
DESART VARCHAR2 (70),
QUANT NUMBER,
UNMIS VARCHAR2 (3),
CONSAL VARCHAR2 (1),
IMPVAL NUMBER,
NUMCOMM VARCHAR2 (15),
CODATTCM VARCHAR2 (10),
ELSPESA VARCHAR2 (10),
CENTCOST VARCHAR2 (6),
DTACONS DATE,
RIFRICH VARCHAR2 (20),
RIFORD VARCHAR2 (20),
RIFBOL VARCHAR2 (20),
CODVAL VARCHAR2 (3),
STATO_IMP VARCHAR2 (1),
SEGNO VARCHAR2 (1),
CONSTRAINT T147XP
PRIMARY KEY ( ARCH, UNICARCH, UNICRIGA ) )
/
ALTER TABLE SMC_PRJDET_T147 ADD CONSTRAINT C146147
FOREIGN KEY (ARCH, UNICARCH)
REFERENCES PMC.SMC_PRJDOC_T146 (ARCH, UNICARCH) ON DELETE CASCADE
/
ALTER TABLE SMC_PRJDET_T147 ADD CONSTRAINT R011147
FOREIGN KEY (CODVAL)
REFERENCES PMC.VL_T011 (C_VL)
/
CREATE OR REPLACE TRIGGER SMC_PRJDET_G147_01 BEFORE INSERT ON SMC_PRJDET_T147 FOR EACH ROW
DECLARE
TIPO SMC_PRJDOC_T146.TIPDOC%TYPE;
ATTIVITA SMC_PRJDET_T147.CODATTCM%TYPE;
PROJ PROG_T056.C_PROG%TYPE;
COSTO COSTO_AGRT_T022.P_COSTO%TYPE;
CAMBIORIF VL_T011.I_CB_CONS%TYPE;
CAMBIOPRJ VL_T011.I_CB_CONS%TYPE;
VALPRJ VL_T011.C_VL%TYPE;
ERRMSG PRACTOR_LOG.TESTO%TYPE;
baseERRMSG PRACTOR_LOG.TESTO%TYPE;
TCLASSE COSTO_AGRT_T022.T_CLASSE%TYPE;
numcosti NUMERIC;
CODCURVA CRV_DSBN_T013.C_CRV%TYPE;
DESSPESA CLASSE_DI_COSTO_T043.S_CLASSE%TYPE;
BASEINI DATE;
BASEFIN DATE;
FORINI DATE;
FORFIN DATE;
PELMNT STRU_T087.P_ELMNT%TYPE;
CBS PROG_T056.C_STRU%TYPE;
STIMA COSTO_AGRT_T022.I_STIMA_CMPL%TYPE;
BDG_REV COSTO_AGRT_T022.I_BDG_REV%TYPE;
COMM COSTO_AGRT_T022.I_COMM%TYPE;
ACEM COSTO_AGRT_T022.I_ACEM%TYPE;
CONS COSTO_AGRT_T022.I_CONS%TYPE;
CNTBZ COSTO_AGRT_T022.I_CNTBZ%TYPE;
BEGIN
Prclog('-- Nuovo documento -----------------------------------------------------------------------------------');
Prclog('-- ARCH: '||:NEW.ARCH);
Prclog('-- UNICARCH: '||:NEW.UNICARCH);
Prclog('-- RIGA: '||:NEW.UNICRIGA);
-- Tipo documento
SELECT NVL(TIPDOC,'XX') INTO TIPO FROM SMC_PRJDOC_T146
WHERE
ARCH = :NEW.ARCH
AND UNICARCH = :NEW.UNICARCH;
Prclog('Tipo documento: '||TIPO);
IF TIPO <> 'XX' THEN
-- Ottengo il codice interno del progetto, il codice della valuta e il codice della
-- CBS di progetto. Il campo NUMCOMM del documento contiene il nome
-- del progetto (campo S_PROG_NOM della tabella PROG_T056).
-- Il nome Š univoco.
SELECT
C_PROG, NVL(C_VL, 'EUR'), C_STRU
INTO
PROJ, VALPRJ, CBS
FROM
PROG_T056
WHERE
S_PROG_NOM = :NEW.NUMCOMM;
-- log
Prclog('Codice progetto: '||PROJ);
Prclog('Codice valuta: '||VALPRJ);
Prclog('Codice CBS: '||CBS);
IF PROJ >= 0 THEN
-- CODICE COSTO
-- Controllo l'esistenza di un costo che abbia l'incrocio
-- corretto fra voce di spesa e attivit…
-- ELSPESA <--> S_NOME (voce dispesa ovvero nome del costo)
-- CODATTCM <--> TASK_UID (codice attivit…)
SELECT
NVL(COUNT(*),0)
INTO
NUMCOSTI
FROM
COSTO_AGRT_T022
WHERE
C_PROG = PROJ
AND S_NOME = :NEW.ELSPESA
AND TASK_UID = :NEW.CODATTCM;
-- 'SELECT NVL(P_COSTO,-1) INTO COSTO FROM COSTO_AGRT_T022 WHERE C_PROG = '||PROJ||' AND S_NOME = '||:NEW.ELSPESA||' AND TASK_UID = '||:NEW.CODATTCM||';';
IF NUMCOSTI = 0 THEN
-- Valori del costo
STIMA := 0;
BDG_REV := 0;
COMM := 0;
ACEM := 0;
CONS := 0;
CNTBZ := 0;
Prclog('Manca il costo ('||:NEW.ELSPESA||'), procedo all''inserimento.');
-- Codice costo
SELECT S022_P_COSTO.NEXTVAL INTO COSTO FROM dual;
Prclog('Nuovo codice costo: '||COSTO);
-- CODICE CURVA LINEARE (di default uso la curva lineare del progetto)
-- Il campo A_CRV_SIS indica il tipo di curva di sistema.
SELECT NVL(C_CRV, -1) INTO CODCURVA FROM CRV_DSBN_T013
WHERE
C_PROG = PROJ
AND A_CRV_SIS = 4;
Prclog('Codice curva lineare: '||CODCURVA);
-- DESCRIZIONE VOCE DI COSTO
-- Il campo nome contiene il codice della classe di costo,
-- Il campo descrizione contiene la descrizione della classe di costo
SELECT
NVL(S_CLASSE,'<Descrizione classe di costo>') INTO DESSPESA
FROM
CLASSE_DI_COSTO_T043
WHERE
C_CLASSE = :NEW.elspesa;
Prclog('Descrizione classe di costo: '||DESSPESA);
-- DATE RELATIVI ALL'ATTIVITA DI PROJECT
SELECT
NVL(TASK_BASE_START, SYSDATE()), NVL(TASK_BASE_FINISH, SYSDATE()), NVL(TASK_START_DATE, SYSDATE()), NVL(TASK_FINISH_DATE, SYSDATE())
INTO
BASEINI, BASEFIN, FORINI, FORFIN
FROM
MSP_TASKS
WHERE
PROJ_ID = PROJ
AND TASK_UID = :NEW.CODATTCM;
Prclog('Inizio: '||BASEINI||' Fine: '||BASEFIN||' Inizio forecast: '||FORINI||' Fine forecast: '||FORFIN);
-- CAMBIO DEL PROGETTO
SELECT NVL(I_CB_CONS, 1) INTO CAMBIOPRJ FROM VL_T011 WHERE C_VL = VALPRJ;
Prclog('Cambio: '||CAMBIOPRJ);
-- NODO CBS
-- Seleziono il nodo della CBS a cui associare il costo.
-- I nodi della CBS sono stati strutturati in modo che
-- rappresentino le voci di spesa del piano dei costi.
-- I primi due caratteri del nome del costo coincidono
-- con il nome della classe di costo inserita nella CBS.
-- es. voce di spesa (ELSPESA): 211 -- Emolumenti amministratori
-- Nella CBS andr… agganciata al nodo (C_ELMNT) 21 -- Stipendi
-- Si suppone che C_ELMNT sia univoco nella CBS. Non esiste per•
-- un indice nel database.
SELECT NVL(P_ELMNT,-1), NVL(T_CLASSE, 'C') INTO PELMNT, TCLASSE FROM
STRU_T087
WHERE
C_PROG = PROJ
AND C_STRU = CBS
AND C_ELMNT = SUBSTR(:NEW.ELSPESA,1,2);
--PRCLOG('SELECT NVL(P_ELMNT,-1) INTO PELMNT FROM STRU_T087 WHERE C_PROG = '||PROJ||' AND C_STRU = '''||CBS||''' AND C_ELMNT = SUBSTR('''||:NEW.ELSPESA||''',1,2);');
Prclog('Nodo ('||SUBSTR(:NEW.ELSPESA,1,2)||'): '||PELMNT);
IF PELMNT = -1 THEN
-- ATTACCO IL COSTO ALLA ROOT
SELECT NVL(P_ELMNT,-1) INTO PELMNT FROM
STRU_T087
WHERE
C_PROG = PROJ
AND C_STRU = CBS
AND P_ELMNT_PDR IS NULL;
TCLASSE := 'C';
Prclog('Nodo ('||SUBSTR(:NEW.ELSPESA,1,2)||') non trovato. Root: '||PELMNT);
END IF;
IF PELMNT >= 0 THEN
-- Inserimento
INSERT INTO COSTO_AGRT_T022
(C_PROG, P_COSTO, S_DES, C_VL, C_CRV, D_INI_ORIG, D_FIN_ORIG, D_INI_REVIS, D_FIN_REVIS, PROJ_UID, TASK_UID, F_EARNED, S_NOME, T_CLASSE)
VALUES
(PROJ, COSTO, DESSPESA, VALPRJ, CODCURVA, BASEINI, BASEFIN, FORINI, FORFIN, PROJ, :NEW.CODATTCM, 0, :NEW.ELSPESA, TCLASSE);
-- ASSOCIAZIONE ALLA CBS
INSERT INTO ASCN_STRU_T021
(C_PROG, P_ELMNT, P_COSTO)
VALUES
(PROJ, PELMNT, COSTO);
ELSE
Prclog('Impossibile trovare un nodo nella CBS per il costo ('||SUBSTR(:NEW.ELSPESA,1,2)||').');
END IF; -- pelmnt >= 0
ELSE -- NUMCOSTI = 0
-- il costo esiste: ottengo il codice, il tipo e la stima a completamento
SELECT
NVL(P_COSTO, -1), NVL(T_CLASSE,'C'), NVL(I_STIMA_CMPL, 0), NVL(I_BDG_REV, 0),
NVL(I_COMM, 0), NVL(I_ACEM, 0), NVL(I_CONS, 0), NVL(CNTBZ, 0)
INTO
COSTO, TCLASSE, STIMA, BDG_REV,
COMM, ACEM, CONS, CNTBZ
FROM
COSTO_AGRT_T022
WHERE
C_PROG = PROJ
AND S_NOME = :NEW.ELSPESA
AND TASK_UID = :NEW.CODATTCM;
Prclog('Codice costo: '||COSTO);
END IF;
IF COSTO >= 0 THEN
Prclog('Aggiornamento valori del costo ('||COSTO||').');
-- CAMBIO DEL PROGETTO
SELECT NVL(I_CB_CONS, 0) INTO CAMBIOPRJ FROM VL_T011 WHERE C_VL = VALPRJ;
Prclog('Valore cambio: '||CAMBIOPRJ );
IF CAMBIOPRJ > 0 THEN
-- ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** *****
-- ORDINE DI ACQUISTO
-- ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** *****
IF TIPO = 'OA' THEN
Prclog ('Tipo documento: OA');
Prclog ('Importo: '||NVL(:NEW.IMPVAL, 0));
UPDATE COSTO_AGRT_T022
SET
I_COMM = NVL(I_COMM,0) + NVL(:NEW.IMPVAL, 0),
I_COMM_VL = NVL(I_COMM_VL,0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_COMM_CURR = NVL(I_COMM_CURR,0) + NVL(:NEW.IMPVAL, 0),
I_COMM_CURR_VL = NVL(I_COMM_CURR_VL,0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ
WHERE
C_PROG = PROJ
AND P_COSTO = COSTO;
COMM := COMM + NVL(:NEW.IMPVAL, 0);
Prclog('Impeganto: '||COMM||' Budget: '||BDG_REV||' Stima a completamento: '||STIMA );
-- Se l'impegnato supera il budget aumento la stima a finire
IF COMM > STIMA THEN
Prclog('Aggiorno la stima a completamento.');
UPDATE COSTO_AGRT_T022
SET
I_STIMA_CMPL = COMM,
I_STIMA_CMPL_VL = COMM * CAMBIOPRJ
WHERE
C_PROG = PROJ
AND P_COSTO = COSTO;
END IF;
:NEW.STATO_IMP := 'I';
END IF;
-- ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** *****
-- BOLLA DI ENTRATA
-- ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** *****
IF TIPO = 'BA' THEN
Prclog ('Tipo documento: BA');
Prclog ('Importo: '||NVL(:NEW.IMPVAL, 0));
UPDATE COSTO_AGRT_T022
SET
I_ACEM = NVL(I_ACEM, 0) + NVL(:NEW.IMPVAL, 0),
I_ACEM_VL = NVL(I_ACEM_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_ACEM_CURR = NVL(I_ACEM_CURR, 0) + NVL(:NEW.IMPVAL, 0),
I_ACEM_CURR_VL = NVL(I_ACEM_CURR_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ
WHERE
C_PROG = PROJ
AND P_COSTO = COSTO;
ACEM := ACEM + NVL(:NEW.IMPVAL, 0);
Prclog('Maturato: '||ACEM||' Budget: '||BDG_REV||' Stima a completamento: '||STIMA );
-- Se l'impegnato supera il budget aumento la stima a finire
IF ACEM > STIMA THEN
Prclog('Aggiorno la stima a completamento.');
UPDATE COSTO_AGRT_T022
SET
I_STIMA_CMPL = ACEM,
I_STIMA_CMPL_VL = ACEM * CAMBIOPRJ
WHERE
C_PROG = PROJ
AND P_COSTO = COSTO;
END IF;
:NEW.STATO_IMP := 'I';
END IF;
-- ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** *****
-- FATTURA DI ACQUISTO
-- ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** *****
IF TIPO = 'FA' THEN
Prclog ('FA');
Prclog ('IMPORTO: '||NVL(:NEW.IMPVAL, 0));
UPDATE COSTO_AGRT_T022
SET
I_CONS = NVL(I_CONS, 0) + NVL(:NEW.IMPVAL, 0),
I_CONS_VL = NVL(I_CONS_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_CONS_CURR = NVL(I_CONS_CURR, 0) + NVL(:NEW.IMPVAL, 0),
I_CONS_CURR_VL = NVL(I_CONS_CURR_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ
WHERE
C_PROG = PROJ
AND P_COSTO = COSTO;
CONS := CONS + NVL(:NEW.IMPVAL, 0);
Prclog('Fatturato: '||CONS||' Budget: '||BDG_REV||' Stima a completamento: '||STIMA );
-- Se l'impegnato supera il budget aumento la stima a finire
IF CONS > STIMA THEN
Prclog('Aggiorno la stima a completamento.');
UPDATE COSTO_AGRT_T022
SET
I_STIMA_CMPL = CONS,
I_STIMA_CMPL_VL = CONS * CAMBIOPRJ
WHERE
C_PROG = PROJ
AND P_COSTO = COSTO;
END IF;
:NEW.STATO_IMP := 'I';
END IF;
-- ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** *****
-- Movimento dalla contabilit… analitica
-- ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** *****
IF TIPO = 'AN' THEN
Prclog ('Movimento dalla contabilit… analitica.');
Prclog ('Importo: '||NVL(:NEW.IMPVAL, 0));
Prclog ('Segno: '||NVL(:NEW.IMPVAL, 0));
Prclog ('Classe: '||TCLASSE);
IF TCLASSE = 'C' THEN
-- Costo
IF NVL(:NEW.SEGNO, 'D') = 'D' THEN
-- Dare
Prclog ('Operazione: sommo contabilizzato e maturato.');
UPDATE COSTO_AGRT_T022
SET
I_CNTBZ = NVL(I_CNTBZ, 0) + NVL(:NEW.IMPVAL, 0),
I_CNTBZ_VL = NVL(I_CNTBZ_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_CNTBZ_CURR = NVL(I_CNTBZ_CURR, 0) + NVL(:NEW.IMPVAL, 0),
I_CNTBZ_CURR_VL = NVL(I_CNTBZ_CURR_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_ACEM = NVL(I_ACEM, 0) + NVL(:NEW.IMPVAL, 0),
I_ACEM_VL = NVL(I_ACEM_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_ACEM_CURR = NVL(I_ACEM_CURR, 0) + NVL(:NEW.IMPVAL, 0),
I_ACEM_CURR_VL = NVL(I_ACEM_CURR_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_STIMA_CMPL = NVL(I_STIMA_CMPL, 0) + NVL(:NEW.IMPVAL, 0),
I_STIMA_CMPL_VL = NVL(I_STIMA_CMPL_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ
WHERE
C_PROG = PROJ
AND P_COSTO = COSTO;
ELSE
-- Avere
Prclog ('Operazione: sottraggo contabilizzato e maturato.');
UPDATE COSTO_AGRT_T022
SET
I_CNTBZ = NVL(I_CNTBZ, 0) - NVL(:NEW.IMPVAL, 0),
I_CNTBZ_VL = NVL(I_CNTBZ_VL, 0) - NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_CNTBZ_CURR = NVL(I_CNTBZ_CURR, 0) - NVL(:NEW.IMPVAL, 0),
I_CNTBZ_CURR_VL = NVL(I_CNTBZ_CURR_VL, 0) - NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_ACEM = NVL(I_ACEM, 0) + NVL(:NEW.IMPVAL, 0),
I_ACEM_VL = NVL(I_ACEM_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_ACEM_CURR = NVL(I_ACEM_CURR, 0) + NVL(:NEW.IMPVAL, 0),
I_ACEM_CURR_VL = NVL(I_ACEM_CURR_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_STIMA_CMPL = NVL(I_STIMA_CMPL, 0) + NVL(:NEW.IMPVAL, 0),
I_STIMA_CMPL_VL = NVL(I_STIMA_CMPL_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ
WHERE
C_PROG = PROJ
AND P_COSTO = COSTO;
END IF;
ELSE
-- Ricavo
IF NVL(:NEW.SEGNO, 'D') = 'D' THEN
-- Dare
Prclog ('Operazione: sottraggo contabilizzato e maturato.');
UPDATE COSTO_AGRT_T022
SET
I_CNTBZ = NVL(I_CNTBZ, 0) - NVL(:NEW.IMPVAL, 0),
I_CNTBZ_VL = NVL(I_CNTBZ_VL, 0) - NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_CNTBZ_CURR = NVL(I_CNTBZ_CURR, 0) - NVL(:NEW.IMPVAL, 0),
I_CNTBZ_CURR_VL = NVL(I_CNTBZ_CURR_VL, 0) - NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_ACEM = NVL(I_ACEM, 0) - NVL(:NEW.IMPVAL, 0),
I_ACEM_VL = NVL(I_ACEM_VL, 0) - NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_ACEM_CURR = NVL(I_ACEM_CURR, 0) - NVL(:NEW.IMPVAL, 0),
I_ACEM_CURR_VL = NVL(I_ACEM_CURR_VL, 0) - NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_STIMA_CMPL = NVL(I_STIMA_CMPL, 0) - NVL(:NEW.IMPVAL, 0),
I_STIMA_CMPL_VL = NVL(I_STIMA_CMPL_VL, 0) - NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ
WHERE
C_PROG = PROJ
AND P_COSTO = COSTO;
ELSE
-- Avere
Prclog ('Operazione: sommo contabilizzato e maturato.');
UPDATE COSTO_AGRT_T022
SET
I_CNTBZ = NVL(I_CNTBZ, 0) + NVL(:NEW.IMPVAL, 0),
I_CNTBZ_VL = NVL(I_CNTBZ_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_CNTBZ_CURR = NVL(I_CNTBZ_CURR, 0) + NVL(:NEW.IMPVAL, 0),
I_CNTBZ_CURR_VL = NVL(I_CNTBZ_CURR_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_ACEM = NVL(I_ACEM, 0) + NVL(:NEW.IMPVAL, 0),
I_ACEM_VL = NVL(I_ACEM_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_ACEM_CURR = NVL(I_ACEM_CURR, 0) + NVL(:NEW.IMPVAL, 0),
I_ACEM_CURR_VL = NVL(I_ACEM_CURR_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_STIMA_CMPL = NVL(I_STIMA_CMPL, 0) + NVL(:NEW.IMPVAL, 0),
I_STIMA_CMPL_VL = NVL(I_STIMA_CMPL_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ
WHERE
C_PROG = PROJ
AND P_COSTO = COSTO;
END IF;
END IF; -- T_CLASSE = 'C'
-- CNTBZ := CNTBZ + NVL(:NEW.IMPVAL, 0);
-- ACEM := ACEM + NVL(:NEW.IMPVAL, 0);
-- Prclog('Contabilizzato: '||CNTBZ||' Maturato: '||ACEM||' Budget: '||BDG_REV||' Stima a completamento: '||STIMA );
-- -- Se il maturato o il contabilizzato superano il budget aumento la stima a finire
-- IF CNTBZ < ACEM THEN
-- CNTBZ := ACEM;
-- END IF;
-- IF (CNTBZ > STIMA) THEN
-- Prclog('Aggiorno la stima a completamento.');
-- UPDATE COSTO_AGRT_T022
-- SET
-- I_STIMA_CMPL = CNTBZ,
-- I_STIMA_CMPL_VL = CNTBZ * CAMBIOPRJ
-- WHERE
-- C_PROG = PROJ
-- AND P_COSTO = COSTO;
-- END IF;
:NEW.STATO_IMP := 'I';
END IF;
-- ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** *****
-- Movimento dalla contabilit… analitica derivante da un documento.
-- ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** *****
IF TIPO = 'FM' THEN
Prclog ('Movimento dalla contabilit… analitica derivante da un documento.');
Prclog ('Importo: '||NVL(:NEW.IMPVAL, 0));
Prclog ('Segno: '||NVL(:NEW.IMPVAL, 0));
Prclog ('Classe: '||TCLASSE);
IF TCLASSE = 'C' THEN
-- Costo
IF NVL(:NEW.SEGNO, 'D') = 'D' THEN
-- Dare
Prclog ('Contabilit… analitica, Costo, Dare (+).');
UPDATE COSTO_AGRT_T022
SET
I_CNTBZ = NVL(I_CNTBZ, 0) + NVL(:NEW.IMPVAL, 0),
I_CNTBZ_VL = NVL(I_CNTBZ_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_CNTBZ_CURR = NVL(I_CNTBZ_CURR, 0) + NVL(:NEW.IMPVAL, 0),
I_CNTBZ_CURR_VL = NVL(I_CNTBZ_CURR_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_STIMA_CMPL = NVL(I_STIMA_CMPL, 0) + NVL(:NEW.IMPVAL, 0),
I_STIMA_CMPL_VL = NVL(I_STIMA_CMPL_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ
WHERE
C_PROG = PROJ
AND P_COSTO = COSTO;
ELSE
-- Avere
Prclog ('Contabilit… analitica, Costo, Avere (-).');
UPDATE COSTO_AGRT_T022
SET
I_CNTBZ = NVL(I_CNTBZ, 0) - NVL(:NEW.IMPVAL, 0),
I_CNTBZ_VL = NVL(I_CNTBZ_VL, 0) - NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_CNTBZ_CURR = NVL(I_CNTBZ_CURR, 0) - NVL(:NEW.IMPVAL, 0),
I_CNTBZ_CURR_VL = NVL(I_CNTBZ_CURR_VL, 0) - NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_STIMA_CMPL = NVL(I_STIMA_CMPL, 0) + NVL(:NEW.IMPVAL, 0),
I_STIMA_CMPL_VL = NVL(I_STIMA_CMPL_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ
WHERE
C_PROG = PROJ
AND P_COSTO = COSTO;
END IF;
ELSE
-- Ricavo
IF NVL(:NEW.SEGNO, 'D') = 'D' THEN
-- Dare
Prclog ('Contabilit… analitica, Ricavo, Dare (-).');
UPDATE COSTO_AGRT_T022
SET
I_CNTBZ = NVL(I_CNTBZ, 0) - NVL(:NEW.IMPVAL, 0),
I_CNTBZ_VL = NVL(I_CNTBZ_VL, 0) - NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_CNTBZ_CURR = NVL(I_CNTBZ_CURR, 0) - NVL(:NEW.IMPVAL, 0),
I_CNTBZ_CURR_VL = NVL(I_CNTBZ_CURR_VL, 0) - NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_STIMA_CMPL = NVL(I_STIMA_CMPL, 0) - NVL(:NEW.IMPVAL, 0),
I_STIMA_CMPL_VL = NVL(I_STIMA_CMPL_VL, 0) - NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ
WHERE
C_PROG = PROJ
AND P_COSTO = COSTO;
ELSE
-- Avere
Prclog ('Contabilit… analitica, Ricavo, Avere (+).');
UPDATE COSTO_AGRT_T022
SET
I_CNTBZ = NVL(I_CNTBZ, 0) + NVL(:NEW.IMPVAL, 0),
I_CNTBZ_VL = NVL(I_CNTBZ_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_CNTBZ_CURR = NVL(I_CNTBZ_CURR, 0) + NVL(:NEW.IMPVAL, 0),
I_CNTBZ_CURR_VL = NVL(I_CNTBZ_CURR_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_STIMA_CMPL = NVL(I_STIMA_CMPL, 0) + NVL(:NEW.IMPVAL, 0),
I_STIMA_CMPL_VL = NVL(I_STIMA_CMPL_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ
WHERE
C_PROG = PROJ
AND P_COSTO = COSTO;
END IF;
END IF; -- T_CLASSE = 'C'
-- CNTBZ := CNTBZ + NVL(:NEW.IMPVAL, 0);
--
-- Prclog('Contabilizzato: '||CNTBZ||' Budget: '||BDG_REV||' Stima a completamento: '||STIMA );
-- -- Se il maturato o il contabilizzato superano il budget aumento la stima a finire
-- IF (CNTBZ > STIMA) THEN
-- Prclog('Aggiorno la stima a completamento.');
-- UPDATE COSTO_AGRT_T022
-- SET
-- I_STIMA_CMPL = CNTBZ,
-- I_STIMA_CMPL_VL = CNTBZ * CAMBIOPRJ
-- WHERE
-- C_PROG = PROJ
-- AND P_COSTO = COSTO;
-- END IF;
:NEW.STATO_IMP := 'I';
END IF; -- TIPO = 'FM
ELSE
PrcLog('Cambio non trovato ('||VALPRJ||').');
END IF; -- CAMBIOPRJ > 0
END IF;
ELSE
Prclog ('Il nome del progetto ('||:NEW.NUMCOMM||') non Š stato trovato.');
END IF; -- PROJ > 0
else -- Tipo documento
Prclog ('Manca il tipo documento.');
END IF; -- Tipo documento
EXCEPTION
WHEN OTHERS THEN
Prclog ('ERRORE: '|| SQLERRM(SQLCODE));
END;
/

204
crpa/search.cpp Executable file
View File

@ -0,0 +1,204 @@
error_type TContabilizzazione::search_costo_ricavo(TBill& conto, const TRiga_documento& r)
{
TConfig conf(CONFIG_DITTA, "ve");
_search_seq = new TToken_string((const char*)conf.get("RICERCACR","ve"));
// costruisce la stringa che controlla la ricerca del conto costo/ricavo
// Attenzione! non esegue alcun controllo di consistenza sulla corretta sequenza
// presuppone che il programma di configurazione abbia generato correttamente
// il tutto.
if (_search_seq->items() == 0)
{
error_box("Non e' abilitata alcuna ricerca per il conto di costo/ricavo in configurazione.");
return FALSE;
}
const int items = _search_seq->items();
TLocalisamfile& cli_file = _clifo->lfile(); // YES, arriva qui dentro quando la relazione e' gia' posizionata
const bool is_cli = cli_file.get(CLI_TIPOCF) == "C";
bool skip_art_related = FALSE;
bool skip_clifo = _clifo->bad();
TCodiceIVA codiva(r.get(RDOC_CODIVA));
const char t = r.tipo().tipo();
// Istanzia la causale del documento corrente...
const TTipo_documento& tipo = _doc->tipo();
TString16 codcaus(tipo.causale());
TToken_string key;
key.add(_doc->get(DOC_TIPOCF));
key.add(_doc->get(DOC_CODCF));
const TRectype & cfven = cache().get(LF_CFVEN, key);
const TString16 caus_cli(cfven.get(CFV_CODCAUS));
if (caus_cli.not_empty())
codcaus = caus_cli;
_caus = new TCausale(codcaus,data_reg.year());
int gr,co;
long so;
switch (t)
{
case 'O': // righe omaggio come articoli spiaccicato identico (avranno imponibile 0)
case 'M': // righe di merce
{
// posiziona l'anagrafica sull'articolo specificato sulla ..iga
TString80 codart = r.get(RDOC_CODARTMAG);
if codart.blank()
codart = r.get(RDOC_CODART);
_anamag->put(ANAMAG_CODART, codart);
if (_anamag->read() != NOERR) // se non trova l'articolo saltera' anche gmc,smc,rfa.
skip_art_related = TRUE;
TString16 tok;
// Scorre la stringa di ricerca
for (int i=0;i<items;i++)
{
tok = _search_seq->get(i);
if (tok == "CF")
{
if (skip_clifo) continue;
gr = cli_file.get_int(CLI_GRUPPORIC);
co = cli_file.get_int(CLI_CONTORIC);
so = cli_file.get_long(CLI_SOTTOCRIC);
conto.set(gr,co,so);
if (conto.ok()) break; // se lo trova esce (tutti != 0)
}
else
if (tok == "CA")
{
CHECK(_caus,"Causale documento non valida");
if (_caus->IVA2bill(codiva,conto)) break; // se lo trova esce
}
else
if (tok == "AR")
{
if (skip_art_related) continue;
gr = _anamag->get_int(is_cli ? ANAMAG_GRUPPOV : ANAMAG_GRUPPOA);
co = _anamag->get_int(is_cli ? ANAMAG_CONTOV : ANAMAG_CONTOA);
so = _anamag->get_long(is_cli ? ANAMAG_SOTTOCV : ANAMAG_SOTTOCA);
conto.set(gr,co,so);
if (!conto.ok()) // se il conto non c'e' guarda la categoria acquisti/vendite
{
TTable *t = is_cli ? _cra : _caa;
t->put("CODTAB",_anamag->get(is_cli ? ANAMAG_CATCONV : ANAMAG_CATCONA));
if (t->read() == NOERR)
{
gr = atoi(t->get("S1"));
co = atoi(t->get("S2"));
so = atol(t->get("S3"));
conto.set(gr,co,so);
}
}
if (conto.ok()) break;
}
else
if (tok == "GM" || tok == "SM" || tok == "RF")
{
if (skip_art_related) continue;
const bool is_fis = tok == "RF";
TTable * tab = is_fis ? _rfa : _gmc;
TString16 codtab(_anamag->get(is_fis ? ANAMAG_RAGGFIS : ANAMAG_GRMERC));
if (tok == "GM" && codtab.len() > 3)
codtab.cut(3); // gli ultimi 2 si riferiscono al sottogruppo.
tab->put("CODTAB",codtab);
if (tab->read() == NOERR)
{
gr = tab->get_int(is_cli ? "I3" : "I0");
co = tab->get_int(is_cli ? "I4" : "I1");
so = tab->get_long(is_cli ? "I5" : "I2");
conto.set(gr,co,so);
}
if (conto.ok()) break;
}
else
if (tok == "CV" || tok == "CC")
{
const bool is_cve = tok == "CV";
if (is_cve && !is_cli) continue; // se e' un fornitore salta questa condizione
TTable* t = is_cve ? _cve : _cco;
TString16 cod(is_cve ? r.doc().get(DOC_CATVEN) : EMPTY_STRING);
if (cod.empty())
{
if (skip_clifo) continue; // se non aveva trovato il cliente salta al prossimo
cod = _clifo->lfile(LF_CFVEN).get(is_cve ? CFV_CATVEN : CFV_CODCATC);
}
t->put("CODTAB",cod);
if (t->read() == NOERR)
{
const bool x =(is_cve || is_cli);
gr = t->get_int(x ? "I3" : "I0");
co = t->get_int(x ? "I4" : "I1");
so = t->get_long(x ? "I5": "I2");
conto.set(gr,co,so);
}
if (conto.ok()) break;
}
}
break; // case 'M'
}
case 'P': // righe prestazione
case 'S': // righe spese
{
TTable* tab = t == 'P' ? _prs : _spp;
tab->put("CODTAB",r.get(RDOC_CODART));
if (tab->read()==NOERR)
{
gr = tab->get_int(is_cli ? "I0" : "I3");
co = tab->get_int(is_cli ? "I1" : "I4");
so = tab->get_long(is_cli ? "I2" : "I5");
conto.set(gr,co,so);
if (!is_cli && !conto.ok())
{
gr = r.get_int("QTAGG1");
co = r.get_int("QTAGG2");
so = r.get_long("QTAGG3");
conto.set(gr,co,so);
}
}
if (!conto.find() && t == 'P') // Cerca il conto nella stringa di ricerca (solo per prestazioni)
{
TString16 tok;
// Scorre la stringa di ricerca ma solo per causale o CLI/FO
for (int i=0;i<items;i++)
{
tok = _search_seq->get(i);
if (tok == "CF")
{
if (skip_clifo) continue;
gr = cli_file.get_int(CLI_GRUPPORIC);
co = cli_file.get_int(CLI_CONTORIC);
so = cli_file.get_long(CLI_SOTTOCRIC);
conto.set(gr,co,so);
if (conto.ok()) break;
}
else
if (tok == "CA")
{
CHECK(_caus,"Causale documento non valida");
if (_caus->IVA2bill(codiva,conto)) break;
}
}
}
break; // case 'P','S'
}
case 'C':
// righe sconti: vengono considerate in adjust_sconto_rows()
case 'D': // righe descrizioni (saltare)
default :
break;
} // end of switch
if (good())
{
if (conto.ok() == 0 || !conto.find())
{
_conto_errato = conto;
_error = conto_error;
}
}
return _error;
}

4
crpa/ts_pmc.sql Executable file
View File

@ -0,0 +1,4 @@
create tablespace pmc001td
datafile 'g:\oracle\appdata\crpa\pmc001td.dbf' size 32M;
create tablespace pmc001ti
datafile 'g:\oracle\appdata\crpa\pmc001ti.dbf' size 10M;

8
crpa/user_pmc.sql Executable file
View File

@ -0,0 +1,8 @@
create user pmc
identified by pmc
default tablespace pmc001td
quota unlimited on pmc001td
temporary tablespace temp;
alter user pmc
quota unlimited on pmc001ti;
grant connect, resource to pmc;