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:
parent
a2eabd022e
commit
137797e17c
164
crpa/crpa.cpp
Executable file
164
crpa/crpa.cpp
Executable 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
103
crpa/crpa.dsp
Executable 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
29
crpa/crpa.dsw
Executable 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
103
crpa/crpa.ini
Executable 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
1081
crpa/crpa0.cpp
Executable file
File diff suppressed because it is too large
Load Diff
613
crpa/pmc.sql
Executable file
613
crpa/pmc.sql
Executable 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
204
crpa/search.cpp
Executable 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
4
crpa/ts_pmc.sql
Executable 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
8
crpa/user_pmc.sql
Executable 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;
|
Loading…
x
Reference in New Issue
Block a user