From ed9a803aebee1ee811f369b86ab01a1e9b4dabfd Mon Sep 17 00:00:00 2001 From: michele Date: Thu, 8 May 2025 17:41:48 +0200 Subject: [PATCH] Api VT --- .gitignore | 366 + ApiPolo/.config/dotnet-tools.json | 12 + ApiPolo/Api_VT.csproj | 35 + ApiPolo/Controllers/AdminController.cs | 75 + ApiPolo/Controllers/PoloController.cs | 14840 ++++++++++++++++ ApiPolo/Interfaces/ITenantDbContext.cs | 32 + ApiPolo/Interfaces/ITenantDbContextFactory.cs | 9 + ApiPolo/Interfaces/TenantDbContextFactory.cs | 28 + ApiPolo/Models/Anag.cs | 46 + ApiPolo/Models/AnagCommImp.cs | 15 + ApiPolo/Models/AnagTable.cs | 50 + ApiPolo/Models/AnagVT.cs | 50 + ApiPolo/Models/Articoli.cs | 37 + ApiPolo/Models/AziendaPres.cs | 16 + ApiPolo/Models/AziendaRif.cs | 29 + ApiPolo/Models/Buoni.cs | 22 + ApiPolo/Models/BuoniLW.cs | 22 + ApiPolo/Models/CC_CI.cs | 20 + ApiPolo/Models/CC_CIWiev.cs | 24 + ApiPolo/Models/Caus_Rapp.cs | 20 + ApiPolo/Models/ChiamataSeriale.cs | 18 + ApiPolo/Models/ChiamataSeriale_out.cs | 24 + ApiPolo/Models/Chiamate.cs | 410 + ApiPolo/Models/ChiamateTable.cs | 211 + ApiPolo/Models/ChiamateTableOut.cs | 212 + ApiPolo/Models/ChiamateTableTaskManager.cs | 212 + ApiPolo/Models/Chiamate_out.cs | 305 + ApiPolo/Models/Chiusure.cs | 35 + ApiPolo/Models/ChiusureTable.cs | 80 + ApiPolo/Models/CodiceSegnalazione.cs | 21 + ApiPolo/Models/Commessa.cs | 59 + ApiPolo/Models/CommessaDesc.cs | 24 + ApiPolo/Models/Commessa_out.cs | 66 + ApiPolo/Models/CommesseAdHoc_out.cs | 67 + ApiPolo/Models/CommesseVT.cs | 66 + ApiPolo/Models/CommesseVT_Table.cs | 37 + ApiPolo/Models/Compo_Impia.cs | 63 + ApiPolo/Models/Compo_Impia_Table.cs | 55 + ApiPolo/Models/Compo_Impia_out.cs | 69 + ApiPolo/Models/Configurazione_out.cs | 216 + ApiPolo/Models/Configurazioni.cs | 223 + ApiPolo/Models/ConfigurazioniDbContext.cs | 21 + ApiPolo/Models/DatiAzienda.cs | 31 + ApiPolo/Models/Error.cs | 15 + ApiPolo/Models/Impianto.cs | 57 + ApiPolo/Models/ImpiantoTable.cs | 52 + ApiPolo/Models/Impianto_out.cs | 36 + ApiPolo/Models/Input.cs | 313 + ApiPolo/Models/LoginModel.cs | 15 + ApiPolo/Models/LoginOut.cs | 231 + ApiPolo/Models/Mag_New.cs | 67 + ApiPolo/Models/Mag_New_out.cs | 72 + ApiPolo/Models/Magazzini.cs | 20 + ApiPolo/Models/MagazziniVT.cs | 29 + ApiPolo/Models/Manprog.cs | 238 + ApiPolo/Models/Manprog_out.cs | 216 + ApiPolo/Models/Notifiche.cs | 23 + ApiPolo/Models/Output_Chiamate.cs | 31 + ApiPolo/Models/Output_Ricerca.cs | 70 + ApiPolo/Models/Pagam.cs | 17 + ApiPolo/Models/Prese.cs | 38 + ApiPolo/Models/Prog.cs | 25 + ApiPolo/Models/Prog2.cs | 28 + ApiPolo/Models/Prog_out.cs | 33 + ApiPolo/Models/Progressivo.cs | 19 + ApiPolo/Models/Progressivo_out.cs | 26 + ApiPolo/Models/Rapp_New.cs | 286 + ApiPolo/Models/Rapp_New_View.cs | 286 + ApiPolo/Models/Rappmast.cs | 515 + ApiPolo/Models/Rapportino.cs | 132 + ApiPolo/Models/Registrazione.cs | 75 + ApiPolo/Models/Saldiart.cs | 73 + ApiPolo/Models/Sostituzione.cs | 27 + ApiPolo/Models/Sto_Imp.cs | 86 + ApiPolo/Models/Sto_Imp_out.cs | 31 + ApiPolo/Models/Sto_Rapp.cs | 234 + ApiPolo/Models/Sto_Rapp_out.cs | 33 + ApiPolo/Models/TabelleDominio.cs | 33 + ApiPolo/Models/Tecnici.cs | 79 + ApiPolo/Models/TecniciTable.cs | 51 + ApiPolo/Models/Timbratura.cs | 55 + ApiPolo/Models/Timbratura_out.cs | 52 + ApiPolo/Models/Token.cs | 28 + ApiPolo/Models/TokenDbContext.cs | 23 + ApiPolo/Models/Token_out.cs | 30 + ApiPolo/Models/VT_Buoni_DbContext.cs | 27 + .../VT_ARTICOLI_TABLE_DbContext.cs | 29 + .../VT_dbcontext/VT_AZIENDA_RIF_DbContext.cs | 28 + .../VT_AZIENDE_PRESENTI_DbContext.cs | 22 + .../VT_dbcontext/VT_CHIAMATE_DbContext.cs | 23 + .../VT_CHIAMATE_MANAGER_DbContext.cs | 22 + .../VT_CHIAMATE_TABLE_DbContext.cs | 27 + .../VT_dbcontext/VT_CHIUSURE_DbContext.cs | 23 + .../VT_CHIUSURE_TABLE_DbContext.cs | 27 + .../VT_CODICE_SEGNALAZIONE_DbContext.cs | 26 + .../VT_dbcontext/VT_COMMESSE_APP_DbContext.cs | 22 + .../VT_dbcontext/VT_COMMESSE_DbContext.cs | 22 + .../VT_COMMESSE_TABLE_DbContext.cs | 26 + .../Models/VT_dbcontext/VT_CONTI_DbContext.cs | 22 + .../VT_dbcontext/VT_CONTI_TABLE_DbContext.cs | 28 + .../VT_dbcontext/VT_DATI_AZIENDA_DbContext.cs | 26 + .../VT_dbcontext/VT_IMPIANTI_DbContext.cs | 22 + .../VT_IMPIANTI_MANAGER_DbContext.cs | 21 + .../VT_IMPIANTI_TABLE_DbContext.cs | 26 + .../VT_dbcontext/VT_MAGAZZINI_DbContext.cs | 25 + .../VT_dbcontext/VT_MAG_NEW_DbContext.cs | 25 + .../VT_dbcontext/VT_PROGRESSIVI_DbContext.cs | 27 + .../VT_dbcontext/VT_RAPPORTINI_DbContext.cs | 22 + .../VT_dbcontext/VT_RAPP_NEW_DbContext.cs | 23 + .../VT_RAPP_NEW_TABLE_DbContext.cs | 27 + .../VT_REGISTRAZIONE_DbContext.cs | 25 + .../VT_dbcontext/VT_SALDIART_DbContext.cs | 18 + .../VT_dbcontext/VT_STO_RAPP_DbContext.cs | 23 + .../VT_dbcontext/VT_TECNICI_DbContext.cs | 22 + .../VT_TECNICI_TABLE_DbContext.cs | 27 + .../VT_dbcontext/VT_TIMBRATURE_DbContext.cs | 26 + ApiPolo/Models/Vt_Mag_New.cs | 34 + ApiPolo/Program.cs | 65 + ApiPolo/Properties/launchSettings.json | 34 + ApiPolo/SQL/CreaVisteGitoga.txt | 273 + ApiPolo/SQL/CreaVisteLifta.txt | 273 + ApiPolo/SQL/CreaVisteMarrocco.txt | 222 + ApiPolo/SQL/Discovery_1_8.txt | 266 + ApiPolo/SQL/Gitoga_1_8.txt | 314 + ApiPolo/SQL/Lifta_1_8.txt | 308 + ApiPolo/SQL/Marrocco_1_8.txt | 323 + ApiPolo/SQL/_README_DISCO.txt | 2 + ApiPolo/Services/CronJobService.cs | 113 + ApiPolo/Services/MyCronJob1.cs | 664 + ApiPolo/Startup.cs | 207 + ApiPolo/Storico versioni.txt | 8 + ...c6-firebase-adminsdk-tioa9-fbb9ba6d66.json | 13 + ApiPolo/appsettings.Development.json | 8 + ApiPolo/appsettings.json | 67 + ApiPolo/loghi/disco_app2.jpg | Bin 0 -> 41754 bytes ApiPolo/private_key.json | 12 + ApiPolo/wwwroot/VIRTU/AZI01/AZI01_LOGO.jpg | Bin 0 -> 105482 bytes ApiPolo/wwwroot/VIRTU/AZI02/AZI02_LOGO.jpg | Bin 0 -> 107641 bytes ApiPolo/wwwroot/VIRTU/AZI02/No_image.png | Bin 0 -> 81469 bytes ApiPolo/wwwroot/VIRTU/AZI02/R.png | Bin 0 -> 116807 bytes ApiPolo/wwwroot/VIRTU/AZI02/company2.png | Bin 0 -> 1723 bytes ApiPolo/wwwroot/VIRTU/AZI02/img2.png | Bin 0 -> 81469 bytes ApiPolo/wwwroot/VIRTU/CAV00001.jpg | Bin 0 -> 38171 bytes ApiPolo/wwwroot/logo_disco.jpg | Bin 0 -> 41754 bytes ApiPolo/wwwroot/logo_ferra.jpg | Bin 0 -> 13229 bytes ApiPolo/wwwroot/logo_marro.jpg | Bin 0 -> 21361 bytes Api_VT.sln | 25 + 147 files changed, 26063 insertions(+) create mode 100644 .gitignore create mode 100644 ApiPolo/.config/dotnet-tools.json create mode 100644 ApiPolo/Api_VT.csproj create mode 100644 ApiPolo/Controllers/AdminController.cs create mode 100644 ApiPolo/Controllers/PoloController.cs create mode 100644 ApiPolo/Interfaces/ITenantDbContext.cs create mode 100644 ApiPolo/Interfaces/ITenantDbContextFactory.cs create mode 100644 ApiPolo/Interfaces/TenantDbContextFactory.cs create mode 100644 ApiPolo/Models/Anag.cs create mode 100644 ApiPolo/Models/AnagCommImp.cs create mode 100644 ApiPolo/Models/AnagTable.cs create mode 100644 ApiPolo/Models/AnagVT.cs create mode 100644 ApiPolo/Models/Articoli.cs create mode 100644 ApiPolo/Models/AziendaPres.cs create mode 100644 ApiPolo/Models/AziendaRif.cs create mode 100644 ApiPolo/Models/Buoni.cs create mode 100644 ApiPolo/Models/BuoniLW.cs create mode 100644 ApiPolo/Models/CC_CI.cs create mode 100644 ApiPolo/Models/CC_CIWiev.cs create mode 100644 ApiPolo/Models/Caus_Rapp.cs create mode 100644 ApiPolo/Models/ChiamataSeriale.cs create mode 100644 ApiPolo/Models/ChiamataSeriale_out.cs create mode 100644 ApiPolo/Models/Chiamate.cs create mode 100644 ApiPolo/Models/ChiamateTable.cs create mode 100644 ApiPolo/Models/ChiamateTableOut.cs create mode 100644 ApiPolo/Models/ChiamateTableTaskManager.cs create mode 100644 ApiPolo/Models/Chiamate_out.cs create mode 100644 ApiPolo/Models/Chiusure.cs create mode 100644 ApiPolo/Models/ChiusureTable.cs create mode 100644 ApiPolo/Models/CodiceSegnalazione.cs create mode 100644 ApiPolo/Models/Commessa.cs create mode 100644 ApiPolo/Models/CommessaDesc.cs create mode 100644 ApiPolo/Models/Commessa_out.cs create mode 100644 ApiPolo/Models/CommesseAdHoc_out.cs create mode 100644 ApiPolo/Models/CommesseVT.cs create mode 100644 ApiPolo/Models/CommesseVT_Table.cs create mode 100644 ApiPolo/Models/Compo_Impia.cs create mode 100644 ApiPolo/Models/Compo_Impia_Table.cs create mode 100644 ApiPolo/Models/Compo_Impia_out.cs create mode 100644 ApiPolo/Models/Configurazione_out.cs create mode 100644 ApiPolo/Models/Configurazioni.cs create mode 100644 ApiPolo/Models/ConfigurazioniDbContext.cs create mode 100644 ApiPolo/Models/DatiAzienda.cs create mode 100644 ApiPolo/Models/Error.cs create mode 100644 ApiPolo/Models/Impianto.cs create mode 100644 ApiPolo/Models/ImpiantoTable.cs create mode 100644 ApiPolo/Models/Impianto_out.cs create mode 100644 ApiPolo/Models/Input.cs create mode 100644 ApiPolo/Models/LoginModel.cs create mode 100644 ApiPolo/Models/LoginOut.cs create mode 100644 ApiPolo/Models/Mag_New.cs create mode 100644 ApiPolo/Models/Mag_New_out.cs create mode 100644 ApiPolo/Models/Magazzini.cs create mode 100644 ApiPolo/Models/MagazziniVT.cs create mode 100644 ApiPolo/Models/Manprog.cs create mode 100644 ApiPolo/Models/Manprog_out.cs create mode 100644 ApiPolo/Models/Notifiche.cs create mode 100644 ApiPolo/Models/Output_Chiamate.cs create mode 100644 ApiPolo/Models/Output_Ricerca.cs create mode 100644 ApiPolo/Models/Pagam.cs create mode 100644 ApiPolo/Models/Prese.cs create mode 100644 ApiPolo/Models/Prog.cs create mode 100644 ApiPolo/Models/Prog2.cs create mode 100644 ApiPolo/Models/Prog_out.cs create mode 100644 ApiPolo/Models/Progressivo.cs create mode 100644 ApiPolo/Models/Progressivo_out.cs create mode 100644 ApiPolo/Models/Rapp_New.cs create mode 100644 ApiPolo/Models/Rapp_New_View.cs create mode 100644 ApiPolo/Models/Rappmast.cs create mode 100644 ApiPolo/Models/Rapportino.cs create mode 100644 ApiPolo/Models/Registrazione.cs create mode 100644 ApiPolo/Models/Saldiart.cs create mode 100644 ApiPolo/Models/Sostituzione.cs create mode 100644 ApiPolo/Models/Sto_Imp.cs create mode 100644 ApiPolo/Models/Sto_Imp_out.cs create mode 100644 ApiPolo/Models/Sto_Rapp.cs create mode 100644 ApiPolo/Models/Sto_Rapp_out.cs create mode 100644 ApiPolo/Models/TabelleDominio.cs create mode 100644 ApiPolo/Models/Tecnici.cs create mode 100644 ApiPolo/Models/TecniciTable.cs create mode 100644 ApiPolo/Models/Timbratura.cs create mode 100644 ApiPolo/Models/Timbratura_out.cs create mode 100644 ApiPolo/Models/Token.cs create mode 100644 ApiPolo/Models/TokenDbContext.cs create mode 100644 ApiPolo/Models/Token_out.cs create mode 100644 ApiPolo/Models/VT_Buoni_DbContext.cs create mode 100644 ApiPolo/Models/VT_dbcontext/VT_ARTICOLI_TABLE_DbContext.cs create mode 100644 ApiPolo/Models/VT_dbcontext/VT_AZIENDA_RIF_DbContext.cs create mode 100644 ApiPolo/Models/VT_dbcontext/VT_AZIENDE_PRESENTI_DbContext.cs create mode 100644 ApiPolo/Models/VT_dbcontext/VT_CHIAMATE_DbContext.cs create mode 100644 ApiPolo/Models/VT_dbcontext/VT_CHIAMATE_MANAGER_DbContext.cs create mode 100644 ApiPolo/Models/VT_dbcontext/VT_CHIAMATE_TABLE_DbContext.cs create mode 100644 ApiPolo/Models/VT_dbcontext/VT_CHIUSURE_DbContext.cs create mode 100644 ApiPolo/Models/VT_dbcontext/VT_CHIUSURE_TABLE_DbContext.cs create mode 100644 ApiPolo/Models/VT_dbcontext/VT_CODICE_SEGNALAZIONE_DbContext.cs create mode 100644 ApiPolo/Models/VT_dbcontext/VT_COMMESSE_APP_DbContext.cs create mode 100644 ApiPolo/Models/VT_dbcontext/VT_COMMESSE_DbContext.cs create mode 100644 ApiPolo/Models/VT_dbcontext/VT_COMMESSE_TABLE_DbContext.cs create mode 100644 ApiPolo/Models/VT_dbcontext/VT_CONTI_DbContext.cs create mode 100644 ApiPolo/Models/VT_dbcontext/VT_CONTI_TABLE_DbContext.cs create mode 100644 ApiPolo/Models/VT_dbcontext/VT_DATI_AZIENDA_DbContext.cs create mode 100644 ApiPolo/Models/VT_dbcontext/VT_IMPIANTI_DbContext.cs create mode 100644 ApiPolo/Models/VT_dbcontext/VT_IMPIANTI_MANAGER_DbContext.cs create mode 100644 ApiPolo/Models/VT_dbcontext/VT_IMPIANTI_TABLE_DbContext.cs create mode 100644 ApiPolo/Models/VT_dbcontext/VT_MAGAZZINI_DbContext.cs create mode 100644 ApiPolo/Models/VT_dbcontext/VT_MAG_NEW_DbContext.cs create mode 100644 ApiPolo/Models/VT_dbcontext/VT_PROGRESSIVI_DbContext.cs create mode 100644 ApiPolo/Models/VT_dbcontext/VT_RAPPORTINI_DbContext.cs create mode 100644 ApiPolo/Models/VT_dbcontext/VT_RAPP_NEW_DbContext.cs create mode 100644 ApiPolo/Models/VT_dbcontext/VT_RAPP_NEW_TABLE_DbContext.cs create mode 100644 ApiPolo/Models/VT_dbcontext/VT_REGISTRAZIONE_DbContext.cs create mode 100644 ApiPolo/Models/VT_dbcontext/VT_SALDIART_DbContext.cs create mode 100644 ApiPolo/Models/VT_dbcontext/VT_STO_RAPP_DbContext.cs create mode 100644 ApiPolo/Models/VT_dbcontext/VT_TECNICI_DbContext.cs create mode 100644 ApiPolo/Models/VT_dbcontext/VT_TECNICI_TABLE_DbContext.cs create mode 100644 ApiPolo/Models/VT_dbcontext/VT_TIMBRATURE_DbContext.cs create mode 100644 ApiPolo/Models/Vt_Mag_New.cs create mode 100644 ApiPolo/Program.cs create mode 100644 ApiPolo/Properties/launchSettings.json create mode 100644 ApiPolo/SQL/CreaVisteGitoga.txt create mode 100644 ApiPolo/SQL/CreaVisteLifta.txt create mode 100644 ApiPolo/SQL/CreaVisteMarrocco.txt create mode 100644 ApiPolo/SQL/Discovery_1_8.txt create mode 100644 ApiPolo/SQL/Gitoga_1_8.txt create mode 100644 ApiPolo/SQL/Lifta_1_8.txt create mode 100644 ApiPolo/SQL/Marrocco_1_8.txt create mode 100644 ApiPolo/SQL/_README_DISCO.txt create mode 100644 ApiPolo/Services/CronJobService.cs create mode 100644 ApiPolo/Services/MyCronJob1.cs create mode 100644 ApiPolo/Startup.cs create mode 100644 ApiPolo/Storico versioni.txt create mode 100644 ApiPolo/api_VT-952c6-firebase-adminsdk-tioa9-fbb9ba6d66.json create mode 100644 ApiPolo/appsettings.Development.json create mode 100644 ApiPolo/appsettings.json create mode 100644 ApiPolo/loghi/disco_app2.jpg create mode 100644 ApiPolo/private_key.json create mode 100644 ApiPolo/wwwroot/VIRTU/AZI01/AZI01_LOGO.jpg create mode 100644 ApiPolo/wwwroot/VIRTU/AZI02/AZI02_LOGO.jpg create mode 100644 ApiPolo/wwwroot/VIRTU/AZI02/No_image.png create mode 100644 ApiPolo/wwwroot/VIRTU/AZI02/R.png create mode 100644 ApiPolo/wwwroot/VIRTU/AZI02/company2.png create mode 100644 ApiPolo/wwwroot/VIRTU/AZI02/img2.png create mode 100644 ApiPolo/wwwroot/VIRTU/CAV00001.jpg create mode 100644 ApiPolo/wwwroot/logo_disco.jpg create mode 100644 ApiPolo/wwwroot/logo_ferra.jpg create mode 100644 ApiPolo/wwwroot/logo_marro.jpg create mode 100644 Api_VT.sln diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b45c758 --- /dev/null +++ b/.gitignore @@ -0,0 +1,366 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Oo]ut/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd +/.vs/ApiPolo/v17/.suo +/.vs/ApiPolo/v17/.futdcache.v2 +/.vs/ApiPolo/DesignTimeBuild/.dtbcache.v2 diff --git a/ApiPolo/.config/dotnet-tools.json b/ApiPolo/.config/dotnet-tools.json new file mode 100644 index 0000000..fccc806 --- /dev/null +++ b/ApiPolo/.config/dotnet-tools.json @@ -0,0 +1,12 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "dotnet-ef": { + "version": "7.0.0", + "commands": [ + "dotnet-ef" + ] + } + } +} \ No newline at end of file diff --git a/ApiPolo/Api_VT.csproj b/ApiPolo/Api_VT.csproj new file mode 100644 index 0000000..aed9739 --- /dev/null +++ b/ApiPolo/Api_VT.csproj @@ -0,0 +1,35 @@ + + + + net6.0 + enable + enable + True + + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + + + diff --git a/ApiPolo/Controllers/AdminController.cs b/ApiPolo/Controllers/AdminController.cs new file mode 100644 index 0000000..62f0dc5 --- /dev/null +++ b/ApiPolo/Controllers/AdminController.cs @@ -0,0 +1,75 @@ +using ApiPolo.Models; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Data.SqlClient; +using System.Data; +using System.IdentityModel.Tokens.Jwt; + +namespace ApiPolo.Controllers +{ + /// Controller per Admin + [Route("api/[controller]")] + [ApiController] + public class AdminController : Controller + { + private readonly IConfiguration _configuration; + + /// + public AdminController(IConfiguration configuration) + { + _configuration = configuration; + } + + /// + [HttpGet("esegui")] + public IActionResult EseguiStoredProcedure([FromQuery] string token, [FromQuery] int idReg,[FromQuery] string stored) + { + string connStr = _configuration.GetConnectionString("ApiStr"); + string sa = getClaimValueByToken(token, "superAdmin"); + if(!string.IsNullOrEmpty(sa) && sa.Equals("S")) + { + using (SqlConnection conn = new SqlConnection(connStr)) + { + using (SqlCommand cmd = new SqlCommand(stored, conn)) + { + cmd.CommandType = CommandType.StoredProcedure; + // Aggiungi i parametri richiesti dalla stored procedure + cmd.Parameters.Add(new SqlParameter("@idReg", idReg)); + + try + { + conn.Open(); + int righeEffettuate = cmd.ExecuteNonQuery(); + + return Ok(new { Successo = true, RigheInserite = righeEffettuate }); + } + catch (Exception ex) + { + return StatusCode(500, $"Errore durante l'inserimento: {ex.Message}"); + } + } + } + } + else + { + return StatusCode(403, "Accesso negato: non hai i permessi necessari."); + } + + + } + + + private string getClaimValueByToken(string token, string claimName) + { + string t = string.Empty; + + var handler = new JwtSecurityTokenHandler(); + var jwtSecurityToken = handler.ReadJwtToken(token); + if (jwtSecurityToken != null) + { + var id = jwtSecurityToken.Claims.First(claim => claim.Type == claimName).Value; + t = id; + } + return t; + } + } +} diff --git a/ApiPolo/Controllers/PoloController.cs b/ApiPolo/Controllers/PoloController.cs new file mode 100644 index 0000000..5c474ae --- /dev/null +++ b/ApiPolo/Controllers/PoloController.cs @@ -0,0 +1,14840 @@ +using ApiPolo.Models; + + +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using Microsoft.IdentityModel.Tokens; +using Renci.SshNet; +using System.IdentityModel.Tokens.Jwt; +using System.Net; +using System.Security.Claims; +using System.Text; + +using System.Collections.Generic; +using System.Drawing; +using FirebaseAdmin; +using FirebaseAdmin.Messaging; +using Google.Apis.Auth.OAuth2; +using Newtonsoft.Json; +using static ApiPolo.Controllers.PoloController; +using System.Net.Http.Headers; +using Newtonsoft.Json.Linq; +using System.Linq.Expressions; +using FirebaseAdmin.Auth.Multitenancy; +using System.Globalization; +using ApiPolo.Models.VT_dbcontext; +using System.Diagnostics.Contracts; +using Microsoft.EntityFrameworkCore.Storage; +using System.Diagnostics.Metrics; +using System.Transactions; +using System.Web.Razor.Parser; +using System; +using System.Collections; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using static Microsoft.Extensions.Logging.EventSource.LoggingEventSource; +using static System.Net.Mime.MediaTypeNames; +using System.IO; +using Microsoft.AspNetCore.Http; +using System.Data; +using System.Linq; +using Microsoft.Extensions.Primitives; +using System.Text.RegularExpressions; +using System.Runtime.CompilerServices; +using System.Diagnostics; +using Api_VT.Models.VT_dbcontext; +using Api_VT.Models; + +namespace ApiPolo.Controllers +{ + /// + /// Controller unico + /// + [Route("api/[controller]")] + [ApiController] + public class PoloController : Controller + { + private string _token = string.Empty; + private readonly ConfigurazioniDbContext? _config; + private readonly IConfiguration? _configuration; + + private readonly TokenDbContext? _tokens; + + #region TECNICI + + private readonly VT_TECNICI_DbContext _VT_tecnici; + + #endregion + + #region VT - Chiusure + private readonly VT_CHIUSURE_TABLE_DbContext _VT_chiutable; + private readonly VT_CHIUSURE_DbContext _VT_chiu; + #endregion + + #region VT - Tecnici + private readonly VT_TECNICI_TABLE_DbContext _VT_tectable; + private readonly VT_TECNICI_DbContext _VT_tec; + #endregion + + #region VT - anagrafiche + private readonly VT_CONTI_TABLE_DbContext _VT_anagtable; + private readonly VT_CONTI_DbContext _VT_anag; + #endregion + + #region VT - Impianti + private readonly VT_IMPIANTI_TABLE_DbContext _VT_impiatable; + private readonly VT_IMPIANTI_DbContext _VT_impia; + private readonly VT_IMPIANTI_MANAGER_DbContext _VT_impiaMngr; + #endregion + + #region VT-RAPP NEW + private readonly VT_RAPP_NEW_TABLE_DbContext _VT_rapptable; + private readonly VT_RAPP_NEW_DbContext _VT_rapp; + #endregion + + #region VT-CHIAMATE + private readonly VT_CHIAMATE_TABLE_DbContext _VT_chiatable; + private readonly VT_CHIAMATE_DbContext _VT_chia; + private readonly VT_CHIAMATE_MANAGER_DbContext _VT_chiaMngr; + #endregion + + #region VT-Progressivi + private readonly VT_PROGRESSIVI_DbContext _VT_progtable; + #endregion + + #region VT-aziende + private readonly VT_AZIENDA_RIF_DbContext _VT_azi; + #endregion + + #region VT-registrazioni + private readonly VT_REGISTRAZIONE_DbContext _VT_reg; + #endregion + + #region VT-aziendePresenti + private readonly VT_AZIENDE_PRESENTI_DbContext _VT_AziPres; + #endregion + + #region VT-commesse + private readonly VT_COMMESSE_DbContext _VT_Comm; + private readonly VT_COMMESSE_TABLE_DbContext _VT_CommTable; + private readonly VT_COMMESSE_APP_DbContext _VT_CommApp; + #endregion + + #region VT-rapportini excel + private readonly VT_RAPPORTINI_DbContext _VT_Rapportini; + + #endregion + + #region VT-Buoni + private readonly VT_Buoni_DbContext _VT_Buoni; + #endregion + + #region VT - Dati azienda + private readonly VT_DATI_AZIENDA_DbContext _VT_DatiAzienda; + #endregion + + #region VT-Storico Rapp + private readonly VT_STO_RAPP_DbContext _VT_StoRapp; + #endregion + + #region VT-TIMBRATURE + private readonly VT_TIMBRATURE_DbContext _VT_timbr; + #endregion + + #region VT-ARTICOLI + private readonly VT_ARTICOLI_TABLE_DbContext _VT_articoliTable; + #endregion + + #region VT-MAG_NEW + private readonly VT_MAG_NEW_DbContext _VT_MagNew; + #endregion + + #region VT-MAGAZZINI + private readonly VT_MAGAZZINI_DbContext _VT_Magazzini; + #endregion + + #region VT-CODICI SEGNALAZIONI + private readonly VT_CODICE_SEGNALAZIONE_DbContext _VT_CodSegn; + #endregion + + + private DbSet? _tecnici; + private DbSet? _rapp_new; + private DbSet? _chiamate; + private DbSet? _chiusure; + private DbSet? _manutprog; + private DbSet? _prese; + private DbSet? _compo; + private DbSet? _compoTable; + private DbSet? _saldi; + private DbSet? _mag; + private DbSet? _magazzini; + private DbSet? _sto_rapp; + private DbSet? _clienti; + private DbSet? _cau_rapp; + private DbSet? _pagam; + private DbSet? _comm; + private DbSet? _timbr; + private DbSet? _sto_imp; + private DbSet? _azi_coll; + private DbSet? _impianto; + private DbSet? _sostituzione; + private DbSet? _chiatable; + private DbSet? _chiatableTaskManager; + private DbSet? _chiamateser; + private DbSet? _chiamateprogr; + private DbSet? _cpwarns; + + private DbSet? _chiuTable; + private DbSet? _tecTable; + private DbSet? _anagTable; + private DbSet? _impiaTable; + private DbSet? _clientiVT; + private DbSet? _VT_prog; + private DbSet? _VT_regi; + private DbSet? _VT_AziPresenti; + private DbSet? _VT_Commesse; + private DbSet? _VT_CommesseTable; + private DbSet? _VT_DatiAzi; + private DbSet? _VT_rapport; + private DbSet? _VT_buo; + private DbSet? _rapp_new_view; + private DbSet? _articoliTable; + private DbSet? _magNewVT; + private DbSet? _magazziniVT; + private DbSet? _codSegnVT; + + private DbSet? _commDesc; + + private DbSet? _ccci; + private DbSet? _ccciView; + + private Configurazioni? _confLette; + + /// polocontroller + public PoloController(IConfiguration configuration,ConfigurazioniDbContext config + ,TokenDbContext tokens,VT_TECNICI_DbContext VT_tecnici, + #region Virtual task + VT_TECNICI_TABLE_DbContext VT_tectable, + VT_TECNICI_DbContext VT_tec, + VT_CHIUSURE_TABLE_DbContext VT_chiutable, + VT_CHIUSURE_DbContext VT_chiu, + VT_CONTI_TABLE_DbContext VT_anagtable, + VT_CONTI_DbContext VT_anag, + VT_RAPP_NEW_TABLE_DbContext VT_rapptable, + VT_RAPP_NEW_DbContext VT_rapp, + VT_IMPIANTI_TABLE_DbContext VT_impiatable, + VT_IMPIANTI_DbContext VT_impia, + VT_IMPIANTI_MANAGER_DbContext VT_impiaMngr, + VT_CHIAMATE_TABLE_DbContext VT_chiatable, + VT_CHIAMATE_DbContext VT_chia, + VT_PROGRESSIVI_DbContext VT_progtable, + VT_CHIAMATE_MANAGER_DbContext VT_chiaMngr, + VT_AZIENDA_RIF_DbContext VT_azi, + VT_REGISTRAZIONE_DbContext VT_reg, + VT_AZIENDE_PRESENTI_DbContext VT_AziPres, + VT_COMMESSE_DbContext VT_Comm, + VT_COMMESSE_TABLE_DbContext VT_CommTable, + VT_COMMESSE_APP_DbContext VT_CommApp, + VT_DATI_AZIENDA_DbContext VT_DatiAzienda, + VT_RAPPORTINI_DbContext VT_Rapportini, + VT_Buoni_DbContext VT_Buoni, + VT_STO_RAPP_DbContext VT_StoRapp, + VT_TIMBRATURE_DbContext VT_timbr, + VT_ARTICOLI_TABLE_DbContext VT_artTable, + VT_MAG_NEW_DbContext VT_MagNew, + VT_MAGAZZINI_DbContext VT_Magazzini, + VT_CODICE_SEGNALAZIONE_DbContext VT_CodSegn + #endregion + ) + { + _configuration = configuration; + _config = config; + _tokens = tokens; + + #region TECNICI + _VT_tecnici = VT_tecnici; + #endregion + + #region VIRTUAL TASK + _VT_tectable = VT_tectable; + _VT_tec = VT_tec; + _VT_chiutable = VT_chiutable; + _VT_chiu = VT_chiu; + _VT_anagtable = VT_anagtable; + _VT_anag = VT_anag; + _VT_rapptable = VT_rapptable; + _VT_rapp = VT_rapp; + _VT_impiatable = VT_impiatable; + _VT_impia = VT_impia; + _VT_impiaMngr = VT_impiaMngr; + _VT_chiatable = VT_chiatable; + _VT_chia = VT_chia; + _VT_progtable = VT_progtable; + _VT_chiaMngr = VT_chiaMngr; + _VT_azi = VT_azi; + _VT_reg = VT_reg; + _VT_AziPres = VT_AziPres; + _VT_Comm = VT_Comm; + _VT_CommTable = VT_CommTable; + _VT_CommApp = VT_CommApp; + _VT_DatiAzienda = VT_DatiAzienda; + _VT_Rapportini = VT_Rapportini; + _VT_Buoni = VT_Buoni; + _VT_StoRapp = VT_StoRapp; + _VT_articoliTable = VT_artTable; + _VT_MagNew = VT_MagNew; + _VT_Magazzini = VT_Magazzini; + _VT_CodSegn = VT_CodSegn; + #endregion + + } + + #region Utility + private async Task readConf(string ten) + { + Configurazioni c=new Configurazioni(); + List co =new List(); + if(_config is not null && _config.conf is not null) + //co = await _config.conf.Where(t => t.azienda_adhoc == ten).ToListAsync(); + co = await _config.conf.Where(t => t.azienda == ten).ToListAsync(); + + foreach (var a in co) + { + c.azienda = a.azienda != null ? a.azienda.Trim() : string.Empty; ; + c.prefisso_buoni_chia = a.prefisso_buoni_chia!=null ?a.prefisso_buoni_chia.Trim():string.Empty; + c.prefisso_buoni_man = a.prefisso_buoni_man !=null ? a.prefisso_buoni_man.Trim():string.Empty; + c.path_buoni = a.path_buoni != null ? a.path_buoni.Trim() : string.Empty; + c.ftp_url = a.ftp_url != null ? a.ftp_url.Trim() : string.Empty; + c.ftp_usr = a.ftp_usr != null ? a.ftp_usr.Trim() : string.Empty; + c.ftp_pwd = a.ftp_pwd != null ? a.ftp_pwd.Trim() : string.Empty; + c.listino=a.listino!=null? a.listino.Trim() : string.Empty; + + + c.abilita_naviga = a.abilita_naviga != null ? a.abilita_naviga : true; + c.abilita_telefona = a.abilita_telefona != null ? a.abilita_telefona : true; + c.abilita_chiamate = a.abilita_chiamate != null ? a.abilita_chiamate : true; + c.abilita_manutenzioni = a.abilita_manutenzioni != null ? a.abilita_manutenzioni : true; + c.abilita_barcode = a.abilita_barcode != null ? a.abilita_barcode : true; + c.chiamate_accetta = a.chiamate_accetta != null ? a.chiamate_accetta : true; + c.chiamate_accetta_barcode = a.chiamate_accetta_barcode != null ? a.chiamate_accetta_barcode : true; + c.chiamate_accetta_offline = a.chiamate_accetta_offline != null ? a.chiamate_accetta_offline : true; + c.chiamate_rifiuta = a.chiamate_rifiuta != null ? a.chiamate_rifiuta : true; + c.chiamate_rifiuta_barcode = a.chiamate_rifiuta_barcode != null ? a.chiamate_rifiuta_barcode : true; + c.chiamate_rifiuta_offline = a.chiamate_rifiuta_offline != null ? a.chiamate_rifiuta_offline : true; + c.chiamate_chiudi_barcode = a.chiamate_chiudi_barcode != null ? a.chiamate_chiudi_barcode : true; + c.chiamate_firma_barcode = a.chiamate_firma_barcode != null ? a.chiamate_firma_barcode : true; + c.chiamate_chiudi_salva_barcode = a.chiamate_chiudi_salva_barcode != null ? a.chiamate_chiudi_salva_barcode : true; + c.chiamate_chiudi_salva_offline = a.chiamate_chiudi_salva_offline != null ? a.chiamate_chiudi_salva_offline : true; + + c.manutenzioni_accetta = a.manutenzioni_accetta != null ? a.manutenzioni_accetta : true; + c.manutenzioni_rifiuta = a.manutenzioni_rifiuta != null ? a.manutenzioni_rifiuta : true; + c.manutenzioni_accetta_barcode = a.manutenzioni_accetta_barcode != null ? a.manutenzioni_accetta_barcode : true; + c.manutenzioni_accetta_offline = a.manutenzioni_accetta_offline != null ? a.manutenzioni_accetta_offline : true; + c.manutenzioni_chiudi_barcode = a.manutenzioni_chiudi_barcode != null ? a.manutenzioni_chiudi_barcode : true; + c.manutenzioni_firma_barcode = a.manutenzioni_firma_barcode != null ? a.manutenzioni_firma_barcode : true; + c.manutenzioni_chiudi_salva_barcode = a.manutenzioni_chiudi_salva_barcode != null ? a.manutenzioni_chiudi_salva_barcode : true; + c.manutenzioni_chiudi_salva_offline = a.manutenzioni_chiudi_salva_offline != null ? a.manutenzioni_chiudi_salva_offline : true; + c.manutenzioni_rifiuta_barcode = a.manutenzioni_rifiuta_barcode != null ? a.manutenzioni_rifiuta_barcode : true; + + c.dpi_checkbox = a.dpi_checkbox != null ? a.dpi_checkbox : true; + + c.anagrafica = a.anagrafica != null ? a.anagrafica : true; + c.stato_finale = a.stato_finale != null ? a.stato_finale : true; + c.descrizione_intervento = a.descrizione_intervento != null ? a.descrizione_intervento : true; + c.composizione_impianto = a.composizione_impianto != null ? a.composizione_impianto : true; + c.note_intervento = a.note_intervento != null ? a.note_intervento : true; + c.esito_intervento = a.esito_intervento != null ? a.esito_intervento : true; + c.ora_inizio_fine = a.ora_inizio_fine != null ? a.ora_inizio_fine : true; + c.materiali = a.materiali != null ? a.materiali : true; + c.diritto_chiamata = a.diritto_chiamata != null ? a.diritto_chiamata : true; + c.manodopera = a.manodopera != null ? a.manodopera : true; + c.spese_viaggio = a.spese_viaggio != null ? a.spese_viaggio : true; + c.tipo_pagamento = a.tipo_pagamento != null ? a.tipo_pagamento : true; + c.note_pagamento = a.note_pagamento != null ? a.note_pagamento : true; + c.causale = a.causale != null ? a.causale : true; + + c.time_sheet=a.time_sheet!= null ? a.time_sheet : true; + c.time_sheet_offline = a.time_sheet_offline != null ? a.time_sheet_offline : true; + c.costo_orario = a.costo_orario != null ? a.costo_orario : 0; + c.ftp_port = a.ftp_port != null ? a.ftp_port : 0; + + c.storico=a.storico != null ? a.storico : true; + c.storico_tecnico = a.storico_tecnico != null ? a.storico_tecnico : true; + + c.storico_interventi = a.storico_interventi != null ? a.storico_interventi : true; + c.storico_impianto = a.storico_impianto != null ? a.storico_impianto : true; + c.ricerca_impianti = a.ricerca_impianti != null ? a.ricerca_impianti : true; + c.ora_inizio_fine_automatica = a.ora_inizio_fine_automatica != null ? a.ora_inizio_fine_automatica : true; + c.stampa_orario = a.stampa_orario != null ? a.stampa_orario : true; + c.intestazione_stampa = a.intestazione_stampa != null ? a.intestazione_stampa.Trim() : string.Empty; + c.abilita_inserimento_chiamate = a.abilita_inserimento_chiamate != null ? a.abilita_inserimento_chiamate : 0; + c.seriale_template_chi = a.seriale_template_chi != null ? a.seriale_template_chi : string.Empty; + c.abilita_data_rapp_edit = a.abilita_data_rapp_edit != null ? a.abilita_data_rapp_edit : false; + c.numeri_decimali = a.numeri_decimali != null ? a.numeri_decimali : 0; + c.max_record = a.max_record != null ? a.max_record : 100; + c.prezzi_visibili = a.prezzi_visibili != null ? a.prezzi_visibili : true; + c.desc_supp_prodotti_visibile=a.desc_supp_prodotti_visibile!=null?a.desc_supp_prodotti_visibile:false; + c.azienda_adhoc = a.azienda_adhoc != null ? a.azienda_adhoc : string.Empty; + + c.azienda_adhoc = a.azienda_adhoc != null ? a.azienda_adhoc : string.Empty; + c.desc_interv_stampa = a.desc_interv_stampa != null ? a.desc_interv_stampa : false; + c.note_interv_stampa = a.note_interv_stampa != null ? a.note_interv_stampa :false; + + } + return c; + } + private string getClaimValueByToken(string token, string claimName) + { + string t = string.Empty; + + var handler = new JwtSecurityTokenHandler(); + var jwtSecurityToken = handler.ReadJwtToken(token); + if (jwtSecurityToken != null) + { + var id = jwtSecurityToken.Claims.First(claim => claim.Type == claimName).Value; + t = id; + } + return t; + } + private DbSet getTecniciByTenant(string tenant) + { + DbSet? _tecs; + string appo = string.Empty; + _tecs = _VT_tec.Tecnici; + + return _tecs; + } + + + private DbSet getChiamateByTenant(string tenant) + { + DbSet? _calls; + + _calls = _VT_chia.Chiamate; + + return _calls; + } + private DbSet getChiusureByTenant(string tenant) + { + DbSet? _chiu; + _chiu = _VT_chiu.Chiu; + return _chiu; + } + + //private DbSet getManutenzioniByTenant(string tenant) + //{ + // DbSet? _mans; + + // switch (tenant) + // { + // case Clienti.Ferrari: + // _mans = _Ferra_mp.Manutenzioni; + // break; + // case Clienti.Marrocco: + // _mans = _Marro_mp.Manutenzioni; + // break; + // case Clienti.Sicilia: + // _mans = _Sicilia_mp.Manutenzioni; + // break; + // case Clienti.Discovery: + // _mans = _Disco_mp.Manutenzioni; + // break; + // case Clienti.Sarom: + // _mans = _Sarom_mp.Manutenzioni; + // break; + // case Clienti.Gitoga: + // _mans = _Gitoga_mp.Manutenzioni; + // break; + // case Clienti.Lifta: + // _mans = _Lifta_mp.Manutenzioni; + // break; + // case Clienti.Siet: + // _mans = _Siet_mp.Manutenzioni; + // break; + // case Clienti.PMS: + // _mans = _PMS_mp.Manutenzioni; + // break; + // case Clienti.LW: + // _mans = _LW_mp.Manutenzioni; + // break; + // case Clienti.Tedesco: + // _mans = _Tedes_mp.Manutenzioni; + // break; + // case Clienti.Syscom: + // _mans = _Sys_mp.Manutenzioni; + // break; + // default: + // _mans = null; + // break; + // } + // return _mans; + //} + + //private DbSet getPreseByTenant(string tenant) + //{ + // DbSet? _pre; + + // switch (tenant) + // { + // case Clienti.Ferrari: + // _pre = _Ferra_prese.Prese; + // break; + // case Clienti.Marrocco: + // _pre = _Marro_prese.Prese; + // break; + // case Clienti.Sicilia: + // _pre = _Sicilia_prese.Prese; + // break; + // case Clienti.Discovery: + // _pre = _Disco_prese.Prese; + // break; + // case Clienti.Sarom: + // _pre = _Sarom_prese.Prese; + // break; + // case Clienti.Gitoga: + // _pre = _Gitoga_prese.Prese; + // break; + // case Clienti.Lifta: + // _pre = _Lifta_prese.Prese; + // break; + // case Clienti.Siet: + // _pre = _Siet_prese.Prese; + // break; + // case Clienti.PMS: + // _pre = _PMS_prese.Prese; + // break; + // case Clienti.LW: + // _pre = _LW_prese.Prese; + // break; + // case Clienti.Tedesco: + // _pre = _Tedes_prese.Prese; + // break; + // case Clienti.Syscom: + // _pre = _Sys_prese.Prese; + // break; + // default: + // _pre = null; + // break; + // } + // return _pre; + //} + + //private DbSet getSto_RappByTenant(string tenant) + //{ + // DbSet? _sto; + + // switch (tenant) + // { + // case Clienti.Sicilia: + // _sto = _Sicilia_sto_rapp.StoRapp; + // break; + // case Clienti.Discovery: + // _sto = _Disco_sto_rapp.StoRapp; + // break; + // case Clienti.Marrocco: + // _sto = _Marro_sto_rapp.StoRapp; + // break; + // case Clienti.Ferrari: + // _sto = _Ferra_sto_rapp.StoRapp; + // break; + // case Clienti.Sarom: + // _sto = _Sarom_sto_rapp.StoRapp; + // break; + // case Clienti.Gitoga: + // _sto = _Gitoga_sto_rapp.StoRapp; + // break; + // case Clienti.Lifta: + // _sto = _Lifta_sto_rapp.StoRapp; + // break; + // case Clienti.Siet: + // _sto = _Siet_sto_rapp.StoRapp; + // break; + // case Clienti.PMS: + // _sto = _PMS_sto_rapp.StoRapp; + // break; + // case Clienti.LW: + // _sto = _LW_sto_rapp.StoRapp; + // break; + // case Clienti.Tedesco: + // _sto = _Tedes_sto_rapp.StoRapp; + // break; + // case Clienti.Syscom: + // _sto = _Sys_sto_rapp.StoRapp; + // break; + // default: + // _sto = null; + // break; + // } + // return _sto; + //} + + //private DbSet getClientiByTenant(string tenant) + //{ + // DbSet? _cli; + + // switch (tenant) + // { + // case Clienti.Sicilia: + // _cli = _Sicilia_clienti.Clienti; + // break; + // case Clienti.Discovery: + // _cli = _Disco_clienti.Clienti; + // break; + // case Clienti.Ferrari: + // _cli = _Ferra_clienti.Clienti; + // break; + // case Clienti.Marrocco: + // _cli = _Marro_clienti.Clienti; + // break; + // case Clienti.Sarom: + // _cli = _Sarom_clienti.Clienti; + // break; + // case Clienti.Gitoga: + // _cli = _Gitoga_clienti.Clienti; + // break; + // case Clienti.Lifta: + // _cli = _Lifta_clienti.Clienti; + // break; + // case Clienti.Siet: + // _cli = _Siet_clienti.Clienti; + // break; + // case Clienti.PMS: + // _cli = _PMS_clienti.Clienti; + // break; + // case Clienti.LW: + // _cli = _LW_clienti.Clienti; + // break; + // case Clienti.Tedesco: + // _cli = _Tedes_clienti.Clienti; + // break; + // case Clienti.Syscom: + // _cli = _Sys_clienti.Clienti; + // break; + // default: + // _cli = null; + // break; + // } + // return _cli; + //} + + //private DbSet getCausaliRappByTenant(string tenant) + //{ + // DbSet? _cau; + + // switch (tenant) + // { + // case Clienti.Sicilia: + // _cau = _Sicilia_caus_rapp.Causali; + // break; + // case Clienti.Discovery: + // _cau = _Disco_caus_rapp.Causali; + // break; + // case Clienti.Ferrari: + // _cau = _Ferra_caus_rapp.Causali; + // break; + // case Clienti.Marrocco: + // _cau = _Marro_caus_rapp.Causali; + // break; + // case Clienti.Sarom: + // _cau = _Sarom_caus_rapp.Causali; + // break; + // case Clienti.Gitoga: + // _cau = _Gitoga_caus_rapp.Causali; + // break; + // case Clienti.Lifta: + // _cau = _Lifta_caus_rapp.Causali; + // break; + // case Clienti.Siet: + // _cau = _Siet_caus_rapp.Causali; + // break; + // case Clienti.PMS: + // _cau = _PMS_caus_rapp.Causali; + // break; + // case Clienti.LW: + // _cau = _LW_caus_rapp.Causali; + // break; + // case Clienti.Tedesco: + // _cau = _Tedes_caus_rapp.Causali; + // break; + // case Clienti.Syscom: + // _cau = _Sys_caus_rapp.Causali; + // break; + // default: + // _cau = null; + // break; + // } + // return _cau; + //} + + private DbSet getVTCodiciSegnalaz(string tenant) + { + DbSet? _codSeg; + + if (tenant.Equals(Clienti.VT)) + { + _codSeg = _VT_CodSegn.CodSegn; + + return _codSeg; + } + return _codSeg = null; + } + + //private DbSet getPagamentiByTenant(string tenant) + //{ + // DbSet? _pag; + + // switch (tenant) + // { + // case Clienti.Sicilia: + // _pag = _Sicilia_pagam.Pagamenti; + // break; + // case Clienti.Discovery: + // _pag = _Disco_pagam.Pagamenti; + // break; + // case Clienti.Ferrari: + // _pag = _Ferra_pagam.Pagamenti; + // break; + // case Clienti.Marrocco: + // _pag = _Marro_pagam.Pagamenti; + // break; + // case Clienti.Sarom: + // _pag = _Sarom_pagam.Pagamenti; + // break; + // case Clienti.Gitoga: + // _pag = _Gitoga_pagam.Pagamenti; + // break; + // case Clienti.Lifta: + // _pag = _Lifta_pagam.Pagamenti; + // break; + // case Clienti.Siet: + // _pag = _Siet_pagam.Pagamenti; + // break; + // case Clienti.PMS: + // _pag = _PMS_pagam.Pagamenti; + // break; + // case Clienti.LW: + // _pag = _LW_pagam.Pagamenti; + // break; + // case Clienti.Tedesco: + // _pag = _Tedes_pagam.Pagamenti; + // break; + // case Clienti.Syscom: + // _pag = _Sys_pagam.Pagamenti; + // break; + // default: + // _pag = null; + // break; + // } + // return _pag; + //} + + //private DbSet getSaldiartByTenant(string tenant) + //{ + // DbSet? _sa; + + // switch (tenant) + // { + // case Clienti.Sicilia: + // _sa = _Sicilia_saldi.Saldi; + // break; + // case Clienti.Discovery: + // _sa = _Disco_saldi.Saldi; + // break; + // case Clienti.Siet : + // _sa = _Siet_saldi.Saldi; + // break; + // case Clienti.PMS: + // _sa = _PMS_saldi.Saldi; + // break; + // case Clienti.LW: + // _sa = _LW_saldi.Saldi; + // break; + // case Clienti.Tedesco: + // _sa = _Tedes_saldi.Saldi; + // break; + // case Clienti.Syscom: + // _sa = _Sys_saldi.Saldi; + // break; + // default: + // _sa = null; + // break; + // } + // return _sa; + //} + + //private DbSet getComponentiByTenant(string tenant) + //{ + // DbSet? _compon; + + // switch (tenant) + // { + // case Clienti.Sicilia: + // _compon = _Sicilia_comp.Componen; + // break; + // case Clienti.Discovery: + // _compon = _Disco_comp.Componen; + // break; + // case Clienti.Siet: + // _compon = _Siet_comp.Componen; + // break; + // case Clienti.PMS: + // _compon = _PMS_comp.Componen; + // break; + // case Clienti.LW: + // _compon = _LW_comp.Componen; + // break; + // case Clienti.Tedesco: + // _compon = _Tedes_comp.Componen; + // break; + // case Clienti.Syscom: + // _compon = _Sys_comp.Componen; + // break; + // default: + // _compon = null; + // break; + // } + // return _compon; + //} + + //private DbSet getComponentiTableByTenant(string tenant) + //{ + // DbSet? _compon; + + // switch (tenant) + // { + // case Clienti.Sicilia: + // _compon = _Sicilia_compTable.Componen; + // break; + // case Clienti.Discovery: + // _compon = _Disco_compTable.Componen; + // break; + // case Clienti.Siet: + // _compon = _Siet_compTable.Componen; + // break; + // case Clienti.PMS: + // _compon = _PMS_compTable.Componen; + // break; + // case Clienti.LW: + // _compon = _LW_compTable.Componen; + // break; + // case Clienti.Tedesco: + // _compon = _Tedes_compTable.Componen; + // break; + // case Clienti.Syscom: + // _compon = _Sys_compTable.Componen; + // break; + // default: + // _compon = null; + // break; + // } + // return _compon; + //} + + //private DbSet getMagazziniByTenant(string tenant) + //{ + // DbSet? _maga; + + // switch (tenant) + // { + // case Clienti.Sicilia: + // _maga = _Sicilia_magazzini.Magaz; + // break; + // case Clienti.Discovery: + // _maga = _Disco_magazzini.Magaz; + // break; + // case Clienti.Siet: + // _maga = _Siet_magazzini.Magaz; + // break; + // case Clienti.PMS: + // _maga = _PMS_magazzini.Magaz; + // break; + // case Clienti.LW: + // _maga = _LW_magazzini.Magaz; + // break; + // case Clienti.Tedesco: + // _maga = _Tedes_magazzini.Magaz; + // break; + // case Clienti.Syscom: + // _maga = _Sys_magazzini.Magaz; + // break; + // default: + // _maga = null; + // break; + // } + // return _maga; + //} + + //private DbSet getMag_NewByTenant(string tenant) + //{ + // DbSet? _ma; + + // switch (tenant) + // { + // case Clienti.Sicilia: + // _ma = _Sicilia_mag.Mag; + // break; + // case Clienti.Discovery: + // _ma = _Disco_mag.Mag; + // break; + // case Clienti.Siet: + // _ma = _Siet_mag.Mag; + // break; + // case Clienti.PMS: + // _ma = _PMS_mag.Mag; + // break; + // case Clienti.LW: + // _ma = _LW_mag.Mag; + // break; + // case Clienti.Tedesco: + // _ma = _Tedes_mag.Mag; + // break; + // case Clienti.Syscom: + // _ma = _Sys_mag.Mag; + // break; + // default: + // _ma = null; + // break; + // } + // return _ma; + //} + //private DbSet getImpiantiByTenant(string tenant) + //{ + // DbSet? _imp; + + // switch (tenant) + // { + // case Clienti.Sicilia: + // _imp = _Sicilia_impianti.Impia; + // break; + // case Clienti.Discovery: + // _imp = _Disco_impianti.Impia; + // break; + // case Clienti.Marrocco: + // _imp = _Marro_impianti.Impia; + // break; + // case Clienti.Ferrari: + // _imp = null; + // break; + // case Clienti.Sarom: + // _imp = null; + // break; + // case Clienti.Gitoga: + // _imp = _Gitoga_impianti.Impia; + // break; + // case Clienti.Lifta: + // _imp = _Lifta_impianti.Impia; + // break; + // case Clienti.Siet: + // _imp = _Siet_impianti.Impia; + // break; + // case Clienti.PMS: + // _imp = _PMS_impianti.Impia; + // break; + // case Clienti.LW: + // _imp = _LW_impianti.Impia; + // break; + // case Clienti.Tedesco: + // _imp = _Tedes_impianti.Impia; + // break; + // case Clienti.Syscom: + // _imp = _Sys_impianti.Impia; + // break; + // default: + // _imp = null; + // break; + // } + // return _imp; + //} + + //private DbSet getCommesseByTenant(string tenant) + //{ + // DbSet? _commesse; + + // switch (tenant) + // { + // case Clienti.Sicilia: + // _commesse = _Sicilia_comm.Commesse; + // break; + // case Clienti.Discovery: + // _commesse = null; + // break; + // case Clienti.Ferrari: + // _commesse = _Ferra_comm.Commesse; + // break; + // case Clienti.Sinergo: + // _commesse = _Sinergo_comm.Commesse; + // break; + // case Clienti.Marrocco: + // _commesse = _Marro_comm.Commesse; + // break; + // case Clienti.Gitoga: + // _commesse = _Gitoga_comm.Commesse; + // break; + // case Clienti.Lifta: + // _commesse = _Lifta_comm.Commesse; + // break; + // case Clienti.Siet: + // _commesse = _Siet_comm.Commesse; + // break; + // case Clienti.PMS: + // _commesse = _PMS_comm.Commesse; + // break; + // case Clienti.LW: + // _commesse = _LW_comm.Commesse; + // break; + // case Clienti.Tedesco: + // _commesse = _Tedes_comm.Commesse; + // break; + // case Clienti.Syscom: + // _commesse = _Sys_comm.Commesse; + // break; + // default: + // _commesse = null; + // break; + // } + // return _commesse; + //} + private DbSet getTimbratureByTenant(string tenant) + { + DbSet? _timbrature; + _timbrature = _VT_timbr.Timbr; + + return _timbrature; + } + + //private DbSet getStoricoImpiantoByTenant(string tenant) + //{ + // DbSet? _sto; + + // switch (tenant) + // { + // case Clienti.Sicilia: + // _sto = _Sicilia_sto_imp.StoImp; + // break; + // case Clienti.Siet: + // _sto = _Siet_sto_imp.StoImp; + // break; + // case Clienti.PMS : + // _sto = _PMS_sto_imp.StoImp; + // break; + // case Clienti.LW: + // _sto = _LW_sto_imp.StoImp; + // break; + // case Clienti.Tedesco: + // _sto = _Tedes_sto_imp.StoImp; + // break; + // case Clienti.Syscom: + // _sto = _Sys_sto_imp.StoImp; + // break; + // default: + // _sto = null; + // break; + // } + // return _sto; + //} + + //private DbSet getAziendeRifByTenant(string tenant) + //{ + // DbSet? _azi; + + // switch (tenant) + // { + // case Clienti.Discovery: + // _azi = _Disco_azi_coll.Azi; + // break; + // case Clienti.Siet: + // _azi = _Siet_azi_coll.Azi; + // break; + // case Clienti.PMS: + // _azi = _PMS_azi_coll.Azi; + // break; + // case Clienti.LW: + // _azi = _LW_azi_coll.Azi; + // break; + // case Clienti.Tedesco: + // _azi = _Tedes_azi_coll.Azi; + // break; + // default: + // _azi = null; + // break; + // } + // return _azi; + //} + + //private DbSet getSostituzioneByTenant(string tenant) + //{ + // DbSet? _sost; + + // switch (tenant) + // { + // case Clienti.Marrocco: + // _sost = _Marro_sostituzioni.Sost; + // break; + // case Clienti.Gitoga: + // _sost = _Gitoga_sostituzioni.Sost; + // break; + // case Clienti.Lifta: + // _sost = _Lifta_sostituzioni.Sost; + // break; + // case Clienti.Discovery: + // _sost = _Disco_sostituzioni.Sost; + // break; + // case Clienti.Siet: + // _sost = _Siet_sostituzioni.Sost; + // break; + // case Clienti.Sicilia: + // _sost = _Sicilia_sostituzioni.Sost; + // break; + // case Clienti.PMS: + // _sost = _PMS_sostituzioni.Sost; + // break; + // case Clienti.LW: + // _sost = _LW_sostituzioni.Sost; + // break; + // case Clienti.Tedesco: + // _sost = _Tedes_sostituzioni.Sost; + // break; + // case Clienti.Syscom: + // _sost = _Sys_sostituzioni.Sost; + // break; + // default: + // _sost = null; + // break; + // } + // return _sost; + //} + private DbSet getChiamateTableByTenant(string tenant) + { + DbSet? _chia; + _chia = _VT_chiatable.Chi; + return _chia; + } + //private DbSet getChiamateTableTaskManagerByTenant(string tenant) + //{ + // DbSet? _chia; + + // switch (tenant) + // { + // case Clienti.LW: + // _chia = _LW_chiatable.Chi; + // break; + // case Clienti.Syscom: + // _chia = _Sys_chiatable.Chi; + // break; + // default: + // _chia = null; + // break; + // } + // return _chia; + //} + + //private DbSet getChiamateSerialeByTenant(string tenant) + //{ + // DbSet? _chiaser; + + // switch (tenant) + // { + // case Clienti.Marrocco: + // _chiaser = _Marro_chiaser.Seriali; + // break; + // case Clienti.Gitoga: + // _chiaser = _Gitoga_chiaser.Seriali; + // break; + // case Clienti.Lifta: + // _chiaser = _Lifta_chiaser.Seriali; + // break; + // case Clienti.Siet: + // _chiaser = _Siet_chiaser.Seriali; + // break; + // case Clienti.Sicilia: + // _chiaser = _Sicilia_chiaser.Seriali; + // break; + // case Clienti.PMS: + // _chiaser = _PMS_chiaser.Seriali; + // break; + + // default: + // _chiaser = null; + // break; + // } + // return _chiaser; + //} + + //private DbSet getChiamateProgressiviByTenant(string tenant) + //{ + // //gestione per cvpwarn con campo float + // DbSet? _chiaprog; + + // switch (tenant) + // { + // case Clienti.Marrocco: + // case Clienti.Gitoga: + // case Clienti.Lifta: + // _chiaprog = _Marro_chiaprog.Progressivi; + // break; + // case Clienti.Sicilia: + // _chiaprog = _Sicilia_chiaprog.Progressivi; + // break; + // case Clienti.Siet: + // _chiaprog = _Siet_chiaprog.Progressivi; + // break; + // default: + // _chiaprog = null; + // break; + // } + // return _chiaprog; + //} + + //private DbSet getCpwarnByTenant(string tenant) + //{ + // //gestione per cvpwarn con campo float + // DbSet? _cpwarn; + + // switch (tenant) + // { + + // case Clienti.Sicilia: + // _cpwarn = _Sicilia_cpwarn.Progressivi; + // break; + // case Clienti.Siet: + // _cpwarn = _Siet_cpwarn.Progressivi; + // break; + // case Clienti.PMS: + // _cpwarn = _PMS_cpwarn.Progressivi; + // break; + // case Clienti.LW: + // _cpwarn = _LW_cpwarn.Progressivi; + // break; + // case Clienti.Tedesco: + // _cpwarn = _Tedes_cpwarn.Progressivi; + // break; + // case Clienti.Syscom: + // _cpwarn = _Sys_cpwarn.Progressivi; + // break; + // default: + // _cpwarn = null; + // break; + // } + // return _cpwarn; + //} + + //private bool checkSostituzioneAbilitata(string tenant) + //{ + // bool abilitata; + // switch (tenant) + // { + // case Clienti.Marrocco: + // abilitata =true; + // break; + // case Clienti.Gitoga: + // abilitata = true; + // break; + // case Clienti.Lifta: + // abilitata = true; + // break; + // case Clienti.Discovery: + // abilitata = true; + // break; + // case Clienti.Siet: + // abilitata = true; + // break; + // case Clienti.Sicilia: + // abilitata = true; + // break; + // case Clienti.LW: + // abilitata = true; + // break; + // case Clienti.Tedesco: + // abilitata = true; + // break; + // case Clienti.Syscom: + // abilitata = true; + // break; + // default: + // abilitata = false; + // break; + // } + // return abilitata; + //} + + private async Task getSeriale(string token) + { + string seriale = string.Empty; + string ten = getClaimValueByToken(token, "tenant"); + string ten2 = getClaimValueByToken(token, "tenant2"); + string tenConf = getClaimValueByToken(token, "tenantConfigurazioni"); + if (string.IsNullOrEmpty(ten)) + { + ten = tenConf; + } + _rapp_new = _VT_rapptable.Rapps; + + //switch (ten) + //{ + // case Clienti.VT: + // //ten = ten2; + // break; + // default: + // _rapp_new = getRappNewByTenant(ten); + // break; + //} + + string suff_rapp = string.Empty; + string primo_seriale = string.Empty; + //D000000004 + + var rapp = await Task.WhenAll(_rapp_new.Where(t => t.seriale_rapportino != null + && t.seriale_rapportino.Contains(suff_rapp)).OrderByDescending(t => t.seriale_rapportino).Take(1).ToListAsync()); + + string? ser=string.Empty; + if (rapp.Any()) + { + foreach(var i in rapp) + { + if(i.Count()>0) + { + ser = i.First().seriale_rapportino; + seriale = getNewSerialeRapportino(ser, ten); + } + else + { + seriale = primo_seriale; + } + } + } + return seriale; + } + + private async Task getNewId(string token) + { + int newId =1; + string ten = getClaimValueByToken(token, "tenant"); + _timbr = getTimbratureByTenant(ten); + var t = await Task.WhenAll(_timbr.OrderByDescending(t => t.id).Take(1).ToListAsync()); + + if (t.Any() && t.First().Count()>0) + { + foreach (var i in t) + { + newId = i.First().id; + } + newId++; + } + return newId; + } + private string getNewSerialeRapportino(string? lastSerial, string tenant) + { + string new_serial = string.Empty; + + //lastSerial = lastSerial.Substring(1, lastSerial.Length-1); + lastSerial = lastSerial!=null? lastSerial.Substring(1, lastSerial.Length - 1):String.Empty; + + int ser = int.Parse(lastSerial); + ser++; + new_serial = ser.ToString(); + new_serial = new_serial.PadLeft(9, '0'); + new_serial = suffClienti.VT + new_serial; + + return new_serial; + } + + private string getNewSerialeBuono(string lastSerial, string suff) + { + //CAM00118 CA=chiamata M=Marrocco 00118=seriale + //MAM00254 MA=manutenzione M=Marrocco 00254=seriale + //lunghezza 8 fissa + string new_serial = string.Empty; + + string parteNum = lastSerial.Substring(3, 5); + int ser = int.Parse(parteNum); + ser++; + new_serial = ser.ToString(); + new_serial = new_serial.PadLeft(5, '0'); + new_serial = suff + new_serial; + + return new_serial; + } + + private string getNewSerialeBuonoMan(string lastSerial, string suff) + { + //CAM00118 CA=chiamata M=Marrocco 00118=seriale + //MAM00254 MA=manutenzione M=Marrocco 00254=seriale + //lunghezza 8 fissa + string new_serial = string.Empty; + + string parteNum = lastSerial.Substring(3, 5); + int ser = int.Parse(parteNum); + ser++; + new_serial = ser.ToString(); + new_serial = new_serial.PadLeft(5, '0'); + new_serial = suff + new_serial; + + return new_serial; + } + + private async Task getChiamataBySerial(string ser_chiamata, string token) + { + string new_serial = string.Empty; + string ten = string.Empty; + ten = getClaimValueByToken(token, "tenant"); + string tenConf = getClaimValueByToken(token, "tenantConfigurazioni"); + if (string.IsNullOrEmpty(ten)) + { + ten = tenConf; + } + + if (ten.Equals(Clienti.VT)) + { + ten = getClaimValueByToken(token, "tenant2"); + _chiamate= _VT_chia.Chiamate; + } + else + { + _chiamate = getChiamateByTenant(ten); + } + + var calltec = await _chiamate.Where( + t => t.chserial == ser_chiamata + && t.chcodazi == ten + ).OrderBy(t => t.chdtapp).ToListAsync(); + + return calltec.First(); + } + + private async Task getManutenzioneByChiave(Input i, string token ) + { + string ten = getClaimValueByToken(token, "tenant"); + string tecnico= getClaimValueByToken(token, "tccodice"); + + //_manutprog =getManutenzioniByTenant(ten); + var manutenz = await _manutprog.Where( + t => t.ctcodazi.Equals(ten) + && t.ctcodimp.Trim().Equals(i.pimpianto.Trim()) + && t.ctcodint.Trim().Equals(i.picodint.Trim()) + && t.ctdatpro==i.pidatman + //&& t.tccodice.Trim().Equals(tecnico.Trim() + //la devo ripescare solo per la chiave della tabella delle manutenzioni + ).ToListAsync(); + + Manprog risultato = manutenz.First(); + return risultato; + } + private async Task getManutenzioneByChiave2(Prese i, string token) + { + string ten = getClaimValueByToken(token, "tenant"); + string tecnico = getClaimValueByToken(token, "tccodice"); + + //_manutprog = getManutenzioniByTenant(ten); + var manutenz = await _manutprog.Where( + t => t.ctcodazi.Equals(ten) + && t.ctcodimp.Trim().Equals(i.pimpianto.Trim()) + && t.ctcodint.Trim().Equals(i.picodint.Trim()) + && t.ctdatpro == i.pidatman + //&& t.tccodice.Trim().Equals(tecnico.Trim() + //la devo ripescare solo per la chiave della tabella delle manutenzioni + ).ToListAsync(); + + Manprog risultato = manutenz.First(); + return risultato; + } + + private async Task getManutenzioneByChiaveOut(Input i, string token, Rapp_New ingresso) + { + string ten = getClaimValueByToken(token, "tenant"); + string tecnico = getClaimValueByToken(token, "tccodice"); + + //_manutprog = getManutenzioniByTenant(ten); + var manutenz = await _manutprog.Where( + t => t.ctcodazi.Equals(ten) + && t.ctcodimp.Trim().Equals(i.pimpianto.Trim()) + && t.ctcodint.Trim().Equals(i.picodint.Trim()) + && t.ctdatpro == i.pidatman + //&& t.tccodice.Trim().Equals(tecnico.Trim() + //la devo ripescare solo per la chiave della tabella delle manutenzioni + ).ToListAsync(); + + Manprog risultato = manutenz.First(); + risultato.ser_buono = ingresso.ser_buono; + risultato.seriale_rapportino = ingresso.seriale_rapportino; + + return risultato; + } + + /// vuoto=chiamata presa in carico 3=chiamata chiusa 2=manutenzione chiusa + public static class TipoRapportino + { + /// + public const string PresaInCarico = ""; + + /// + public const string ManutenzioneChiusa = "2"; + + /// + public const string ChiamataChiusa = "3"; + + /// + public const string ChiamataDaCommessa = "4"; + + /// + public const string ChiamataCapoTecnico = "5"; + } + private async Task checkChiamataPresa(string ten, string serChiamata,string tipo, string ten2) + { + //tipo rapportino ="" + int trovati = 0; + + _rapp_new = _VT_rapptable.Rapps; + ten = ten2; + + var rapp = await _rapp_new.Where(t => t.azienda_impianto == ten + && t.seriale_chiamata !=null && t.seriale_chiamata.Equals(serChiamata) + && t.tipo_rapportino !=null && t.tipo_rapportino.Equals(tipo) + && t.incarico!=null && t.incarico.Equals("S")).ToListAsync(); + if(rapp.Any()) + { + trovati = rapp.Count(); + } + + return trovati; + } + private async Task checkChiamataDaRilasciare(string ten, string serRapportino, string tipo,string ten2) + { + //tipo rapportino ="" + Rapp_New trovati = null; + + _rapp_new = _VT_rapptable.Rapps; + ten = ten2; + + //switch (ten) + //{ + // case Clienti.VT: + // break; + // default: + // _rapp_new = getRappNewByTenant(ten); + // break; + //} + + var rapp = await _rapp_new.Where(t => t.azienda_impianto == ten + && t.seriale_rapportino != null && t.seriale_rapportino.Equals(serRapportino) + && t.tipo_rapportino != null && t.tipo_rapportino.Equals(tipo) + && t.incarico != null && t.incarico.Equals("S")).ToListAsync(); + if (rapp.Any()) + { + trovati = rapp.First(); + } + + return trovati; + } + private async Task checkChiamataRifiutata(string ten, string serChiamata, string tipo,string ten2) + { + //tipo rapportino ="" + int trovati = 0; + + _rapp_new = _VT_rapptable.Rapps; + ten = ten2; + + //switch (ten) + //{ + // case Clienti.VT: + + // break; + // default: + // _rapp_new = getRappNewByTenant(ten); + // break; + //} + + var rapp = await _rapp_new.Where(t => t.azienda_impianto == ten + && t.seriale_chiamata != null && t.seriale_chiamata.Equals(serChiamata) + && t.tipo_rapportino != null && t.tipo_rapportino.Equals(tipo) + && t.incarico != null && t.rifiutata.Equals("S")).ToListAsync(); + if (rapp.Any()) + { + trovati = rapp.Count(); + } + + return trovati; + } + private async Task checkChiamataChiusa(string ten, string serChiamata, string tipo) + { + //tipo rapportino =3 o tipo rapportino=4 + int trovati = 0; + + _rapp_new = _VT_rapptable.Rapps; + + //if (ten.Equals(Clienti.VT)) + //{ + //} + //else + //{ + // _rapp_new = getRappNewByTenant(ten); + //} + + var rapp = await _rapp_new.Where(t => t.azienda_impianto == ten + && t.seriale_chiamata != null && t.seriale_chiamata.Equals(serChiamata) + && t.tipo_rapportino != null && (t.tipo_rapportino.Equals(TipoRapportino.ChiamataChiusa) || t.tipo_rapportino.Equals(TipoRapportino.ChiamataDaCommessa))).ToListAsync(); + + if (rapp.Any()) + { + trovati = rapp.Count(); + } + + return trovati; + } + private async Task checkTimbraturaPresente(string ten, Timbratura model) + { + int trovati = 0; + _timbr = getTimbratureByTenant(ten); + var ti = await _timbr.Where(t => t.azienda == ten && t.ora_ini== model.ora_ini && t.min_ini== model.min_ini && t.ora_fin==model.ora_fin && t.min_fin==model.min_fin + && t.commessa.Equals(model.commessa) && t.data_timbratura==model.data_timbratura && t.ore_viaggio==model.ore_viaggio + ).ToListAsync(); + if (ti.Any()) + { + trovati = ti.Count(); + } + + return trovati; + } + /// 200=Ok 500=ErroreInterno 400=OperazioneNonAmmessa + public static class StatiRisposta + { + /// + public const string Ok = "200"; + + /// + public const string ErroreInterno = "500"; + + /// + public const string OperazioneNonAmmessa = "400"; + } + private async Task checkManutenzionePresaInCarico(string ten, string impianto,string codint,DateTime? dataMan) + { + int trovati = 0; + //_prese=getPreseByTenant(ten); + var pre =await _prese.Where(t => t.picodazi.Equals(ten) && t.pimpianto.Equals(impianto) && t.picodint.Equals(codint) && t.pidatman== dataMan).ToListAsync(); + if (pre.Any()) + { + trovati = pre.Count(); + } + return trovati; + } + private async Task checkManutenzioneDaRilasciare(string ten, string impianto, string codint, DateTime? dataMan) + { + Prese p = null; + //_prese = getPreseByTenant(ten); + var pre = await _prese.Where(t => t.picodazi.Equals(ten) && t.pimpianto.Equals(impianto) && t.picodint.Equals(codint) && t.pidatman == dataMan).ToListAsync(); + if (pre.Any()) + { + p = pre.First(); + } + return p; + } + private async Task checkManutenzioneChiusa(string ten,string tipo,string codImp, DateTime? dataMan, string codInt) + { + int trovati = 0; + //_rapp_new = getRappNewByTenant(ten); + var rapp = await _rapp_new.Where( + t => t.azienda_impianto == ten + && t.tipo_rapportino != null && t.tipo_rapportino.Equals(tipo) + && t.seriale_chiamata !=null && string.IsNullOrEmpty(t.seriale_chiamata.Trim()) + && t.codice_impianto !=null && t.codice_impianto.Equals(codImp) + && t.data_validita== dataMan + && t.codice_intervento !=null && t.codice_intervento.Equals(codInt) + ).ToListAsync(); + + if (rapp.Any()) + { + trovati = rapp.Count(); + } + return trovati; + } + + /// + public static class Clienti + { + /// VT app + public const string VT = "VIRTU"; + } + /// + public static class suffClienti + { + /// Virtual task + public const string VT = "V"; + } + + /// trasforma un Saldiart in un Mag_New + private Mag_New saldiartToMag_New(Saldiart co, int riga,string newSerial, string tecnico) + { + Mag_New mn = new Mag_New(); + mn.seriale_rapportino = newSerial; + mn.riga = riga; + mn.magazzino = co.slcodmag; + mn.articolo = co.slcodice; + mn.tipo_movimento = "A"; + mn.quantita = co.slqtaper; + mn.prezzo = co.liprezzo; + mn.codice_tecnico = tecnico; + mn.codlotto = co.locodice; + mn.matricola = co.amcodice; + mn.desc_art = co.ardesart; + mn.cpccchk = getCpccchk(10); + mn.desc_sup = co.desc_sup; + return mn; + } + + /// trasforma un Saldiart in un Vt_Mag_New + private Vt_Mag_New SaldiArtToVtMag_New(Saldiart co, int riga, string newSerial, string tecnico, string azienda) + { + Vt_Mag_New vtmn = new Vt_Mag_New(); + vtmn.Azienda = azienda; + vtmn.Seriale_Rapportino = newSerial; + vtmn.Riga = riga; + vtmn.Magazzino = co.slcodmag; + vtmn.Articolo = co.slcodice; + vtmn.Tipo_Movimento = "A"; + vtmn.Quantita = co.slqtaper; + vtmn.Prezzo = co.liprezzo; + vtmn.Codice_Tecnico = tecnico; + vtmn.CodLotto = co.locodice; + vtmn.Matricola = co.amcodice; + vtmn.Desc_Art = co.ardesart; + vtmn.Cpccchk = getCpccchk(10); + vtmn.Desc_Sup = co.desc_sup; + return vtmn; + + } + + /// trasforma un Compi_Impia in un Mag_New + private Mag_New compo_ImpiaToMag_New(Compo_Impia co, int riga, string newSerial, string tecnico) + { + + Mag_New mn = new Mag_New(); + mn.seriale_rapportino = newSerial; + mn.riga = riga; + mn.magazzino = "001"; + mn.articolo = co.cocodart; + mn.tipo_movimento = "E"; + mn.quantita = co.coqtaart; + mn.prezzo = 0; + mn.codice_tecnico = tecnico; + mn.codlotto = co.lotto; + mn.matricola = co.matricola; + mn.cprownum = co.cprownum; + mn.codimp = co.cocodimp; + mn.desc_art = co.ardesart; + mn.cpccchk = getCpccchk(10); + mn.desc_sup = co.desc_sup; + + + string appoNote = string.Empty; + appoNote = (co.co__note != null && co.co__note.Length>254) ? co.co__note.Substring(0, 254) : co.co__note; + mn.note = appoNote; + return mn; + } + + /// trasforma un Compi_Impia in un Vt_Mag_New + private Vt_Mag_New compo_ImpiaToVt_Mag_New(Compo_Impia co, int riga, string newSerial, string tecnico, string azienda) + { + + Vt_Mag_New vtmn = new Vt_Mag_New(); + vtmn.Azienda = azienda; + vtmn.Seriale_Rapportino = newSerial; + vtmn.Riga = riga; + vtmn.Matricola = "001"; + vtmn.Articolo = co.cocodart; + vtmn.Tipo_Movimento = "E"; + vtmn.Quantita = co.coqtaart; + vtmn.Prezzo = 0; + vtmn.Codice_Tecnico = tecnico; + vtmn.CodLotto = co.lotto; + vtmn.Matricola = co.matricola; + vtmn.Cprownum = co.cprownum; + vtmn.CodImp = co.cocodimp; + vtmn.Desc_Art = co.ardesart; + vtmn.Cpccchk = getCpccchk(10); + vtmn.Desc_Sup = co.desc_sup; + + + string appoNote = string.Empty; + appoNote = (co.co__note != null && co.co__note.Length>254) ? co.co__note.Substring(0, 254) : co.co__note; + vtmn.Note = appoNote; + return vtmn; + } + + private static Random random = new Random(); + /// crea un cpccchk + public static string getCpccchk(int length) + { + const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + return new string(Enumerable.Repeat(chars, length).Select(s => s[random.Next(s.Length)]).ToArray()); + } + + /// formatta l'indirizzo della lista chiamate + public static string formattaItemChiamateMarrocco(Chiamate i) + { + string formatst = string.Empty; + StringBuilder sb = new StringBuilder(); + sb.Append(!string.IsNullOrEmpty(i.imindiri1) ? i.imindiri1.Trim() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imindiri2) ? i.imindiri2.Trim() + " " : string.Empty); + sb.Append(i.imindiri3 != null ? i.imindiri3.ToString() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imindiri4) ? i.imindiri4.Trim() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imindiri5) ? i.imindiri5.Trim() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imcodcap) ? " " + i.imcodcap.Trim() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imlocali) ? " " + i.imlocali.Trim() + " " : string.Empty); + + if (!string.IsNullOrEmpty(i.chcodimp)) + { + sb.Append("
"); + sb.Append("Impianto : " + i.chcodimp.Trim()); + } + + if (!string.IsNullOrEmpty(i.imrefref)) + { + sb.Append("
"); + sb.Append("Ref. : " + i.imrefref.Trim()); + } + formatst = sb.ToString(); + + return formatst; + } + + /// formatta l'indirizzo stampa chiamate + public static string formattaIndirizzoStampaMarrocco(Chiamate i) + { + string formatst = string.Empty; + StringBuilder sb = new StringBuilder(); + + sb.Append("SPETT. AMM. COND. : "); + sb.Append(!string.IsNullOrEmpty(i.imindiri1) ? i.imindiri1.Trim() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imindiri2) ? i.imindiri2.Trim() + " " : string.Empty); + sb.Append(i.imindiri3 != null ? i.imindiri3.ToString() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imindiri4) ? i.imindiri4.Trim() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imindiri5) ? i.imindiri5.Trim() + " " : string.Empty); + if (!string.IsNullOrEmpty(i.imrefref)) + { + sb.Append("
"); + sb.Append("Numero Ref. : " + i.imrefref.Trim()); + } + formatst = sb.ToString(); + + return formatst; + } + + /// formatta l'indirizzo stampa chiamateper Discovery + public static string formattaIndirizzoStampaDiscovery(Chiamate i) + { + string formatst = string.Empty; + StringBuilder sb = new StringBuilder(); + + sb.Append("SPETT. AMM. COND. : "); + sb.Append(!string.IsNullOrEmpty(i.imindiri1) ? i.imindiri1.Trim() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imindiri2) ? i.imindiri2.Trim() + " " : string.Empty); + sb.Append(i.imindiri3 != null ? i.imindiri3.ToString() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imindiri4) ? i.imindiri4.Trim() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imindiri5) ? i.imindiri5.Trim() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imlocali) ? i.imlocali.Trim() + " " : string.Empty); + + formatst = sb.ToString(); + + return formatst; + } + + /// formatta l'indirizzo della lista chiamate TEDESCO + public static string formattaItemChiamateTedesco(Chiamate i) + { + string formatst = string.Empty; + StringBuilder sb = new StringBuilder(); + + if (!string.IsNullOrEmpty(i.imdescri)) + { + sb.Append("N.pratica : " + i.imdescri.Trim()); + sb.Append("
"); + } + sb.Append(!string.IsNullOrEmpty(i.imindiri1) ? i.imindiri1.Trim() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imindiri2) ? i.imindiri2.Trim() + " " : string.Empty); + sb.Append(i.imindiri3 != null ? i.imindiri3.ToString() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imindiri4) ? i.imindiri4.Trim() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imindiri5) ? i.imindiri5.Trim() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imcodcap) ? " " + i.imcodcap.Trim() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imlocali) ? " " + i.imlocali.Trim() + " " : string.Empty); + + if (!string.IsNullOrEmpty(i.chcodimp)) + { + sb.Append("
"); + sb.Append("Impianto : " + i.chcodimp.Trim()); + } + + formatst = sb.ToString(); + + return formatst; + } + + /// formatta l'indirizzo della lista chiamate Virtual task + public static string formattaItemChiamateVT(Chiamate i) + { + string formatst = string.Empty; + StringBuilder sb = new StringBuilder(); + + if (!string.IsNullOrEmpty(i.andescri)) + { + sb.Append("Cliente : " + i.andescri.Trim()); + sb.Append("
"); + } + if (!string.IsNullOrEmpty(i.chcodimp)) + { + sb.Append("Impianto : " + i.chcodimp.Trim()); + sb.Append("
"); + } + if(!string.IsNullOrEmpty(i.imindiri2)) + { + sb.Append(!string.IsNullOrEmpty(i.imindiri1) ? i.imindiri1.Trim() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imindiri2) ? i.imindiri2.Trim() + " " : string.Empty); + sb.Append(i.imindiri3 != null ? i.imindiri3.ToString() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imindiri4) ? i.imindiri4.Trim() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imindiri5) ? i.imindiri5.Trim() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imcodcap) ? " " + i.imcodcap.Trim() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imlocali) ? " " + i.imlocali.Trim() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.improvin) ? " " + i.improvin.Trim() + " " : string.Empty); + sb.Append("
"); + } + if (!string.IsNullOrEmpty(i.chrifer)) + { + sb.Append("Rif. : " + i.chrifer.Trim()); + sb.Append("
"); + } + if (!string.IsNullOrEmpty(i.chtelef)) + { + sb.Append("Tel. : " + i.chtelef.Trim()); + sb.Append("
"); + } + if (!string.IsNullOrEmpty(i.chcodseg)) + { + sb.Append("Cod.Segn. : " + i.chcodseg.Trim()); + sb.Append("
"); + } + + + + formatst = sb.ToString(); + + return formatst; + } + + + /// formatta il riferimento impainto (html) + public static string formattaRiferimentoImpiantoMarrocco(Chiamate i) + { + string formatst = string.Empty; + StringBuilder sb = new StringBuilder(); + + sb.Append("N. Impianto : " + i.chcodimp.Trim()); + + if (!string.IsNullOrEmpty(i.imubicaz)) + { + sb.Append("
"); + sb.Append("Ubicazione : " + i.imubicaz.Trim()); + } + if (!string.IsNullOrEmpty(i.chcodimp)) + { + sb.Append("
"); + sb.Append("Matricola impianto : "); + sb.Append(!string.IsNullOrEmpty(i.immatric) ? i.immatric.Trim() + " " : string.Empty); + } + + formatst = sb.ToString(); + + return formatst; + } + + /// formatta il riferimento impianto Disco (html) + public static string formattaRiferimentoImpiantoDiscovery(Chiamate i) + { + string formatst = string.Empty; + StringBuilder sb = new StringBuilder(); + + sb.Append("N. Impianto : " + i.chcodimp.Trim()); + + if (!string.IsNullOrEmpty(i.imubicaz)) + { + sb.Append("
"); + sb.Append("Ubicazione : " + i.imubicaz.Trim()); + } + if (!string.IsNullOrEmpty(i.chcodimp)) + { + sb.Append("
"); + sb.Append("Matricola impianto : "); + sb.Append(!string.IsNullOrEmpty(i.immatric) ? i.immatric.Trim() + " " : string.Empty); + } + + formatst = sb.ToString(); + + return formatst; + } + + + /// formatta il riferimento impianto Ferrari (html) + public static string formattaRiferimentoImpiantoFerrari(Chiamate i) + { + string formatst = string.Empty; + StringBuilder sb = new StringBuilder(); + + sb.Append("N. Impianto : " + i.chcodimp.Trim()); + + if (!string.IsNullOrEmpty(i.imubicaz)) + { + sb.Append("
"); + sb.Append("Ubicazione : " + i.imubicaz.Trim()); + } + if (!string.IsNullOrEmpty(i.chcodimp)) + { + sb.Append("
"); + sb.Append("Matricola impianto : "); + sb.Append(!string.IsNullOrEmpty(i.immatric) ? i.immatric.Trim() + " " : string.Empty); + } + + formatst = sb.ToString(); + + return formatst; + } + + + /// formatta l'indirizzo stampa manutenzioni + public static string formattaIndirizzoStampaManutMarrocco(Manprog i) + { + string formatst = string.Empty; + StringBuilder sb = new StringBuilder(); + + sb.Append("SPETT. AMM. COND. :"); + sb.Append(!string.IsNullOrEmpty(i.imindiri1) ? i.imindiri1.Trim() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imindiri2) ? i.imindiri2.Trim() + " " : string.Empty); + sb.Append(i.imindiri3 != null ? i.imindiri3.ToString() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imindiri4) ? i.imindiri4.Trim() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imindiri5) ? i.imindiri5.Trim() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imlocali) ? i.imlocali.Trim() + " " : string.Empty); + + if (!string.IsNullOrEmpty(i.imrefref)) + { + sb.Append("
"); + sb.Append("Numero Ref. : " + i.imrefref.Trim()); + } + formatst = sb.ToString(); + + return formatst; + } + + /// formatta il riferimento impainto (html) + public static string formattaIndirizzoStampaManutDiscovery(Manprog i) + { + string formatst = string.Empty; + StringBuilder sb = new StringBuilder(); + + sb.Append("SPETT. AMM. COND. :"); + sb.Append(!string.IsNullOrEmpty(i.imindiri1) ? i.imindiri1.Trim() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imindiri2) ? i.imindiri2.Trim() + " " : string.Empty); + sb.Append(i.imindiri3 != null ? i.imindiri3.ToString() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imindiri4) ? i.imindiri4.Trim() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imindiri5) ? i.imindiri5.Trim() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imlocali) ? i.imlocali.Trim() + " " : string.Empty); + + if (!string.IsNullOrEmpty(i.imrefref)) + { + sb.Append("
"); + sb.Append("Numero Ref. : " + i.imrefref.Trim()); + } + + + formatst = sb.ToString(); + + return formatst; + } + + /// formatta l'indirizzo della lista manutenzioni + public static string formattaItemManutenzioniMarrocco(Manprog i) + { + string formatst = string.Empty; + StringBuilder sb = new StringBuilder(); + sb.Append(!string.IsNullOrEmpty(i.imindiri1) ? i.imindiri1.Trim() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imindiri2) ? i.imindiri2.Trim() + " " : string.Empty); + sb.Append(i.imindiri3 != null ? i.imindiri3.ToString() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imindiri4) ? i.imindiri4.Trim() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imindiri5) ? i.imindiri5.Trim() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imcodcap) ? " " + i.imcodcap.Trim() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imlocali) ? " " + i.imlocali.Trim() + " " : string.Empty); + + if (!string.IsNullOrEmpty(i.ctcodimp)) + { + sb.Append("
"); + sb.Append("Impianto : " + i.ctcodimp.Trim()); + } + + if (!string.IsNullOrEmpty(i.imrefref)) + { + sb.Append("
"); + sb.Append("Ref. : " + i.imrefref.Trim()); + } + formatst = sb.ToString(); + + return formatst; + } + + /// formatta riferimwnto impianto su buono (html) + public static string formattaRifImpMarrocco(Manprog i) + { + string formatst = string.Empty; + StringBuilder sb = new StringBuilder(); + + + if (!string.IsNullOrEmpty(i.ctcodimp)) + { + sb.Append("Matricola impianto : " + i.ctcodimp.Trim()); + if(!string.IsNullOrEmpty(i.immatric)) + { + sb.Append( " - " + i.immatric.Trim()); + } + } + if (!string.IsNullOrEmpty(i.imubicaz)) + { + sb.Append("
"); + sb.Append("Ubicazione : " + i.imubicaz.Trim()); + } + formatst = sb.ToString(); + + return formatst; + } + + /// formatta riferimwnto impianto su buono (html) Disco + public static string formattaRifImpDiscovery(Manprog i) + { + string formatst = string.Empty; + StringBuilder sb = new StringBuilder(); + + if (!string.IsNullOrEmpty(i.ctcodimp)) + { + sb.Append("N. Impianto : " + i.ctcodimp.Trim()); + } + if (!string.IsNullOrEmpty(i.imubicaz)) + { + sb.Append("
"); + sb.Append("Ubicazione : " + i.imubicaz.Trim()); + } + if (!string.IsNullOrEmpty(i.immatric)) + { + sb.Append("
"); + sb.AppendLine("Matricola : " + i.immatric.Trim()); + } + formatst = sb.ToString(); + + return formatst; + } + + #endregion + + #region Configurazioni + private Configurazione_out fillConfigurazione(Configurazioni co) + { + Configurazione_out output = new Configurazione_out(); + + output.azienda = co.azienda; + output.path_buoni = co.path_buoni; + output.prefisso_buoni_chia = co.prefisso_buoni_chia; + output.prefisso_buoni_man = co.prefisso_buoni_man; + output.ftp_url = co.ftp_url; + output.ftp_usr = co.ftp_usr; + output.ftp_pwd = co.ftp_pwd; + output.ftp_port = co.ftp_port; + output.listino = co.listino; + + output.abilita_barcode = co.abilita_barcode; + output.abilita_naviga = co.abilita_naviga; + output.abilita_telefona = co.abilita_telefona; + output.abilita_chiamate = co.abilita_chiamate; + + output.abilita_manutenzioni = co.abilita_manutenzioni; + output.chiamate_accetta = co.chiamate_accetta; + output.chiamate_accetta_barcode = co.chiamate_accetta_barcode; + output.chiamate_accetta_offline = co.chiamate_accetta_offline; + output.chiamate_rifiuta = co.chiamate_rifiuta; + output.chiamate_rifiuta_barcode = co.chiamate_rifiuta_barcode; + output.chiamate_rifiuta_offline = co.chiamate_rifiuta_offline; + output.chiamate_chiudi_barcode = co.chiamate_chiudi_barcode; + output.chiamate_firma_barcode = co.chiamate_firma_barcode; + output.chiamate_chiudi_salva_barcode = co.chiamate_chiudi_salva_barcode; + output.chiamate_chiudi_salva_offline = co.chiamate_chiudi_salva_offline; + + output.manutenzioni_accetta = co.manutenzioni_accetta; + output.manutenzioni_rifiuta = co.manutenzioni_rifiuta; + output.manutenzioni_accetta_barcode = co.manutenzioni_accetta_barcode; + output.manutenzioni_accetta_offline = co.manutenzioni_accetta_offline; + output.manutenzioni_chiudi_barcode = co.manutenzioni_chiudi_barcode; + output.manutenzioni_firma_barcode = co.manutenzioni_firma_barcode; + output.manutenzioni_chiudi_salva_barcode = co.manutenzioni_chiudi_salva_barcode; + output.manutenzioni_chiudi_salva_offline = co.manutenzioni_chiudi_salva_offline; + + output.dpi_checkbox = co.dpi_checkbox; + + output.anagrafica = co.anagrafica; + output.stato_finale = co.stato_finale; + output.descrizione_intervento = co.descrizione_intervento; + output.composizione_impianto = co.composizione_impianto; + output.note_intervento = co.note_intervento; + output.esito_intervento = co.esito_intervento; + output.ora_inizio_fine = co.ora_inizio_fine; + output.materiali = co.materiali; + output.diritto_chiamata = co.diritto_chiamata; + output.manodopera = co.manodopera; + output.spese_viaggio = co.spese_viaggio; + output.tipo_pagamento = co.tipo_pagamento; + output.note_pagamento = co.note_pagamento; + output.causale = co.causale; + + output.time_sheet = co.time_sheet; + output.time_sheet_offline = co.time_sheet_offline; + output.costo_orario = co.costo_orario; + + output.manutenzioni_rifiuta_barcode = co.manutenzioni_rifiuta_barcode; + + //OBSOLETI + //output.storico = co.storico; + //output.storico_tecnico = co.storico_tecnico; + //FINE OBSOLETI + + output.storico_interventi = co.storico_interventi; + output.storico_impianto = co.storico_impianto; + output.ricerca_impianti = co.ricerca_impianti; + output.abilita_data_rapp_edit = co.abilita_data_rapp_edit; + + return output; + } + + /// Configurazioni per azienda return:ActionResult + [HttpGet("configurazioni")] + public async Task> configurazioni(string token) + { + string ten = getClaimValueByToken(token, "tenant"); + string tecnico = getClaimValueByToken(token, "tccodice"); + string tenConf = getClaimValueByToken(token, "tenantConfigurazioni"); + if (string.IsNullOrEmpty(ten)) + { + ten = tenConf; + } + + Configurazione_out output = new Configurazione_out(); + try + { + var c = await _config.conf.Where(t => t.azienda == ten).ToListAsync(); + var cc = c.First(); + + if (cc == null) + { + return NotFound(); + } + + output = fillConfigurazione(cc); + + //cerco le aziende collegate + bool bCercaAzcoll = false; + List l = new List(); + //switch (ten) + //{ + // case Clienti.Discovery: + // bCercaAzcoll = true; + // break; + //} + if(bCercaAzcoll) + { + //_azi_coll = getAziendeRifByTenant(ten); + var a = await _azi_coll.Where(t => t.piazihoc != null && t.piazihoc.Equals(ten)).ToListAsync(); + if (a.Any()) + { + foreach (AziendaRif appo in a) + { + l.Add(appo); + } + } + } + output.aziende_coll = l; + + + return StatusCode(StatusCodes.Status200OK, output); + } + catch(Exception ex) + { + string err = "Errore: " + ex.Message; + output.err_detail = err; + output.err_title = err; + output.err_status_code = StatiRisposta.ErroreInterno; + return StatusCode(StatusCodes.Status500InternalServerError, output); + } + + } + + [HttpPost] + [Route("configurazioni/add")] + public async Task> addConfigurazione([FromBody] Configurazioni model, string token) + { + string ten = getClaimValueByToken(token, "tenant2"); + + try + { + using (var transaction = _config.Database.BeginTransaction()) + { + await _config.conf.AddAsync(model); + await _config.SaveChangesAsync(); + transaction.Commit(); + } + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + #endregion + + #region Token + + /// token riewmpimento + private Token fillTokenByInput(string tokenDevice, string tokenLogin) + { + Token r = new Token(); + + string ten = getClaimValueByToken(tokenLogin, "tenant"); + string tecnico = getClaimValueByToken(tokenLogin, "tccodice"); + + r.tenant = ten; + r.usr = tecnico; + r.token = tokenDevice; + r.ts = DateTime.Now; + return r; + } + + /// elimina Token + private async void deleteToken(Token t) + { + using (var transaction = _tokens.Database.BeginTransaction()) + { + _tokens.tok.Remove(t); + await _tokens.SaveChangesAsync(); + transaction.Commit(); + } + } + + /// inserisce Token + private async void insertToken(Token t) + { + using (var transaction = _tokens.Database.BeginTransaction()) + { + await _tokens.tok.AddAsync(t); + await _tokens.SaveChangesAsync(); + transaction.Commit(); + } + } + + /// token salvataggio + [HttpPost] + [Route("token/add")] + public async Task> addToken(string tokenDevice, string token) + { + Token_out t = new Token_out(); + bool da_inserire = false; + + try + { + List co = new List(); + if (_tokens is not null && _tokens.tok is not null) + { + co = await _tokens.tok.Where(c => c.token.Equals(tokenDevice)).ToListAsync(); + } + Token inp = fillTokenByInput(tokenDevice, token); + + if (co.Count== 0) + { + da_inserire = true; + } + else + { + //il token c'è. controllo che sia associato all'utente corretto + string ten = getClaimValueByToken(token, "tenant"); + string tecnico = getClaimValueByToken(token, "tccodice"); + + bool token_corretto_presente = false; + foreach(Token tt in co) + { + if (tt.usr is not null && tt.usr.Equals(tecnico) && tt.tenant is not null && tt.tenant.Equals(ten)) + { + token_corretto_presente = true; + } + else + { + using (var transaction = _tokens.Database.BeginTransaction()) + { + Token entitasViewModel = _tokens.tok.Where(p => p.Id == tt.Id).FirstOrDefault(); + _tokens.Entry(entitasViewModel).State = EntityState.Deleted; + await _tokens.SaveChangesAsync(); + transaction.Commit(); + } + } + } + if (!token_corretto_presente) + da_inserire = true; + } + if(da_inserire) + { + using (var transaction = _tokens.Database.BeginTransaction()) + { + await _tokens.tok.AddAsync(inp); + await _tokens.SaveChangesAsync(); + transaction.Commit(); + } + t.err_status_code = StatiRisposta.Ok; + } + return StatusCode(StatusCodes.Status200OK, t); + } + catch(Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + t.err_title = ex.Message; + t.err_detail = errmsg; + t.err_status_code = StatiRisposta.ErroreInterno; + return StatusCode(StatusCodes.Status500InternalServerError, t); + } + + } + /// token salvataggio + [HttpPost] + [Route("token/sendMessage")] + public async Task> sendMessage(string tokenDevice,string _title, string _body) + { + Token_out t = new Token_out(); + //Token inp = fillTokenByInput(tokenDevice, tokenLogin); + + try + { + if (FirebaseApp.DefaultInstance == null) + { + FirebaseApp.Create(new AppOptions() + { + Credential = GoogleCredential.FromFile("private_key.json") + }); + } + //var registrationToken = "dDxUDIC3QcWytp6UeVMDyT:APA91bH9y0N7Iff39Ncv0m_EjJ-hv7YTWYaL_5P37-2dob2PRuArvpfl6kmrk10GO2eJiAQ2tVT3tZX9khUD-NPyfljGbpBn1iUyjbTpL6tDF-0IgJN960v95I4_2SWM_crtSH-ZrXAK"; + var registrationToken = tokenDevice; + var message = new Message() + { + Data = new Dictionary() + { + { "myData", "123457777" }, + }, + Token = registrationToken, + //Notification = new Notification() + //{ + // Title = _title+" "+getCpccchk(4), + // Body = _body + " "+ DateTime.Now.ToString("yyyyMMddHHmmss") + //} + }; + string response = FirebaseMessaging.DefaultInstance.SendAsync(message).Result; + t.response = response; + + //t.response= await SendNotificationAsync(tokenDevice,"titolo","corpo del messaggio"); + return StatusCode(StatusCodes.Status200OK, t); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + t.err_title = ex.Message; + t.err_detail = errmsg; + t.err_status_code = StatiRisposta.ErroreInterno; + return StatusCode(StatusCodes.Status500InternalServerError, t); + } + } + + //SendNotificationAsync + private async Task SendNotificationAsync(string token, string title, string body) + { + using (var client = new HttpClient()) + { + //var firebaseOptionsServerId = _firebaseOptions.ServerApiKey; + //var firebaseOptionsSenderId = _firebaseOptions.SenderId; + var firebaseOptionsServerId = "AAAAGBwLmNY:APA91bG5GmgYcaxsU8HrOqvZbb9r82tH9RAEifgKhwoj_zwBe7qei8u3BSxMzFl9Dwykd0TWRuM7ffNe6ehhDDRUqaRPj_vKM9KreJnNrqB6f2hxjPAxzk5De2Ys437-dnSAuS_8SVJV"; + var firebaseOptionsSenderId = "103549737174"; + + + + client.BaseAddress = new Uri("https://fcm.googleapis.com"); + client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); + client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", + $"key={firebaseOptionsServerId}"); + client.DefaultRequestHeaders.TryAddWithoutValidation("Sender", $"id={firebaseOptionsSenderId}"); + + + var data = new + { + to = token, + + body = body, + title = title, + + priority = "high" + }; + + var json = JsonConvert.SerializeObject(data); + var httpContent = new StringContent(json, Encoding.UTF8, "application/json"); + + var result = await client.PostAsync("/fcm/send", httpContent); + return result.ToString(); + } + } + #endregion + + #region LOGIN + /// Magazzini per login return:ActionResult + [HttpGet("magazzini")] + public async Task>> magazzini(string token) + { + List lst= new List(); + string ten = getClaimValueByToken(token, "tenant"); + string ten2 = getClaimValueByToken(token, "tenant2"); + string tenAdhoc = getClaimValueByToken(token, "tenantConfigurazioni"); + + if(string.IsNullOrEmpty(ten)) + { + ten = tenAdhoc; + } + _magazziniVT = _VT_Magazzini.Magazzini; + + List magaVTList = new List(); + magaVTList = await _magazziniVT.Where(x => x.Azienda.Equals(ten2)).ToListAsync(); + + foreach (var magVT in magaVTList) + { + Magazzini maga = new Magazzini(); + maga.mgcodmag = magVT.Mgcodmag.TrimEnd(); + maga.mgdesmag = magVT.Mgdesmag.TrimEnd(); + + lst.Add(maga); + } + + return lst; + + //if (ten.Equals(Clienti.VT)) + //{ + // _magazziniVT = _VT_Magazzini.Magazzini; + + // List magaVTList = new List(); + // magaVTList = await _magazziniVT.Where(x => x.Azienda.Equals(ten2)).ToListAsync(); + + // foreach (var magVT in magaVTList) + // { + // Magazzini maga = new Magazzini(); + // maga.mgcodmag = magVT.Mgcodmag.TrimEnd(); + // maga.mgdesmag = magVT.Mgdesmag.TrimEnd(); + + // lst.Add(maga); + // } + // return lst; + //} + //else + //{ + // _magazzini = getMagazziniByTenant(ten); + // return await _magazzini.ToListAsync(); + //} + + } + + /// Login iniziale return:ActionResult + [HttpPost("loginTechnical")] + public async Task< ActionResult> loginTechnical([FromBody] LoginModel model) + { + LoginOut o = new LoginOut(); + string tenAdHoc = string.Empty; + try + { + if (string.IsNullOrEmpty(model.Username) || string.IsNullOrEmpty(model.Password)) + { + o.err_detail = "Username e Password non possono essere vuoti."; + o.err_title = "Username e Password non possono essere vuoti."; + o.err_status_code = StatiRisposta.OperazioneNonAmmessa; + return StatusCode(StatusCodes.Status200OK, o); + } + else + { + var tecnico=new List(); + switch (model.Tenant) + { + case Clienti.VT: + _tecnici= _VT_tec.Tecnici; + tecnico = await _tecnici.Where(t => t.tcuser == model.Username && t.tcpwd == model.Password ).Take(1).ToListAsync(); + string ten2 = tecnico.First().tccodazi; + tenAdHoc = model.Tenant; + _confLette = await readConf(ten2); + break; + default: + //2024-11-26: leggo le configurazioni prima perchè come tenant non devo più leggere AZIENDA ma AZIENDA_ADHOC + _confLette = await readConf(model.Tenant); + + tenAdHoc = (_confLette != null && _confLette.azienda_adhoc!=null)? _confLette.azienda_adhoc:string.Empty; + _tecnici = getTecniciByTenant(tenAdHoc); + //model.Tenant = tenAdHoc;// lo valoriozzo con quello iniziale per non cambiare il passaggio nel token + + tecnico = await _tecnici.Where(t => t.tcuser == model.Username && t.tcpwd == model.Password && t.tccodazi == tenAdHoc).Take(1).ToListAsync(); + break; + } + + if (tecnico == null || (tecnico != null && tecnico.Count == 0)) + { + o.err_detail = "Username o Password non trovati."; + o.err_title = "Username o Password non trovati."; + o.err_status_code = StatiRisposta.OperazioneNonAmmessa; + return StatusCode(StatusCodes.Status404NotFound, o); + } + else + { + var authClaims = new List + { + //new Claim(ClaimTypes.Name, model.Username), + new Claim(ClaimTypes.Name,tecnico.First().tcuser), + new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()), + new Claim("tenant", tenAdHoc),//questa è la vera azienda in AdHoc. Quella del model è quella che individua l'azienda nelle configurazioni (A0001 è sempre la stessa per tutte le installazioni di ADHOC WEB) + new Claim("tenantConfigurazioni", model.Tenant),//questa è l'azienda nelle configurazioni + new Claim("tenant2", tecnico.First().tccodazi), + new Claim("tccodice", tecnico.First().tccodice), + }; + var authSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["JWT:Secret"])); + var token = new JwtSecurityToken( + issuer: _configuration["JWT:ValidIssuer"], + audience: _configuration["JWT:ValidAudience"], + expires: DateTime.Now.AddMonths(3), + claims: authClaims, + signingCredentials: new SigningCredentials(authSigningKey, SecurityAlgorithms.HmacSha256) + ); + string tok = new JwtSecurityTokenHandler().WriteToken(token); + _token = tok; + + + o.Tok = tok; + o.Tcdescri = tecnico.First().Tcdescri; + o.Tccodice = tecnico.First().tccodice; + Conf cc = new Conf(); + + //le configurazioni per VT vanno lette con il tenant generico VIRTU + //2024-05-16: tornati alla impostazione iniziale per poter gestite i pulsanti per ogni cliente di VT + //_confLette = await readConf(model.Tenant); + + cc.abilita_naviga = _confLette.abilita_naviga; + cc.abilita_telefona = _confLette.abilita_telefona; + cc.abilita_chiamate = _confLette.abilita_chiamate; + cc.abilita_barcode = _confLette.abilita_barcode; + + cc.abilita_manutenzioni = _confLette.abilita_manutenzioni; + cc.chiamate_accetta = _confLette.chiamate_accetta; + cc.chiamate_accetta_barcode = _confLette.chiamate_accetta_barcode; + cc.chiamate_accetta_offline = _confLette.chiamate_accetta_offline; + cc.chiamate_rifiuta = _confLette.chiamate_rifiuta; + cc.chiamate_rifiuta_barcode = _confLette.chiamate_rifiuta_barcode; + cc.chiamate_rifiuta_offline = _confLette.chiamate_rifiuta_offline; + cc.chiamate_chiudi_barcode = _confLette.chiamate_chiudi_barcode; + cc.chiamate_firma_barcode = _confLette.chiamate_firma_barcode; + cc.chiamate_chiudi_salva_barcode = _confLette.chiamate_chiudi_salva_barcode; + cc.chiamate_chiudi_salva_offline = _confLette.chiamate_chiudi_salva_offline; + + cc.manutenzioni_accetta = _confLette.manutenzioni_accetta; + cc.manutenzioni_rifiuta = _confLette.manutenzioni_rifiuta; + cc.manutenzioni_accetta_barcode = _confLette.manutenzioni_accetta_barcode; + cc.manutenzioni_accetta_offline = _confLette.manutenzioni_accetta_offline; + cc.manutenzioni_chiudi_barcode = _confLette.manutenzioni_chiudi_barcode; + cc.manutenzioni_firma_barcode = _confLette.manutenzioni_firma_barcode; + cc.manutenzioni_chiudi_salva_barcode = _confLette.manutenzioni_chiudi_salva_barcode; + cc.manutenzioni_chiudi_salva_offline = _confLette.manutenzioni_chiudi_salva_offline; + + cc.dpi_checkbox = _confLette.dpi_checkbox; + + cc.anagrafica = _confLette.anagrafica; + cc.stato_finale = _confLette.stato_finale; + cc.descrizione_intervento = _confLette.descrizione_intervento; + cc.composizione_impianto = _confLette.composizione_impianto; + cc.note_intervento = _confLette.note_intervento; + cc.esito_intervento = _confLette.esito_intervento; + cc.ora_inizio_fine = _confLette.ora_inizio_fine; + cc.materiali = _confLette.materiali; + cc.diritto_chiamata = _confLette.diritto_chiamata; + cc.manodopera = _confLette.manodopera; + cc.spese_viaggio = _confLette.spese_viaggio; + cc.tipo_pagamento = _confLette.tipo_pagamento; + cc.note_pagamento = _confLette.note_pagamento; + cc.causale = _confLette.causale; + + cc.time_sheet = _confLette.time_sheet; + cc.time_sheet_offline = _confLette.time_sheet_offline; + + //per VT il costo lo devo leggere dal profilo del tecnico + if (model.Tenant.Equals(Clienti.VT)) + { + string ten2 = tecnico.First().tccodazi; + string codTec = tecnico.First().tccodice; + _tecTable = _VT_tectable.Tectable; + var costo = _tecTable.Where(t => t.tccodazi.Equals(ten2) && t.tccodice.Equals(codTec)).First(); + cc.costo_orario = costo.tccoor; + } + else + { + cc.costo_orario = _confLette.costo_orario; + } + + + cc.ftp_port= _confLette.ftp_port; + cc.manutenzioni_rifiuta_barcode = _confLette.manutenzioni_rifiuta_barcode; + cc.storico = _confLette.storico; + cc.storico_tecnico = _confLette.storico_tecnico; + cc.storico_interventi = _confLette.storico_interventi; + cc.storico_impianto = _confLette.storico_impianto; + cc.ricerca_impianti = _confLette.ricerca_impianti; + + cc.ora_inizio_fine_automatica = _confLette.ora_inizio_fine_automatica; + cc.stampa_orario = _confLette.stampa_orario; + cc.intestazione_stampa = _confLette.intestazione_stampa; + cc.seriale_template_chi = _confLette.seriale_template_chi; + cc.abilita_inserimento_chiamate = _confLette.abilita_inserimento_chiamate; + cc.abilita_data_rapp_edit = _confLette.abilita_data_rapp_edit; + cc.numeri_decimali = _confLette.numeri_decimali; + cc.max_record = _confLette.max_record; + cc.prezzi_visibili = _confLette.prezzi_visibili; + cc.desc_supp_prodotti_visibile = _confLette.desc_supp_prodotti_visibile; + cc.azienda_adhoc = _confLette.azienda_adhoc; + cc.note_interv_stampa = _confLette.note_interv_stampa; + cc.desc_interv_stampa = _confLette.desc_interv_stampa; + + + o.Config = cc; + + //cerco le aziende collegate + List l = new List(); + string ten = model.Tenant; + bool bCercaAzcoll = false; + bool bCercaAziVT = false; + + bCercaAziVT = true; + + //switch (ten) + //{ + // case Clienti.Discovery: + // bCercaAzcoll = true; + // break; + // case Clienti.VT: + // bCercaAziVT = true; + // break; + + //} + if (bCercaAzcoll) + { + //_azi_coll = getAziendeRifByTenant(ten); + var a = await _azi_coll.Where(t => t.piazihoc != null && t.piazihoc.Equals(ten) && t.picodtec!=null && t.picodtec.Trim().Equals(o.Tccodice.Trim())).ToListAsync(); + if (a.Any()) + { + + foreach (AziendaRif appo in a) + { + string logo = !string.IsNullOrEmpty(appo.pilogurl) ? appo.pilogurl.Trim() : string.Empty; + //var uriBuilder = new UriBuilder(Request.Scheme, Request.Host.Host, Request.Host.Port ?? -1); + //logo = uriBuilder + logo; + appo.pilogurl = logo; + l.Add(appo); + } + } + } + if(bCercaAziVT) + { + + ten = model.Tenant; + string ten2 = tecnico.First().tccodazi; + string tecn= tecnico.First().tccodice; + _VT_DatiAzi = _VT_DatiAzienda.Dati; + var t = await _VT_DatiAzi.Where(t => t.azienda.Equals(ten2) && t.tecnico.Equals(tecn)).ToListAsync(); + if (t.Any()) + { + foreach (DatiAzienda appo in t) + { + AziendaRif ar = new AziendaRif(); + + //https://localhost:7068/VIRTU/AZI01/AZI01_LOGO.jpg + string logo = !string.IsNullOrEmpty(appo.url_logo) ? appo.url_logo.Trim() : string.Empty; + //var uriBuilder = new UriBuilder(Request.Scheme, Request.Host.Host, Request.Host.Port ?? -1); + //logo = uriBuilder + logo; + ar.pilogurl = logo; + ar.picodtec = appo.tecnico; + ar.pinomede = appo.ragsoc; + ar.pitextin = appo.testo_buono; + ar.pirifazi = appo.azienda; + ar.piazihoc = model.Tenant; + + l.Add(ar); + } + } + /* + _azi_coll = _VT_azi.Azi; + var a= await _azi_coll.Where(t => t.piazihoc != null && t.piazihoc.Equals(ten) + && t.picodtec != null && t.picodtec.Trim().Equals(o.Tccodice.Trim()) + && t.pirifazi!=null && t.pirifazi.Equals(ten2) + ).ToListAsync(); + + if(a.Any()) + { + foreach (AziendaRif appo in a) + { + + //https://localhost:7068/VIRTU/AZI01/AZI01_LOGO.jpg + string logo = !string.IsNullOrEmpty(appo.pilogurl) ? appo.pilogurl.Trim() : string.Empty; + //var uriBuilder = new UriBuilder(Request.Scheme, Request.Host.Host, Request.Host.Port ?? -1); + //logo = uriBuilder + logo; + appo.pilogurl = logo; + l.Add(appo); + } + } + */ + + } + o.aziende_coll = l; + } + return StatusCode(StatusCodes.Status200OK, o); + } + } + catch (Exception ex) + { + string err = "Errore: " + ex.Message; + o.err_detail = err; + o.err_title = err; + o.err_status_code = StatiRisposta.ErroreInterno; + return StatusCode(StatusCodes.Status500InternalServerError, o); + } + + } + + #endregion + + #region CHIAMATE + private async Task getSerBuonoChiamata(string ten,string pref, string ten2) + { + //inizializzo il buono nel caso non lo trovi in tabella (per Sicilia è stato così) + string seriale = pref+"00000"; + _rapp_new = _VT_rapptable.Rapps; + + //switch (ten) + //{ + // case Clienti.VT: + // ten = ten2; + + // break; + // default: + // _rapp_new = getRappNewByTenant(ten); + // break; + //} + + //var rapp = await _rapp_new.Where(t => t.azienda_impianto == ten && t.ser_buono!=null && t.tipo_rapportino== TipoRapportino.ChiamataChiusa).OrderByDescending(t => t.ser_buono).Take(1).ToListAsync(); + //var rapp = await _rapp_new.Where(t => t.azienda_impianto == ten && t.ser_buono != null && t.ser_buono.Trim().Contains(pref) && t.tipo_rapportino == TipoRapportino.ChiamataChiusa).OrderByDescending(t => t.ser_buono).Take(1).ToListAsync(); + //tolto filtro su tipo rapportino per gestire anche il tipo 4 =commessa + var rapp = await _rapp_new.Where(t => t.azienda_impianto == ten && t.ser_buono != null && t.ser_buono.Trim().Contains(pref)).OrderByDescending(t => t.ser_buono).Take(1).ToListAsync(); + + if (rapp != null && rapp.Count() > 0) + { + seriale = getNewSerialeBuono(rapp.First().ser_buono, pref); + } + else + { + seriale = getNewSerialeBuono(seriale, pref); + } + + return seriale; + } + private async Task fillRappNewByInput(Input i, string token, string newSerial,Configurazioni co) + { + Rapp_New r = new Rapp_New(); + DateTime dateIni = new DateTime(1900, 1, 1); + DateTime adesso = DateTime.Now; + string ten = getClaimValueByToken(token, "tenant"); + string tecnico = getClaimValueByToken(token, "tccodice"); + string tenConf = getClaimValueByToken(token, "tenantConfigurazioni"); + if (string.IsNullOrEmpty(ten)) + { + ten = tenConf; + } + + switch (ten) + { + case Clienti.VT: + _chiamate = _VT_chia.Chiamate; + ten = getClaimValueByToken(token, "tenant2"); + + break; + default: + _chiamate = getChiamateByTenant(ten); + break; + } + //i = fakeInput(i,ten); + + var chia = await _chiamate.Where(t => t.chserial.Trim().Equals(i.seriale_chiamata.Trim())).OrderBy(t => t.chdtapp).ToListAsync(); + + r.seriale_rapportino = newSerial; + r.tipo_rapportino = string.Empty; + r.azienda_impianto = ten; + r.codice_impianto = chia.First().chcodimp; + r.azienda_chiamata = ten; + r.seriale_chiamata = i.seriale_chiamata; + r.seriale_commessa = string.Empty; + r.data_rapportino = adesso; + //r.ora_ini_rapportino = adesso.Hour.ToString(); + r.ora_ini_rapportino = i.ora_ini_rapportino; + r.ora_fin_rapportino = "01"; + r.min_ini_rapportino = i.min_ini_rapportino; + r.min_fin_rapportino = "00"; + r.codice_chiusura_1 = string.Empty; + r.codice_chiusura_2 = string.Empty; + r.codice_chiusura_3 = string.Empty; + r.codice_chiusura_4 = string.Empty; + r.codice_chiusura_5 = string.Empty; + r.codice_chiusura_6 = string.Empty; + r.codice_chiusura_7 = string.Empty; + r.codice_chiusura_8 = string.Empty; + r.codice_chiusura_9 = string.Empty; + r.codice_chiusura_10 = string.Empty; + r.descrizione_intervento = "ACCETTAZIONE chiamata " + i.seriale_chiamata; + r.stato_finale = string.Empty; + r.azienda_tecnico = ten; + r.codice_tecnico = tecnico; + r.rifiutata = "N"; + r.firma = string.Empty; + r.incarico = "S"; + r.data_validita = dateIni; + r.immagine = i.immagine; + r.ser_buono = string.Empty; + + + return r; + } + private async Task fillRappNewRifiutoByInput(Input i, string token, string newSerial, Configurazioni co) + { + Rapp_New r = new Rapp_New(); + DateTime dateIni = new DateTime(1900, 1, 1); + DateTime adesso = DateTime.Now; + string ten = getClaimValueByToken(token, "tenant"); + string tecnico = getClaimValueByToken(token, "tccodice"); + string tenConf = getClaimValueByToken(token, "tenantConfigurazioni"); + if (string.IsNullOrEmpty(ten)) + { + ten = tenConf; + } + + switch (ten) + { + case Clienti.VT: + _chiamate = _VT_chia.Chiamate; + ten = getClaimValueByToken(token, "tenant2"); + + break; + default: + _chiamate = getChiamateByTenant(ten); + break; + } + + var chia = await _chiamate.Where(t => t.chserial == i.seriale_chiamata).OrderBy(t => t.chdtapp).ToListAsync(); + + r.seriale_rapportino = newSerial; + r.tipo_rapportino = string.Empty; + r.azienda_impianto = ten; + r.codice_impianto = chia.First().chcodimp; + r.azienda_chiamata = ten; + r.seriale_chiamata = i.seriale_chiamata; + r.seriale_commessa = string.Empty; + r.data_rapportino = adesso; + r.ora_ini_rapportino = adesso.Hour.ToString(); + r.ora_fin_rapportino = "01"; + r.min_ini_rapportino = adesso.Minute.ToString(); + r.min_fin_rapportino = "00"; + r.codice_chiusura_1 = string.Empty; + r.codice_chiusura_2 = string.Empty; + r.codice_chiusura_3 = string.Empty; + r.codice_chiusura_4 = string.Empty; + r.codice_chiusura_5 = string.Empty; + r.codice_chiusura_6 = string.Empty; + r.codice_chiusura_7 = string.Empty; + r.codice_chiusura_8 = string.Empty; + r.codice_chiusura_9 = string.Empty; + r.codice_chiusura_10 = string.Empty; + r.descrizione_intervento = "RIFIUTO chiamata " + i.seriale_chiamata; + r.stato_finale = string.Empty; + r.azienda_tecnico = ten; + r.codice_tecnico = tecnico; + r.rifiutata = "S"; + r.firma = string.Empty; + r.incarico = "N"; + r.data_validita = dateIni; + r.immagine = i.immagine; + r.ser_buono = string.Empty; + + return r; + } + private async Task fillRappNewChiudiByInput(Input i, string token, string newSerial, Configurazioni co) + { + Rapp_New r = new Rapp_New(); + DateTime dateIni = new DateTime(1900, 1, 1); + DateTime adesso = DateTime.Now; + string ten = getClaimValueByToken(token, "tenant"); + string ten2 = getClaimValueByToken(token, "tenant2"); + string tecnico = getClaimValueByToken(token, "tccodice"); + string tenConf = getClaimValueByToken(token, "tenantConfigurazioni"); + if (string.IsNullOrEmpty(ten)) + { + ten = tenConf; + } + var sBuono = await getSerBuonoChiamata(ten, co.prefisso_buoni_chia,ten2); + + + switch (ten) + { + case Clienti.VT: + _chiamate = _VT_chia.Chiamate; + ten = getClaimValueByToken(token, "tenant2"); + + break; + default: + _chiamate = getChiamateByTenant(ten); + break; + } + + + var chiam = await _chiamate.Where( + t => t.chserial.Equals(i.seriale_chiamata) + && t.chcodazi == ten && t.chtipo.Equals("X") + ).OrderByDescending(t => t.chdtapp).ToListAsync(); + if(chiam!=null && chiam.Count()>0) + { + r.tipo_rapportino = TipoRapportino.ChiamataDaCommessa; + r.seriale_commessa = chiam.FirstOrDefault().chrifer; + } + else + { + r.tipo_rapportino = TipoRapportino.ChiamataChiusa; + r.seriale_commessa = string.Empty; + } + + // MARROCCO se la chiamata è fatta da un capo tecnico che deve rendicontare l'attività delle squadra + // sulla chiamata nel campo CHMODRAC viene scritto COMME + var chiam2 = await _chiamate.Where( + t => t.chserial.Equals(i.seriale_chiamata) + && t.chcodazi == ten && t.chtipo.Equals("A") + ).OrderByDescending(t => t.chdtapp).ToListAsync(); + //if (chiam2 != null && chiam2.Count() > 0) + //{ + // if (ten.Equals(Clienti.Marrocco) && chiam2 != null && chiam2.FirstOrDefault().chmodrac != null && chiam2.FirstOrDefault().chmodrac.Equals("COMME")) + // { + // r.tipo_rapportino = TipoRapportino.ChiamataCapoTecnico; + // } + // if (ten.Equals(Clienti.Gitoga) && chiam2 != null && chiam2.FirstOrDefault().chmodrac != null && chiam2.FirstOrDefault().chmodrac.Equals("COMME")) + // { + // r.tipo_rapportino = TipoRapportino.ChiamataCapoTecnico; + // } + // if (ten.Equals(Clienti.Lifta) && chiam2 != null && chiam2.FirstOrDefault().chmodrac != null && chiam2.FirstOrDefault().chmodrac.Equals("COMME")) + // { + // r.tipo_rapportino = TipoRapportino.ChiamataCapoTecnico; + // } + //} + + r.seriale_rapportino = newSerial; + + r.azienda_impianto = ten; + r.codice_impianto = i.codice_impianto; + r.azienda_chiamata = ten; + r.seriale_chiamata = i.seriale_chiamata; + + + //2023-11-23: gestione data retrodatata. Se l'input è valorizzato vuol dire che l'ho editato dal campo, altrimenti passo la data di sistema + if(i.data_rapportino!=null) + r.data_rapportino = i.data_rapportino; + else + r.data_rapportino = adesso; + + //r.ora_ini_rapportino = adesso.Hour.ToString(); + r.ora_ini_rapportino = i.ora_ini_rapportino; + r.ora_fin_rapportino = i.ora_fin_rapportino; + //r.min_ini_rapportino = adesso.Minute.ToString(); + r.min_ini_rapportino = i.min_ini_rapportino; + r.min_fin_rapportino = i.min_fin_rapportino; + r.codice_chiusura_1 = i.codice_chiusura_1; + r.codice_chiusura_2 = i.codice_chiusura_2; + r.codice_chiusura_3 = i.codice_chiusura_3; + r.codice_chiusura_4 = i.codice_chiusura_4; + r.codice_chiusura_5 = i.codice_chiusura_5; + r.codice_chiusura_6 = i.codice_chiusura_6; + r.codice_chiusura_7 = i.codice_chiusura_7; + r.codice_chiusura_8 = i.codice_chiusura_8; + r.codice_chiusura_9 = i.codice_chiusura_9; + r.codice_chiusura_10 = i.codice_chiusura_10; + r.descrizione_intervento = i.descrizione_intervento; + r.stato_finale = string.Empty; + r.azienda_tecnico = ten; + r.codice_tecnico = tecnico.Trim(); + r.rifiutata = string.Empty; + r.firma = i.firma; + r.incarico = string.Empty; + r.data_validita = adesso; + //r.immagine = co.path_buoni + sBuono.ToString(); + + r.esito_intervento = i.esito_intervento; + r.note_intervento = i.note_intervento; + r.note_esito = i.note_esito; + r.difetti_riscontrati = i.difetti_riscontrati; + r.lavoro_eseguito = i.lavoro_eseguito; + r.nuovo_contratto = i.nuovo_contratto; + r.ore_lavoro = i.ore_lavoro; + r.causale = i.causale; + r.materiale = i.materiale; + r.diritto_chiamata = i.diritto_chiamata; + r.manodopera = i.manodopera; + r.spese_viaggio = i.spese_viaggio; + r.pagamento = i.pagamento; + r.anticipo = i.anticipo; + r.totale = i.totale; + r.note_pagamento = i.note_pagamento; + r.tipo_intervento = i.tipo_intervento; + r.rafoto1 = i.rafoto1; + r.rafoto2 = i.rafoto2; + r.rafoto3 = i.rafoto3; + r.rafoto4 = i.rafoto4; + r.rafoto5 = i.rafoto5; + r.rafoto6 = i.rafoto6; + r.rafoto7 = i.rafoto7; + r.rafoto8 = i.rafoto8; + r.rafoto9 = i.rafoto9; + r.rafoto10 = i.rafoto10; + r.codice_intervento = i.codice_intervento; + r.data_effettiva = i.data_effettiva; + //manca codice giro ? + + //r.immagine = i.immagine; + r.immagine = string.Format(@"{0}\{1}.jpg", co.path_buoni, sBuono.ToString()); + r.ser_buono = sBuono.ToString(); + Console.WriteLine(string.Format("*********** {2} metodo chiudi: tenant:{0} tenant2: {1} tenantConf: {5} buono: {3} tecnico:{4} ", ten, ten2, DateTime.Now.ToString(), r.ser_buono, r.codice_tecnico,tenConf)); + + return r; + } + private Chiamate_out fillChiamateOut(Chiamate i, string tenant) + { + Chiamate_out o = new Chiamate_out(); + o.chcodazi = i.chcodazi; + o.chserial=i.chserial; + o.chstato = i.chstato; + o.chtchiam = i.chtchiam; + + o.chdtapp = i.chdtapp; + o.choraaPI = i.choraaPI; + o.chminapi = i.chminapi; + o.chnote = i.chnote; + + o.chcodimp = i.chcodimp; + o.csdescr = i.csdescr; + o.antelefo = i.antelefo; + o.andescri = i.andescri; + o.imindiri1 = i.imindiri1; + + o.imindiri2 = i.imindiri2; + o.imindiri3 = i.imindiri3; + o.imindiri4 = i.imindiri4; + o.imindiri5 = i.imindiri5; + o.imlocali = i.imlocali; + o.imrefref = i.imrefref; + //costruisco il campo indirizzo + StringBuilder sb = new StringBuilder(); + + string chiamataIndStampa = string.Empty; + //switch (tenant) + //{ + // case Clienti.Marrocco: + // #region marrocco + // chiamataIndStampa = formattaIndirizzoStampaMarrocco(i); + // #endregion + // break; + // case Clienti.Gitoga: + // #region gitoga + // chiamataIndStampa = formattaIndirizzoStampaMarrocco(i); + // #endregion + // break; + // case Clienti.Lifta: + // #region lifta + // chiamataIndStampa = formattaIndirizzoStampaMarrocco(i); + // #endregion + // break; + // case Clienti.Discovery: + // #region Discovery + // chiamataIndStampa = formattaIndirizzoStampaDiscovery(i); + // #endregion + // break; + // case Clienti.Siet: + // //ragione sociale cliente + // sb.Append("SPETT.LE :"); + // sb.Append(!string.IsNullOrEmpty(i.andescri) ? i.andescri + " " : string.Empty); + // sb.Append("
"); + // //indirizzo + // sb.Append(!string.IsNullOrEmpty(i.imindiri1) ? i.imindiri1.Trim() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(i.imindiri2) ? i.imindiri2.Trim() + " " : string.Empty); + // sb.Append(i.imindiri3 != null ? i.imindiri3.ToString() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(i.imindiri4) ? i.imindiri4.Trim() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(i.imindiri5) ? i.imindiri5.Trim() : string.Empty); + // chiamataIndStampa = sb.ToString(); + + // break; + // default: + // sb.Append("SPETT.LE :"); + // if(!string.IsNullOrEmpty(i.andescri)) + // { + // sb.Append(!string.IsNullOrEmpty(i.andescri) ? i.andescri + " " : string.Empty); + // sb.Append("
"); + // } + + // sb.Append(!string.IsNullOrEmpty(i.imindiri1) ? i.imindiri1.Trim() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(i.imindiri2) ? i.imindiri2.Trim() + " " : string.Empty ); + // sb.Append(i.imindiri3 != null ? i.imindiri3.ToString() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(i.imindiri4) ? i.imindiri4.Trim() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(i.imindiri5) ? i.imindiri5.Trim() : string.Empty); + // chiamataIndStampa = sb.ToString(); + // break; + //} + o.indirizzo_stampa = chiamataIndStampa; + sb.Clear(); + + string chiamataItemList = string.Empty; + chiamataItemList = formattaItemChiamateVT(i); + + //switch (tenant) + //{ + // case Clienti.Marrocco: + // #region marrocco + // chiamataItemList = formattaItemChiamateMarrocco(i); + // #endregion + // break; + // case Clienti.Gitoga: + // #region gitoga + // chiamataItemList = formattaItemChiamateMarrocco(i); + // #endregion + // break; + // case Clienti.Lifta: + // #region lifta + // chiamataItemList = formattaItemChiamateMarrocco(i); + // #endregion + // break; + // case Clienti.Tedesco: + // #region Tedesco + // chiamataItemList = formattaItemChiamateTedesco(i); + // #endregion + // break; + // case Clienti.VT: + // chiamataItemList = formattaItemChiamateVT(i); + // break; + // default: + // #region default + // sb.Append(!string.IsNullOrEmpty(i.imindiri1) ? i.imindiri1.Trim() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(i.imindiri2) ? i.imindiri2.Trim() + " " : string.Empty); + // sb.Append(i.imindiri3 != null ? i.imindiri3.ToString() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(i.imindiri4) ? i.imindiri4.Trim() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(i.imindiri5) ? i.imindiri5.Trim() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(i.imcodcap) ? " " + i.imcodcap.Trim() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(i.imlocali) ? " " + i.imlocali.Trim() + " " : string.Empty); + + // if (!string.IsNullOrEmpty(i.chcodimp)) + // { + // sb.Append("
"); + // sb.Append("Impianto : " + i.chcodimp.Trim()); + // } + // chiamataItemList = sb.ToString(); + // break; + // #endregion + //} + o.impianto_list = chiamataItemList; + sb.Clear(); + + string rif_impianto = string.Empty; + //switch (tenant) + //{ + // case Clienti.Marrocco: + // #region marrocco + // rif_impianto = formattaRiferimentoImpiantoMarrocco(i); + // #endregion + // break; + // case Clienti.Gitoga: + // #region gitoga + // rif_impianto = formattaRiferimentoImpiantoMarrocco(i); + // #endregion + // break; + // case Clienti.Lifta: + // #region lifta + // rif_impianto = formattaRiferimentoImpiantoMarrocco(i); + // #endregion + // break; + // case Clienti.Discovery: + // #region discovery + // rif_impianto = formattaRiferimentoImpiantoDiscovery(i); + // #endregion + // break; + // case Clienti.Ferrari: + // #region ferrari + // rif_impianto = formattaRiferimentoImpiantoFerrari(i); + // #endregion + // break; + // case Clienti.Siet: + // #region SIET + // sb.AppendLine("N. Impianto: " + i.chcodimp); + // if (!string.IsNullOrEmpty(i.imubicaz)) + // { + // sb.AppendLine("Ubicazione: " + i.imubicaz); + // } + // if (!string.IsNullOrEmpty(i.chrifer)) + // { + // string comm = getCommessaSietBySerial(i.chrifer); + // if(!string.IsNullOrEmpty(comm)) + // { + // sb.AppendLine("Commessa: " + comm); + // } + + // } + + // rif_impianto = sb.ToString(); + // #endregion + // break; + // default: + // sb.AppendLine("N. Impianto: "+i.chcodimp ); + // if(!string.IsNullOrEmpty(i.imubicaz)) + // sb.AppendLine("Ubicazione: " + i.imubicaz); + + // rif_impianto = sb.ToString(); + // break; + //} + o.riferimento_impianto = rif_impianto; + sb.Clear(); + + o.imcodcap = i.imcodcap; + o.imcomune = i.imcomune; + o.improvin = i.improvin; + o.imcodnaz = i.imcodnaz; + + o.immatric = i.immatric; + o.imnumimp = i.imnumimp; + o.imubicaz = i.imubicaz; + + o.tcdescri = i.tcdescri; + + o.tccodice = i.tccodice; + o.ser_rapp_ic = i.ser_rapp_ic; + o.tipo_rapp_ic = i.tipo_rapp_ic; + o.ic = i.ic; + o.ser_rapp_rif = i.ser_rapp_rif; + + o.tipo_rapp_rif = i.tipo_rapp_rif; + o.rif = i.rif; + o.ser_rapp_chiu = i.ser_rapp_chiu; + o.tipo_rapp_chiu = i.tipo_rapp_chiu; + o.ser_buono_chiu = i.ser_buono_chiu; + + o.err_title = i.err_title; + o.err_detail = i.err_detail; + o.err_status_code = i.err_status_code; + o.ancodice = i.ancodice; + o.chiamata = i.chiamata; + o.spe_viaggio = i.spe_viaggio; + o.chnumero = i.chnumero; + + Dictionary dic = new Dictionary(); + //switch (tenant) + //{ + // case Clienti.Marrocco: + // #region marrocco + // dic.Add("Esercizio ", !string.IsNullOrEmpty(i.chcodese) ? i.chcodese : String.Empty); + // dic.Add("REF ", !string.IsNullOrEmpty(i.imrefref) ? i.imrefref : String.Empty); + // dic.Add("Riferimento:", !string.IsNullOrEmpty(i.chrifer) ? i.chrifer : String.Empty); + // dic.Add("Telefono rif.:", !string.IsNullOrEmpty(i.chtelef) ? i.chtelef : String.Empty); + + // #endregion + // break; + + // case Clienti.Gitoga: + // #region gitoga + // dic.Add("Esercizio ", !string.IsNullOrEmpty(i.chcodese) ? i.chcodese : String.Empty); + // dic.Add("REF ", !string.IsNullOrEmpty(i.imrefref) ? i.imrefref : String.Empty); + // dic.Add("Riferimento:", !string.IsNullOrEmpty(i.chrifer) ? i.chrifer : String.Empty); + // dic.Add("Telefono rif.:", !string.IsNullOrEmpty(i.chtelef) ? i.chtelef : String.Empty); + // #endregion + // break; + + // case Clienti.Lifta: + // #region lifta + // dic.Add("Esercizio ", !string.IsNullOrEmpty(i.chcodese) ? i.chcodese : String.Empty); + // dic.Add("REF ", !string.IsNullOrEmpty(i.imrefref) ? i.imrefref : String.Empty); + // dic.Add("Riferimento:", !string.IsNullOrEmpty(i.chrifer) ? i.chrifer : String.Empty); + // dic.Add("Telefono rif.:", !string.IsNullOrEmpty(i.chtelef) ? i.chtelef : String.Empty); + // #endregion + // break; + + // case Clienti.Ferrari: + // #region ferrari + // dic.Add("Esercizio", !string.IsNullOrEmpty(i.chcodese) ? i.chcodese : String.Empty); + // dic.Add("Tipo", !string.IsNullOrEmpty(i.chtipo) ? i.chtipo : String.Empty); + // dic.Add("Numero chiamata", !string.IsNullOrEmpty(i.chnumero.ToString()) ? i.chnumero.ToString() : String.Empty); + // dic.Add("Data chiamata", !string.IsNullOrEmpty(i.chdata.ToString()) ? i.chdata.ToString() : String.Empty); + // dic.Add("Ora inserimento chiamata", !string.IsNullOrEmpty(i.chora.ToString()) ? i.chora.ToString() : String.Empty); + // dic.Add("Min inserimento chiamata", !string.IsNullOrEmpty(i.chmin.ToString()) ? i.chmin.ToString() : String.Empty); + // dic.Add("Operatore assegnazione", !string.IsNullOrEmpty(i.chopass.ToString()) ? i.chopass.ToString() : String.Empty); + // dic.Add("Operatore chiusura", !string.IsNullOrEmpty(i.chopchi.ToString()) ? i.chopchi.ToString() : String.Empty); + // dic.Add("Azienda impianto", !string.IsNullOrEmpty(i.chaziimp) ? i.chaziimp : String.Empty); + // dic.Add("Ora appuntamento fine", !string.IsNullOrEmpty(i.choraapf.ToString()) ? i.choraapf.ToString() : String.Empty); + // dic.Add("Min appuntamento fine", !string.IsNullOrEmpty(i.chminapf.ToString()) ? i.chminapf.ToString() : String.Empty); + // dic.Add("Riferimento chiamata", !string.IsNullOrEmpty(i.chrifer) ? i.chrifer : String.Empty); + // dic.Add("Riferimento telefono", !string.IsNullOrEmpty(i.chtelef) ? i.chtelef : String.Empty); + // dic.Add("Codice segnalazione", !string.IsNullOrEmpty(i.chcodseg) ? i.chcodseg : String.Empty); + // dic.Add("Fermo impianto", !string.IsNullOrEmpty(i.chstopi) ? i.chstopi : String.Empty); + // dic.Add("Data assegnazione chiamata", !string.IsNullOrEmpty(i.chdtass.ToString()) ? i.chdtass.ToString() : String.Empty); + // dic.Add("Ora assegnazione chiamata", !string.IsNullOrEmpty(i.chorass.ToString()) ? i.chorass.ToString() : String.Empty); + // dic.Add("Min assegnazione chiamata", !string.IsNullOrEmpty(i.chminass.ToString()) ? i.chminass.ToString() : String.Empty); + // dic.Add("Data chiusura chiamata", !string.IsNullOrEmpty(i.chdtchi.ToString()) ? i.chdtchi.ToString() : String.Empty); + // dic.Add("Ora chiusura chiamata", !string.IsNullOrEmpty(i.chorachi.ToString()) ? i.chorachi.ToString() : String.Empty); + // dic.Add("Min chiusura chiamata", !string.IsNullOrEmpty(i.chminchi.ToString()) ? i.chminchi.ToString() : String.Empty); + // dic.Add("Data inizio intervento", !string.IsNullOrEmpty(i.chdtlin.ToString()) ? i.chdtlin.ToString() : String.Empty); + // dic.Add("Ora inizio intervento", !string.IsNullOrEmpty(i.chorali.ToString()) ? i.chorali.ToString() : String.Empty); + // dic.Add("Min inizio intervento", !string.IsNullOrEmpty(i.chminli.ToString()) ? i.chminli.ToString() : String.Empty); + // dic.Add("Data fine intervento", !string.IsNullOrEmpty(i.chdtlfi.ToString()) ? i.chdtlfi.ToString() : String.Empty); + + // dic.Add("Ora fine intervento", !string.IsNullOrEmpty(i.choralf.ToString()) ? i.choralf.ToString() : String.Empty); + // dic.Add("Min fine intervento", !string.IsNullOrEmpty(i.chminlf.ToString()) ? i.chminlf.ToString() : String.Empty); + // dic.Add("Numero 1 rapportino futuro", !string.IsNullOrEmpty(i.chnrap1.ToString()) ? i.chnrap1.ToString() : String.Empty); + // dic.Add("Serie 1 rapportino futuro", !string.IsNullOrEmpty(i.chsrap1) ? i.chsrap1 : String.Empty); + // dic.Add("Numero 2 rapportino futuro", !string.IsNullOrEmpty(i.chnrap2.ToString()) ? i.chnrap2.ToString() : String.Empty); + // dic.Add("Modalità raccolta chiamata", !string.IsNullOrEmpty(i.chmodrac) ? i.chmodrac : String.Empty); + // dic.Add("Numero chiamata per impianto per anno", !string.IsNullOrEmpty(i.chprgann.ToString()) ? i.chprgann.ToString() : String.Empty); + // dic.Add("Importo manodopera", !string.IsNullOrEmpty(i.chimpman.ToString()) ? i.chimpman.ToString() : String.Empty); + // dic.Add("Percentuale manodopera", !string.IsNullOrEmpty(i.chperman.ToString()) ? i.chperman.ToString() : String.Empty); + // dic.Add("Stampa manodopera", !string.IsNullOrEmpty(i.chflstim) ? i.chflstim : String.Empty); + // dic.Add("Chiusura da remoto", !string.IsNullOrEmpty(i.chfleste) ? i.chfleste : String.Empty); + // dic.Add("Riferimento seriale importazione", !string.IsNullOrEmpty(i.chserext) ? i.chserext : String.Empty); + // dic.Add("Descrizione impianto", !string.IsNullOrEmpty(i.imdescri) ? i.imdescri : String.Empty); + // dic.Add("Tipo impianto", !string.IsNullOrEmpty(i.imtipoim) ? i.imtipoim : String.Empty); + // dic.Add("Matricola impianto ", !string.IsNullOrEmpty(i.immatric) ? i.immatric : String.Empty); + // dic.Add("Numero impianto ", !string.IsNullOrEmpty(i.imnumimp) ? i.imnumimp : String.Empty); + // dic.Add("Ultimo amministratore ", !string.IsNullOrEmpty(i.imultamm) ? i.imultamm : String.Empty); + // dic.Add("Desc Ultimo amministratore ", !string.IsNullOrEmpty(i.imultdam) ? i.imultdam : String.Empty); + // dic.Add("Telefono Ult. Amministratore", !string.IsNullOrEmpty(i.imulttam) ? i.imulttam : String.Empty); + + + // dic.Add("Ubicazione impianto", !string.IsNullOrEmpty(i.imubicaz) ? i.imubicaz : String.Empty); + // dic.Add("Zona manutenzione", !string.IsNullOrEmpty(i.imzonman) ? i.imzonman : String.Empty); + // dic.Add("Pubblico/privato", !string.IsNullOrEmpty(i.imflpupr) ? i.imflpupr : String.Empty); + // dic.Add("Zona chiamate", !string.IsNullOrEmpty(i.imzonchi) ? i.imzonchi : String.Empty); + // dic.Add("Zona supervisione", !string.IsNullOrEmpty(i.imzonsup) ? i.imzonsup : String.Empty); + // dic.Add("Data inizio manutenzione", i.imdainma != null ? i.imdainma.ToString() : String.Empty); + // dic.Add("Data fine manutenzione", !string.IsNullOrEmpty(i.imdafima.ToString()) ? i.imdafima.ToString() : String.Empty); + // dic.Add("Data costruzione", !string.IsNullOrEmpty(i.imdatcos.ToString()) ? i.imdatcos.ToString() : String.Empty); + // dic.Add("Numero telesoccorso ", !string.IsNullOrEmpty(i.imteleso) ? i.imteleso : String.Empty); + // dic.Add("Email cliente", !string.IsNullOrEmpty(i.an_email) ? i.an_email : String.Empty); + // dic.Add("Ultimo cliente", !string.IsNullOrEmpty(i.an_email) ? i.an_email : String.Empty); + // dic.Add("Codice cliente", !string.IsNullOrEmpty(i.ancodice) ? i.ancodice : String.Empty); + // dic.Add("Tipo anagrafica", !string.IsNullOrEmpty(i.antipcon) ? i.antipcon : String.Empty); + // #endregion + // break; + // case Clienti.Sicilia: + // #region sicilia + // dic.Add("Esercizio", !string.IsNullOrEmpty(i.chcodese) ? i.chcodese : String.Empty); + // dic.Add("Tipo", !string.IsNullOrEmpty(i.chtipo) ? i.chtipo : String.Empty); + // dic.Add("Numero chiamata", !string.IsNullOrEmpty( i.chnumero.ToString()) ? i.chnumero.ToString() : String.Empty); + // dic.Add("Data chiamata", !string.IsNullOrEmpty(i.chdata.ToString()) ? i.chdata.ToString() : String.Empty); + // dic.Add("Ora inserimento chiamata", !string.IsNullOrEmpty(i.chora.ToString()) ? i.chora.ToString() : String.Empty); + // dic.Add("Min inserimento chiamata", !string.IsNullOrEmpty(i.chmin.ToString()) ? i.chmin.ToString() : String.Empty); + // dic.Add("Operatore assegnazione", !string.IsNullOrEmpty(i.chopass.ToString()) ? i.chopass.ToString() : String.Empty); + // dic.Add("Operatore chiusura", !string.IsNullOrEmpty(i.chopchi.ToString()) ? i.chopchi.ToString() : String.Empty); + // dic.Add("Azienda impianto", !string.IsNullOrEmpty(i.chaziimp) ? i.chaziimp : String.Empty); + // dic.Add("Ora appuntamento fine", !string.IsNullOrEmpty(i.choraapf.ToString()) ? i.choraapf.ToString() : String.Empty); + // dic.Add("Min appuntamento fine", !string.IsNullOrEmpty(i.chminapf.ToString()) ? i.chminapf.ToString() : String.Empty); + // dic.Add("Riferimento chiamata", !string.IsNullOrEmpty(i.chrifer) ? i.chrifer : String.Empty); + // dic.Add("Riferimento telefono", !string.IsNullOrEmpty(i.chtelef) ? i.chtelef : String.Empty); + // dic.Add("Codice segnalazione", !string.IsNullOrEmpty(i.chcodseg) ? i.chcodseg : String.Empty); + // dic.Add("Fermo impianto", !string.IsNullOrEmpty(i.chstopi) ? i.chstopi : String.Empty); + // dic.Add("Data assegnazione chiamata", !string.IsNullOrEmpty(i.chdtass.ToString()) ? i.chdtass.ToString() : String.Empty); + // dic.Add("Ora assegnazione chiamata", !string.IsNullOrEmpty(i.chorass.ToString()) ? i.chorass.ToString() : String.Empty); + // dic.Add("Min assegnazione chiamata", !string.IsNullOrEmpty(i.chminass.ToString()) ? i.chminass.ToString() : String.Empty); + // dic.Add("Data chiusura chiamata", !string.IsNullOrEmpty(i.chdtchi.ToString()) ? i.chdtchi.ToString() : String.Empty); + // dic.Add("Ora chiusura chiamata", !string.IsNullOrEmpty(i.chorachi.ToString()) ? i.chorachi.ToString() : String.Empty); + // dic.Add("Min chiusura chiamata", !string.IsNullOrEmpty(i.chminchi.ToString()) ? i.chminchi.ToString() : String.Empty); + // dic.Add("Data inizio intervento", !string.IsNullOrEmpty(i.chdtlin.ToString()) ? i.chdtlin.ToString() : String.Empty); + // dic.Add("Ora inizio intervento", !string.IsNullOrEmpty(i.chorali.ToString()) ? i.chorali.ToString() : String.Empty); + // dic.Add("Min inizio intervento", !string.IsNullOrEmpty(i.chminli.ToString()) ? i.chminli.ToString() : String.Empty); + // dic.Add("Data fine intervento", !string.IsNullOrEmpty(i.chdtlfi.ToString()) ? i.chdtlfi.ToString() : String.Empty); + + // dic.Add("Ora fine intervento", !string.IsNullOrEmpty(i.choralf.ToString()) ? i.choralf.ToString() : String.Empty); + // dic.Add("Min fine intervento", !string.IsNullOrEmpty(i.chminlf.ToString()) ? i.chminlf.ToString() : String.Empty); + // dic.Add("Numero 1 rapportino futuro", !string.IsNullOrEmpty(i.chnrap1.ToString()) ? i.chnrap1.ToString() : String.Empty); + // dic.Add("Serie 1 rapportino futuro", !string.IsNullOrEmpty(i.chsrap1) ? i.chsrap1 : String.Empty); + // dic.Add("Numero 2 rapportino futuro", !string.IsNullOrEmpty(i.chnrap2.ToString()) ? i.chnrap2.ToString() : String.Empty); + // dic.Add("Modalità raccolta chiamata", !string.IsNullOrEmpty(i.chmodrac) ? i.chmodrac : String.Empty); + // dic.Add("Numero chiamata per impianto per anno", !string.IsNullOrEmpty(i.chprgann.ToString()) ? i.chprgann.ToString() : String.Empty); + // dic.Add("Importo manodopera", !string.IsNullOrEmpty(i.chimpman.ToString()) ? i.chimpman.ToString() : String.Empty); + // dic.Add("Percentuale manodopera", !string.IsNullOrEmpty(i.chperman.ToString()) ? i.chperman.ToString() : String.Empty); + // dic.Add("Stampa manodopera", !string.IsNullOrEmpty(i.chflstim) ? i.chflstim : String.Empty); + // dic.Add("Chiusura da remoto", !string.IsNullOrEmpty(i.chfleste) ? i.chfleste : String.Empty); + // dic.Add("Riferimento seriale importazione", !string.IsNullOrEmpty(i.chserext) ? i.chserext : String.Empty); + // dic.Add("Descrizione impianto", !string.IsNullOrEmpty(i.imdescri) ? i.imdescri : String.Empty); + // dic.Add("Tipo impianto", !string.IsNullOrEmpty(i.imtipoim) ? i.imtipoim : String.Empty); + // dic.Add("Matricola impianto ", !string.IsNullOrEmpty(i.immatric) ? i.immatric : String.Empty); + // dic.Add("Numero impianto ", !string.IsNullOrEmpty(i.imnumimp) ? i.imnumimp : String.Empty); + // dic.Add("Ultimo amministratore ", !string.IsNullOrEmpty(i.imultamm) ? i.imultamm : String.Empty); + // dic.Add("Desc Ultimo amministratore ", !string.IsNullOrEmpty(i.imultdam) ? i.imultdam : String.Empty); + // dic.Add("Telefono Ult. Amministratore", !string.IsNullOrEmpty(i.imulttam) ? i.imulttam : String.Empty); + + + // dic.Add("Ubicazione impianto", !string.IsNullOrEmpty(i.imubicaz) ? i.imubicaz : String.Empty); + // dic.Add("Zona manutenzione", !string.IsNullOrEmpty(i.imzonman) ? i.imzonman : String.Empty); + // dic.Add("Pubblico/privato", !string.IsNullOrEmpty(i.imflpupr) ? i.imflpupr : String.Empty); + // dic.Add("Zona chiamate", !string.IsNullOrEmpty(i.imzonchi) ? i.imzonchi : String.Empty); + // dic.Add("Zona supervisione", !string.IsNullOrEmpty(i.imzonsup) ? i.imzonsup : String.Empty); + // dic.Add("Data inizio manutenzione", i.imdainma !=null ? i.imdainma.ToString() : String.Empty); + // dic.Add("Data fine manutenzione", !string.IsNullOrEmpty(i.imdafima.ToString()) ? i.imdafima.ToString() : String.Empty); + // dic.Add("Data costruzione", !string.IsNullOrEmpty(i.imdatcos.ToString()) ? i.imdatcos.ToString() : String.Empty); + // dic.Add("Numero telesoccorso ", !string.IsNullOrEmpty(i.imteleso) ? i.imteleso : String.Empty); + // dic.Add("Email cliente", !string.IsNullOrEmpty(i.an_email) ? i.an_email : String.Empty); + // dic.Add("Ultimo cliente", !string.IsNullOrEmpty(i.an_email) ? i.an_email : String.Empty); + // dic.Add("Codice cliente", !string.IsNullOrEmpty(i.ancodice) ? i.ancodice : String.Empty); + // dic.Add("Tipo anagrafica", !string.IsNullOrEmpty(i.antipcon) ? i.antipcon : String.Empty); + // #endregion + + // break; + // case Clienti.Discovery: + // #region discovery + // dic.Add("Esercizio", !string.IsNullOrEmpty(i.chcodese) ? i.chcodese : String.Empty); + // dic.Add("Tipo", !string.IsNullOrEmpty(i.chtipo) ? i.chtipo : String.Empty); + // dic.Add("Numero chiamata", !string.IsNullOrEmpty(i.chnumero.ToString()) ? i.chnumero.ToString() : String.Empty); + // dic.Add("Data chiamata", !string.IsNullOrEmpty(i.chdata.ToString()) ? i.chdata.ToString() : String.Empty); + // dic.Add("Ora inserimento chiamata", !string.IsNullOrEmpty(i.chora.ToString()) ? i.chora.ToString() : String.Empty); + // dic.Add("Min inserimento chiamata", !string.IsNullOrEmpty(i.chmin.ToString()) ? i.chmin.ToString() : String.Empty); + // dic.Add("Operatore assegnazione", !string.IsNullOrEmpty(i.chopass.ToString()) ? i.chopass.ToString() : String.Empty); + // dic.Add("Operatore chiusura", !string.IsNullOrEmpty(i.chopchi.ToString()) ? i.chopchi.ToString() : String.Empty); + // dic.Add("Azienda impianto", !string.IsNullOrEmpty(i.chaziimp) ? i.chaziimp : String.Empty); + // dic.Add("Ora appuntamento fine", !string.IsNullOrEmpty(i.choraapf.ToString()) ? i.choraapf.ToString() : String.Empty); + // dic.Add("Min appuntamento fine", !string.IsNullOrEmpty(i.chminapf.ToString()) ? i.chminapf.ToString() : String.Empty); + // dic.Add("Riferimento chiamata", !string.IsNullOrEmpty(i.chrifer) ? i.chrifer : String.Empty); + // dic.Add("Riferimento telefono", !string.IsNullOrEmpty(i.chtelef) ? i.chtelef : String.Empty); + // dic.Add("Codice segnalazione", !string.IsNullOrEmpty(i.chcodseg) ? i.chcodseg : String.Empty); + // dic.Add("Fermo impianto", !string.IsNullOrEmpty(i.chstopi) ? i.chstopi : String.Empty); + // dic.Add("Data assegnazione chiamata", !string.IsNullOrEmpty(i.chdtass.ToString()) ? i.chdtass.ToString() : String.Empty); + // dic.Add("Ora assegnazione chiamata", !string.IsNullOrEmpty(i.chorass.ToString()) ? i.chorass.ToString() : String.Empty); + // dic.Add("Min assegnazione chiamata", !string.IsNullOrEmpty(i.chminass.ToString()) ? i.chminass.ToString() : String.Empty); + // dic.Add("Data chiusura chiamata", !string.IsNullOrEmpty(i.chdtchi.ToString()) ? i.chdtchi.ToString() : String.Empty); + // dic.Add("Ora chiusura chiamata", !string.IsNullOrEmpty(i.chorachi.ToString()) ? i.chorachi.ToString() : String.Empty); + // dic.Add("Min chiusura chiamata", !string.IsNullOrEmpty(i.chminchi.ToString()) ? i.chminchi.ToString() : String.Empty); + // dic.Add("Data inizio intervento", !string.IsNullOrEmpty(i.chdtlin.ToString()) ? i.chdtlin.ToString() : String.Empty); + // dic.Add("Ora inizio intervento", !string.IsNullOrEmpty(i.chorali.ToString()) ? i.chorali.ToString() : String.Empty); + // dic.Add("Min inizio intervento", !string.IsNullOrEmpty(i.chminli.ToString()) ? i.chminli.ToString() : String.Empty); + // dic.Add("Data fine intervento", !string.IsNullOrEmpty(i.chdtlfi.ToString()) ? i.chdtlfi.ToString() : String.Empty); + + // dic.Add("Ora fine intervento", !string.IsNullOrEmpty(i.choralf.ToString()) ? i.choralf.ToString() : String.Empty); + // dic.Add("Min fine intervento", !string.IsNullOrEmpty(i.chminlf.ToString()) ? i.chminlf.ToString() : String.Empty); + // dic.Add("Numero 1 rapportino futuro", !string.IsNullOrEmpty(i.chnrap1.ToString()) ? i.chnrap1.ToString() : String.Empty); + // dic.Add("Serie 1 rapportino futuro", !string.IsNullOrEmpty(i.chsrap1) ? i.chsrap1 : String.Empty); + // dic.Add("Numero 2 rapportino futuro", !string.IsNullOrEmpty(i.chnrap2.ToString()) ? i.chnrap2.ToString() : String.Empty); + // dic.Add("Modalità raccolta chiamata", !string.IsNullOrEmpty(i.chmodrac) ? i.chmodrac : String.Empty); + // dic.Add("Numero chiamata per impianto per anno", !string.IsNullOrEmpty(i.chprgann.ToString()) ? i.chprgann.ToString() : String.Empty); + // dic.Add("Importo manodopera", !string.IsNullOrEmpty(i.chimpman.ToString()) ? i.chimpman.ToString() : String.Empty); + // dic.Add("Percentuale manodopera", !string.IsNullOrEmpty(i.chperman.ToString()) ? i.chperman.ToString() : String.Empty); + // dic.Add("Stampa manodopera", !string.IsNullOrEmpty(i.chflstim) ? i.chflstim : String.Empty); + // dic.Add("Chiusura da remoto", !string.IsNullOrEmpty(i.chfleste) ? i.chfleste : String.Empty); + // dic.Add("Riferimento seriale importazione", !string.IsNullOrEmpty(i.chserext) ? i.chserext : String.Empty); + // dic.Add("Descrizione impianto", !string.IsNullOrEmpty(i.imdescri) ? i.imdescri : String.Empty); + // dic.Add("Tipo impianto", !string.IsNullOrEmpty(i.imtipoim) ? i.imtipoim : String.Empty); + // dic.Add("Matricola impianto ", !string.IsNullOrEmpty(i.immatric) ? i.immatric : String.Empty); + // dic.Add("Numero impianto ", !string.IsNullOrEmpty(i.imnumimp) ? i.imnumimp : String.Empty); + // dic.Add("Ultimo amministratore ", !string.IsNullOrEmpty(i.imultamm) ? i.imultamm : String.Empty); + // dic.Add("Desc Ultimo amministratore ", !string.IsNullOrEmpty(i.imultdam) ? i.imultdam : String.Empty); + // dic.Add("Telefono Ult. Amministratore", !string.IsNullOrEmpty(i.imulttam) ? i.imulttam : String.Empty); + + + // dic.Add("Ubicazione impianto", !string.IsNullOrEmpty(i.imubicaz) ? i.imubicaz : String.Empty); + // dic.Add("Zona manutenzione", !string.IsNullOrEmpty(i.imzonman) ? i.imzonman : String.Empty); + // dic.Add("Pubblico/privato", !string.IsNullOrEmpty(i.imflpupr) ? i.imflpupr : String.Empty); + // dic.Add("Zona chiamate", !string.IsNullOrEmpty(i.imzonchi) ? i.imzonchi : String.Empty); + // dic.Add("Zona supervisione", !string.IsNullOrEmpty(i.imzonsup) ? i.imzonsup : String.Empty); + // dic.Add("Data inizio manutenzione", i.imdainma != null ? i.imdainma.ToString() : String.Empty); + // dic.Add("Data fine manutenzione", !string.IsNullOrEmpty(i.imdafima.ToString()) ? i.imdafima.ToString() : String.Empty); + // dic.Add("Data costruzione", !string.IsNullOrEmpty(i.imdatcos.ToString()) ? i.imdatcos.ToString() : String.Empty); + // dic.Add("Numero telesoccorso ", !string.IsNullOrEmpty(i.imteleso) ? i.imteleso : String.Empty); + // dic.Add("Email cliente", !string.IsNullOrEmpty(i.an_email) ? i.an_email : String.Empty); + // dic.Add("Ultimo cliente", !string.IsNullOrEmpty(i.an_email) ? i.an_email : String.Empty); + // dic.Add("Codice cliente", !string.IsNullOrEmpty(i.ancodice) ? i.ancodice : String.Empty); + // dic.Add("Tipo anagrafica", !string.IsNullOrEmpty(i.antipcon) ? i.antipcon : String.Empty); + // #endregion + // break; + + // case Clienti.Sarom: + // #region Sarom + // dic.Add("Esercizio", !string.IsNullOrEmpty(i.chcodese) ? i.chcodese : String.Empty); + // dic.Add("Tipo", !string.IsNullOrEmpty(i.chtipo) ? i.chtipo : String.Empty); + // dic.Add("Numero chiamata", !string.IsNullOrEmpty(i.chnumero.ToString()) ? i.chnumero.ToString() : String.Empty); + // dic.Add("Data chiamata", !string.IsNullOrEmpty(i.chdata.ToString()) ? i.chdata.ToString() : String.Empty); + // dic.Add("Ora inserimento chiamata", !string.IsNullOrEmpty(i.chora.ToString()) ? i.chora.ToString() : String.Empty); + // dic.Add("Min inserimento chiamata", !string.IsNullOrEmpty(i.chmin.ToString()) ? i.chmin.ToString() : String.Empty); + // dic.Add("Operatore assegnazione", !string.IsNullOrEmpty(i.chopass.ToString()) ? i.chopass.ToString() : String.Empty); + // dic.Add("Operatore chiusura", !string.IsNullOrEmpty(i.chopchi.ToString()) ? i.chopchi.ToString() : String.Empty); + // dic.Add("Azienda impianto", !string.IsNullOrEmpty(i.chaziimp) ? i.chaziimp : String.Empty); + // dic.Add("Ora appuntamento fine", !string.IsNullOrEmpty(i.choraapf.ToString()) ? i.choraapf.ToString() : String.Empty); + // dic.Add("Min appuntamento fine", !string.IsNullOrEmpty(i.chminapf.ToString()) ? i.chminapf.ToString() : String.Empty); + // dic.Add("Riferimento chiamata", !string.IsNullOrEmpty(i.chrifer) ? i.chrifer : String.Empty); + // dic.Add("Riferimento telefono", !string.IsNullOrEmpty(i.chtelef) ? i.chtelef : String.Empty); + // dic.Add("Codice segnalazione", !string.IsNullOrEmpty(i.chcodseg) ? i.chcodseg : String.Empty); + // dic.Add("Fermo impianto", !string.IsNullOrEmpty(i.chstopi) ? i.chstopi : String.Empty); + // dic.Add("Data assegnazione chiamata", !string.IsNullOrEmpty(i.chdtass.ToString()) ? i.chdtass.ToString() : String.Empty); + // dic.Add("Ora assegnazione chiamata", !string.IsNullOrEmpty(i.chorass.ToString()) ? i.chorass.ToString() : String.Empty); + // dic.Add("Min assegnazione chiamata", !string.IsNullOrEmpty(i.chminass.ToString()) ? i.chminass.ToString() : String.Empty); + // dic.Add("Data chiusura chiamata", !string.IsNullOrEmpty(i.chdtchi.ToString()) ? i.chdtchi.ToString() : String.Empty); + // dic.Add("Ora chiusura chiamata", !string.IsNullOrEmpty(i.chorachi.ToString()) ? i.chorachi.ToString() : String.Empty); + // dic.Add("Min chiusura chiamata", !string.IsNullOrEmpty(i.chminchi.ToString()) ? i.chminchi.ToString() : String.Empty); + // dic.Add("Data inizio intervento", !string.IsNullOrEmpty(i.chdtlin.ToString()) ? i.chdtlin.ToString() : String.Empty); + // dic.Add("Ora inizio intervento", !string.IsNullOrEmpty(i.chorali.ToString()) ? i.chorali.ToString() : String.Empty); + // dic.Add("Min inizio intervento", !string.IsNullOrEmpty(i.chminli.ToString()) ? i.chminli.ToString() : String.Empty); + // dic.Add("Data fine intervento", !string.IsNullOrEmpty(i.chdtlfi.ToString()) ? i.chdtlfi.ToString() : String.Empty); + + // dic.Add("Ora fine intervento", !string.IsNullOrEmpty(i.choralf.ToString()) ? i.choralf.ToString() : String.Empty); + // dic.Add("Min fine intervento", !string.IsNullOrEmpty(i.chminlf.ToString()) ? i.chminlf.ToString() : String.Empty); + // dic.Add("Numero 1 rapportino futuro", !string.IsNullOrEmpty(i.chnrap1.ToString()) ? i.chnrap1.ToString() : String.Empty); + // dic.Add("Serie 1 rapportino futuro", !string.IsNullOrEmpty(i.chsrap1) ? i.chsrap1 : String.Empty); + // dic.Add("Numero 2 rapportino futuro", !string.IsNullOrEmpty(i.chnrap2.ToString()) ? i.chnrap2.ToString() : String.Empty); + // dic.Add("Modalità raccolta chiamata", !string.IsNullOrEmpty(i.chmodrac) ? i.chmodrac : String.Empty); + // dic.Add("Numero chiamata per impianto per anno", !string.IsNullOrEmpty(i.chprgann.ToString()) ? i.chprgann.ToString() : String.Empty); + // dic.Add("Importo manodopera", !string.IsNullOrEmpty(i.chimpman.ToString()) ? i.chimpman.ToString() : String.Empty); + // dic.Add("Percentuale manodopera", !string.IsNullOrEmpty(i.chperman.ToString()) ? i.chperman.ToString() : String.Empty); + // dic.Add("Stampa manodopera", !string.IsNullOrEmpty(i.chflstim) ? i.chflstim : String.Empty); + // dic.Add("Chiusura da remoto", !string.IsNullOrEmpty(i.chfleste) ? i.chfleste : String.Empty); + // dic.Add("Riferimento seriale importazione", !string.IsNullOrEmpty(i.chserext) ? i.chserext : String.Empty); + // dic.Add("Descrizione impianto", !string.IsNullOrEmpty(i.imdescri) ? i.imdescri : String.Empty); + // dic.Add("Tipo impianto", !string.IsNullOrEmpty(i.imtipoim) ? i.imtipoim : String.Empty); + // dic.Add("Matricola impianto ", !string.IsNullOrEmpty(i.immatric) ? i.immatric : String.Empty); + // dic.Add("Numero impianto ", !string.IsNullOrEmpty(i.imnumimp) ? i.imnumimp : String.Empty); + // dic.Add("Ultimo amministratore ", !string.IsNullOrEmpty(i.imultamm) ? i.imultamm : String.Empty); + // dic.Add("Desc Ultimo amministratore ", !string.IsNullOrEmpty(i.imultdam) ? i.imultdam : String.Empty); + // dic.Add("Telefono Ult. Amministratore", !string.IsNullOrEmpty(i.imulttam) ? i.imulttam : String.Empty); + + + // dic.Add("Ubicazione impianto", !string.IsNullOrEmpty(i.imubicaz) ? i.imubicaz : String.Empty); + // dic.Add("Zona manutenzione", !string.IsNullOrEmpty(i.imzonman) ? i.imzonman : String.Empty); + // dic.Add("Pubblico/privato", !string.IsNullOrEmpty(i.imflpupr) ? i.imflpupr : String.Empty); + // dic.Add("Zona chiamate", !string.IsNullOrEmpty(i.imzonchi) ? i.imzonchi : String.Empty); + // dic.Add("Zona supervisione", !string.IsNullOrEmpty(i.imzonsup) ? i.imzonsup : String.Empty); + // dic.Add("Data inizio manutenzione", i.imdainma != null ? i.imdainma.ToString() : String.Empty); + // dic.Add("Data fine manutenzione", !string.IsNullOrEmpty(i.imdafima.ToString()) ? i.imdafima.ToString() : String.Empty); + // dic.Add("Data costruzione", !string.IsNullOrEmpty(i.imdatcos.ToString()) ? i.imdatcos.ToString() : String.Empty); + // dic.Add("Numero telesoccorso ", !string.IsNullOrEmpty(i.imteleso) ? i.imteleso : String.Empty); + // dic.Add("Email cliente", !string.IsNullOrEmpty(i.an_email) ? i.an_email : String.Empty); + // dic.Add("Ultimo cliente", !string.IsNullOrEmpty(i.an_email) ? i.an_email : String.Empty); + // dic.Add("Codice cliente", !string.IsNullOrEmpty(i.ancodice) ? i.ancodice : String.Empty); + // dic.Add("Tipo anagrafica", !string.IsNullOrEmpty(i.antipcon) ? i.antipcon : String.Empty); + // #endregion + // break; + + // default: + + // break; + //} + + o.altri = dic; + + o.imazirif = i.imazirif; + o.imrefref = i.imrefref; + return o; + } + private Chiamate_out fillChiamateOutVT(Chiamate i, string tenant) + { + Chiamate_out o = new Chiamate_out(); + o.chcodazi = i.chcodazi; + o.chserial = i.chserial; + o.chstato = i.chstato; + o.chtchiam = i.chtchiam; + + o.chdtapp = i.chdtapp; + o.choraaPI = i.choraaPI; + o.chminapi = i.chminapi; + o.chnote = i.chnote; + + o.chcodimp = i.chcodimp; + o.csdescr = i.csdescr; + o.antelefo = i.antelefo; + o.andescri = i.andescri; + o.imindiri1 = i.imindiri1; + + o.imindiri2 = i.imindiri2; + o.imindiri3 = i.imindiri3; + o.imindiri4 = i.imindiri4; + o.imindiri5 = i.imindiri5; + o.imlocali = i.imlocali; + o.imrefref = i.imrefref; + //costruisco il campo indirizzo + StringBuilder sb = new StringBuilder(); + + string chiamataIndStampa = string.Empty; + sb.Append("SPETT.LE :"); + if (!string.IsNullOrEmpty(i.andescri)) + { + sb.Append(!string.IsNullOrEmpty(i.andescri) ? i.andescri.Trim() + " " : string.Empty); + sb.Append("
"); + } + + sb.Append(!string.IsNullOrEmpty(i.imindiri1) ? i.imindiri1.Trim() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imindiri2) ? i.imindiri2.Trim() + " " : string.Empty); + sb.Append(i.imindiri3 != null ? i.imindiri3.ToString() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imindiri4) ? i.imindiri4.Trim() + " " : string.Empty); + sb.Append(!string.IsNullOrEmpty(i.imindiri5) ? i.imindiri5.Trim() : string.Empty); + chiamataIndStampa = sb.ToString(); + + //switch (tenant) + //{ + // case Clienti.Marrocco: + // #region marrocco + // chiamataIndStampa = formattaIndirizzoStampaMarrocco(i); + // #endregion + // break; + // case Clienti.Gitoga: + // #region gitoga + // chiamataIndStampa = formattaIndirizzoStampaMarrocco(i); + // #endregion + // break; + // case Clienti.Lifta: + // #region lifta + // chiamataIndStampa = formattaIndirizzoStampaMarrocco(i); + // #endregion + // break; + // case Clienti.Discovery: + // #region Discovery + // chiamataIndStampa = formattaIndirizzoStampaDiscovery(i); + // #endregion + // break; + // case Clienti.Siet: + // //ragione sociale cliente + // sb.Append("SPETT.LE :"); + // sb.Append(!string.IsNullOrEmpty(i.andescri) ? i.andescri + " " : string.Empty); + // sb.Append("
"); + // //indirizzo + // sb.Append(!string.IsNullOrEmpty(i.imindiri1) ? i.imindiri1.Trim() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(i.imindiri2) ? i.imindiri2.Trim() + " " : string.Empty); + // sb.Append(i.imindiri3 != null ? i.imindiri3.ToString() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(i.imindiri4) ? i.imindiri4.Trim() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(i.imindiri5) ? i.imindiri5.Trim() : string.Empty); + // chiamataIndStampa = sb.ToString(); + + // break; + // default: + // sb.Append("SPETT.LE :"); + // if (!string.IsNullOrEmpty(i.andescri)) + // { + // sb.Append(!string.IsNullOrEmpty(i.andescri) ? i.andescri + " " : string.Empty); + // sb.Append("
"); + // } + + // sb.Append(!string.IsNullOrEmpty(i.imindiri1) ? i.imindiri1.Trim() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(i.imindiri2) ? i.imindiri2.Trim() + " " : string.Empty); + // sb.Append(i.imindiri3 != null ? i.imindiri3.ToString() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(i.imindiri4) ? i.imindiri4.Trim() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(i.imindiri5) ? i.imindiri5.Trim() : string.Empty); + // chiamataIndStampa = sb.ToString(); + // break; + //} + + o.indirizzo_stampa = chiamataIndStampa; + sb.Clear(); + + string chiamataItemList = string.Empty; + //switch (tenant) + //{ + // case Clienti.Marrocco: + // #region marrocco + // chiamataItemList = formattaItemChiamateMarrocco(i); + // #endregion + // break; + // case Clienti.Gitoga: + // #region gitoga + // chiamataItemList = formattaItemChiamateMarrocco(i); + // #endregion + // break; + // case Clienti.Lifta: + // #region lifta + // chiamataItemList = formattaItemChiamateMarrocco(i); + // #endregion + // break; + // case Clienti.Tedesco: + // #region Tedesco + // chiamataItemList = formattaItemChiamateTedesco(i); + // #endregion + // break; + // case Clienti.VT: + // chiamataItemList = formattaItemChiamateVT(i); + // break; + // default: + // #region default + // sb.Append(!string.IsNullOrEmpty(i.imindiri1) ? i.imindiri1.Trim() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(i.imindiri2) ? i.imindiri2.Trim() + " " : string.Empty); + // sb.Append(i.imindiri3 != null ? i.imindiri3.ToString() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(i.imindiri4) ? i.imindiri4.Trim() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(i.imindiri5) ? i.imindiri5.Trim() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(i.imcodcap) ? " " + i.imcodcap.Trim() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(i.imlocali) ? " " + i.imlocali.Trim() + " " : string.Empty); + + // if (!string.IsNullOrEmpty(i.chcodimp)) + // { + // sb.Append("
"); + // sb.Append("Impianto : " + i.chcodimp.Trim()); + // } + // chiamataItemList = sb.ToString(); + // break; + // #endregion + //} + chiamataItemList = formattaItemChiamateVT(i); + o.impianto_list = chiamataItemList; + sb.Clear(); + + string rif_impianto = string.Empty; + //switch (tenant) + //{ + // case Clienti.Marrocco: + // #region marrocco + // rif_impianto = formattaRiferimentoImpiantoMarrocco(i); + // #endregion + // break; + // case Clienti.Gitoga: + // #region gitoga + // rif_impianto = formattaRiferimentoImpiantoMarrocco(i); + // #endregion + // break; + // case Clienti.Lifta: + // #region lifta + // rif_impianto = formattaRiferimentoImpiantoMarrocco(i); + // #endregion + // break; + // case Clienti.Discovery: + // #region discovery + // rif_impianto = formattaRiferimentoImpiantoDiscovery(i); + // #endregion + // break; + // case Clienti.Ferrari: + // #region ferrari + // rif_impianto = formattaRiferimentoImpiantoFerrari(i); + // #endregion + // break; + // case Clienti.Siet: + // #region SIET + // sb.AppendLine("N. Impianto: " + i.chcodimp); + // if (!string.IsNullOrEmpty(i.imubicaz)) + // { + // sb.AppendLine("Ubicazione: " + i.imubicaz); + // } + // if (!string.IsNullOrEmpty(i.chrifer)) + // { + // string comm = getCommessaSietBySerial(i.chrifer); + // if (!string.IsNullOrEmpty(comm)) + // { + // sb.AppendLine("Commessa: " + comm); + // } + + // } + + // rif_impianto = sb.ToString(); + // #endregion + // break; + // default: + // sb.AppendLine("N. Impianto: " + i.chcodimp); + // if (!string.IsNullOrEmpty(i.imubicaz)) + // sb.AppendLine("Ubicazione: " + i.imubicaz); + + // rif_impianto = sb.ToString(); + // break; + //} + + + //sb.AppendLine("N. Impianto: " + i.chcodimp); + if (!string.IsNullOrEmpty(i.imubicaz)) + sb.AppendLine("Ubicazione: " + i.imubicaz); + + rif_impianto = sb.ToString(); + + o.riferimento_impianto = rif_impianto; + sb.Clear(); + + o.imcodcap = i.imcodcap; + o.imcomune = i.imcomune; + o.improvin = i.improvin; + o.imcodnaz = i.imcodnaz; + + o.immatric = i.immatric; + o.imnumimp = i.imnumimp; + o.imubicaz = i.imubicaz; + + o.tcdescri = i.tcdescri; + + o.tccodice = i.tccodice; + o.ser_rapp_ic = i.ser_rapp_ic; + o.tipo_rapp_ic = i.tipo_rapp_ic; + o.ic = i.ic; + o.ser_rapp_rif = i.ser_rapp_rif; + + o.tipo_rapp_rif = i.tipo_rapp_rif; + o.rif = i.rif; + o.ser_rapp_chiu = i.ser_rapp_chiu; + o.tipo_rapp_chiu = i.tipo_rapp_chiu; + o.ser_buono_chiu = i.ser_buono_chiu; + + o.err_title = i.err_title; + o.err_detail = i.err_detail; + o.err_status_code = i.err_status_code; + o.ancodice = i.ancodice; + o.chiamata = i.chiamata; + o.spe_viaggio = i.spe_viaggio; + o.chnumero = i.chnumero; + + Dictionary dic = new Dictionary(); + //switch (tenant) + //{ + // case Clienti.Marrocco: + // #region marrocco + // dic.Add("Esercizio ", !string.IsNullOrEmpty(i.chcodese) ? i.chcodese : String.Empty); + // dic.Add("REF ", !string.IsNullOrEmpty(i.imrefref) ? i.imrefref : String.Empty); + // dic.Add("Riferimento:", !string.IsNullOrEmpty(i.chrifer) ? i.chrifer : String.Empty); + // dic.Add("Telefono rif.:", !string.IsNullOrEmpty(i.chtelef) ? i.chtelef : String.Empty); + + // #endregion + // break; + + // case Clienti.Gitoga: + // #region gitoga + // dic.Add("Esercizio ", !string.IsNullOrEmpty(i.chcodese) ? i.chcodese : String.Empty); + // dic.Add("REF ", !string.IsNullOrEmpty(i.imrefref) ? i.imrefref : String.Empty); + // dic.Add("Riferimento:", !string.IsNullOrEmpty(i.chrifer) ? i.chrifer : String.Empty); + // dic.Add("Telefono rif.:", !string.IsNullOrEmpty(i.chtelef) ? i.chtelef : String.Empty); + // #endregion + // break; + + // case Clienti.Lifta: + // #region lifta + // dic.Add("Esercizio ", !string.IsNullOrEmpty(i.chcodese) ? i.chcodese : String.Empty); + // dic.Add("REF ", !string.IsNullOrEmpty(i.imrefref) ? i.imrefref : String.Empty); + // dic.Add("Riferimento:", !string.IsNullOrEmpty(i.chrifer) ? i.chrifer : String.Empty); + // dic.Add("Telefono rif.:", !string.IsNullOrEmpty(i.chtelef) ? i.chtelef : String.Empty); + // #endregion + // break; + + // case Clienti.Ferrari: + // #region ferrari + // dic.Add("Esercizio", !string.IsNullOrEmpty(i.chcodese) ? i.chcodese : String.Empty); + // dic.Add("Tipo", !string.IsNullOrEmpty(i.chtipo) ? i.chtipo : String.Empty); + // dic.Add("Numero chiamata", !string.IsNullOrEmpty(i.chnumero.ToString()) ? i.chnumero.ToString() : String.Empty); + // dic.Add("Data chiamata", !string.IsNullOrEmpty(i.chdata.ToString()) ? i.chdata.ToString() : String.Empty); + // dic.Add("Ora inserimento chiamata", !string.IsNullOrEmpty(i.chora.ToString()) ? i.chora.ToString() : String.Empty); + // dic.Add("Min inserimento chiamata", !string.IsNullOrEmpty(i.chmin.ToString()) ? i.chmin.ToString() : String.Empty); + // dic.Add("Operatore assegnazione", !string.IsNullOrEmpty(i.chopass.ToString()) ? i.chopass.ToString() : String.Empty); + // dic.Add("Operatore chiusura", !string.IsNullOrEmpty(i.chopchi.ToString()) ? i.chopchi.ToString() : String.Empty); + // dic.Add("Azienda impianto", !string.IsNullOrEmpty(i.chaziimp) ? i.chaziimp : String.Empty); + // dic.Add("Ora appuntamento fine", !string.IsNullOrEmpty(i.choraapf.ToString()) ? i.choraapf.ToString() : String.Empty); + // dic.Add("Min appuntamento fine", !string.IsNullOrEmpty(i.chminapf.ToString()) ? i.chminapf.ToString() : String.Empty); + // dic.Add("Riferimento chiamata", !string.IsNullOrEmpty(i.chrifer) ? i.chrifer : String.Empty); + // dic.Add("Riferimento telefono", !string.IsNullOrEmpty(i.chtelef) ? i.chtelef : String.Empty); + // dic.Add("Codice segnalazione", !string.IsNullOrEmpty(i.chcodseg) ? i.chcodseg : String.Empty); + // dic.Add("Fermo impianto", !string.IsNullOrEmpty(i.chstopi) ? i.chstopi : String.Empty); + // dic.Add("Data assegnazione chiamata", !string.IsNullOrEmpty(i.chdtass.ToString()) ? i.chdtass.ToString() : String.Empty); + // dic.Add("Ora assegnazione chiamata", !string.IsNullOrEmpty(i.chorass.ToString()) ? i.chorass.ToString() : String.Empty); + // dic.Add("Min assegnazione chiamata", !string.IsNullOrEmpty(i.chminass.ToString()) ? i.chminass.ToString() : String.Empty); + // dic.Add("Data chiusura chiamata", !string.IsNullOrEmpty(i.chdtchi.ToString()) ? i.chdtchi.ToString() : String.Empty); + // dic.Add("Ora chiusura chiamata", !string.IsNullOrEmpty(i.chorachi.ToString()) ? i.chorachi.ToString() : String.Empty); + // dic.Add("Min chiusura chiamata", !string.IsNullOrEmpty(i.chminchi.ToString()) ? i.chminchi.ToString() : String.Empty); + // dic.Add("Data inizio intervento", !string.IsNullOrEmpty(i.chdtlin.ToString()) ? i.chdtlin.ToString() : String.Empty); + // dic.Add("Ora inizio intervento", !string.IsNullOrEmpty(i.chorali.ToString()) ? i.chorali.ToString() : String.Empty); + // dic.Add("Min inizio intervento", !string.IsNullOrEmpty(i.chminli.ToString()) ? i.chminli.ToString() : String.Empty); + // dic.Add("Data fine intervento", !string.IsNullOrEmpty(i.chdtlfi.ToString()) ? i.chdtlfi.ToString() : String.Empty); + + // dic.Add("Ora fine intervento", !string.IsNullOrEmpty(i.choralf.ToString()) ? i.choralf.ToString() : String.Empty); + // dic.Add("Min fine intervento", !string.IsNullOrEmpty(i.chminlf.ToString()) ? i.chminlf.ToString() : String.Empty); + // dic.Add("Numero 1 rapportino futuro", !string.IsNullOrEmpty(i.chnrap1.ToString()) ? i.chnrap1.ToString() : String.Empty); + // dic.Add("Serie 1 rapportino futuro", !string.IsNullOrEmpty(i.chsrap1) ? i.chsrap1 : String.Empty); + // dic.Add("Numero 2 rapportino futuro", !string.IsNullOrEmpty(i.chnrap2.ToString()) ? i.chnrap2.ToString() : String.Empty); + // dic.Add("Modalità raccolta chiamata", !string.IsNullOrEmpty(i.chmodrac) ? i.chmodrac : String.Empty); + // dic.Add("Numero chiamata per impianto per anno", !string.IsNullOrEmpty(i.chprgann.ToString()) ? i.chprgann.ToString() : String.Empty); + // dic.Add("Importo manodopera", !string.IsNullOrEmpty(i.chimpman.ToString()) ? i.chimpman.ToString() : String.Empty); + // dic.Add("Percentuale manodopera", !string.IsNullOrEmpty(i.chperman.ToString()) ? i.chperman.ToString() : String.Empty); + // dic.Add("Stampa manodopera", !string.IsNullOrEmpty(i.chflstim) ? i.chflstim : String.Empty); + // dic.Add("Chiusura da remoto", !string.IsNullOrEmpty(i.chfleste) ? i.chfleste : String.Empty); + // dic.Add("Riferimento seriale importazione", !string.IsNullOrEmpty(i.chserext) ? i.chserext : String.Empty); + // dic.Add("Descrizione impianto", !string.IsNullOrEmpty(i.imdescri) ? i.imdescri : String.Empty); + // dic.Add("Tipo impianto", !string.IsNullOrEmpty(i.imtipoim) ? i.imtipoim : String.Empty); + // dic.Add("Matricola impianto ", !string.IsNullOrEmpty(i.immatric) ? i.immatric : String.Empty); + // dic.Add("Numero impianto ", !string.IsNullOrEmpty(i.imnumimp) ? i.imnumimp : String.Empty); + // dic.Add("Ultimo amministratore ", !string.IsNullOrEmpty(i.imultamm) ? i.imultamm : String.Empty); + // dic.Add("Desc Ultimo amministratore ", !string.IsNullOrEmpty(i.imultdam) ? i.imultdam : String.Empty); + // dic.Add("Telefono Ult. Amministratore", !string.IsNullOrEmpty(i.imulttam) ? i.imulttam : String.Empty); + + + // dic.Add("Ubicazione impianto", !string.IsNullOrEmpty(i.imubicaz) ? i.imubicaz : String.Empty); + // dic.Add("Zona manutenzione", !string.IsNullOrEmpty(i.imzonman) ? i.imzonman : String.Empty); + // dic.Add("Pubblico/privato", !string.IsNullOrEmpty(i.imflpupr) ? i.imflpupr : String.Empty); + // dic.Add("Zona chiamate", !string.IsNullOrEmpty(i.imzonchi) ? i.imzonchi : String.Empty); + // dic.Add("Zona supervisione", !string.IsNullOrEmpty(i.imzonsup) ? i.imzonsup : String.Empty); + // dic.Add("Data inizio manutenzione", i.imdainma != null ? i.imdainma.ToString() : String.Empty); + // dic.Add("Data fine manutenzione", !string.IsNullOrEmpty(i.imdafima.ToString()) ? i.imdafima.ToString() : String.Empty); + // dic.Add("Data costruzione", !string.IsNullOrEmpty(i.imdatcos.ToString()) ? i.imdatcos.ToString() : String.Empty); + // dic.Add("Numero telesoccorso ", !string.IsNullOrEmpty(i.imteleso) ? i.imteleso : String.Empty); + // dic.Add("Email cliente", !string.IsNullOrEmpty(i.an_email) ? i.an_email : String.Empty); + // dic.Add("Ultimo cliente", !string.IsNullOrEmpty(i.an_email) ? i.an_email : String.Empty); + // dic.Add("Codice cliente", !string.IsNullOrEmpty(i.ancodice) ? i.ancodice : String.Empty); + // dic.Add("Tipo anagrafica", !string.IsNullOrEmpty(i.antipcon) ? i.antipcon : String.Empty); + // #endregion + // break; + // case Clienti.Sicilia: + // #region sicilia + // dic.Add("Esercizio", !string.IsNullOrEmpty(i.chcodese) ? i.chcodese : String.Empty); + // dic.Add("Tipo", !string.IsNullOrEmpty(i.chtipo) ? i.chtipo : String.Empty); + // dic.Add("Numero chiamata", !string.IsNullOrEmpty(i.chnumero.ToString()) ? i.chnumero.ToString() : String.Empty); + // dic.Add("Data chiamata", !string.IsNullOrEmpty(i.chdata.ToString()) ? i.chdata.ToString() : String.Empty); + // dic.Add("Ora inserimento chiamata", !string.IsNullOrEmpty(i.chora.ToString()) ? i.chora.ToString() : String.Empty); + // dic.Add("Min inserimento chiamata", !string.IsNullOrEmpty(i.chmin.ToString()) ? i.chmin.ToString() : String.Empty); + // dic.Add("Operatore assegnazione", !string.IsNullOrEmpty(i.chopass.ToString()) ? i.chopass.ToString() : String.Empty); + // dic.Add("Operatore chiusura", !string.IsNullOrEmpty(i.chopchi.ToString()) ? i.chopchi.ToString() : String.Empty); + // dic.Add("Azienda impianto", !string.IsNullOrEmpty(i.chaziimp) ? i.chaziimp : String.Empty); + // dic.Add("Ora appuntamento fine", !string.IsNullOrEmpty(i.choraapf.ToString()) ? i.choraapf.ToString() : String.Empty); + // dic.Add("Min appuntamento fine", !string.IsNullOrEmpty(i.chminapf.ToString()) ? i.chminapf.ToString() : String.Empty); + // dic.Add("Riferimento chiamata", !string.IsNullOrEmpty(i.chrifer) ? i.chrifer : String.Empty); + // dic.Add("Riferimento telefono", !string.IsNullOrEmpty(i.chtelef) ? i.chtelef : String.Empty); + // dic.Add("Codice segnalazione", !string.IsNullOrEmpty(i.chcodseg) ? i.chcodseg : String.Empty); + // dic.Add("Fermo impianto", !string.IsNullOrEmpty(i.chstopi) ? i.chstopi : String.Empty); + // dic.Add("Data assegnazione chiamata", !string.IsNullOrEmpty(i.chdtass.ToString()) ? i.chdtass.ToString() : String.Empty); + // dic.Add("Ora assegnazione chiamata", !string.IsNullOrEmpty(i.chorass.ToString()) ? i.chorass.ToString() : String.Empty); + // dic.Add("Min assegnazione chiamata", !string.IsNullOrEmpty(i.chminass.ToString()) ? i.chminass.ToString() : String.Empty); + // dic.Add("Data chiusura chiamata", !string.IsNullOrEmpty(i.chdtchi.ToString()) ? i.chdtchi.ToString() : String.Empty); + // dic.Add("Ora chiusura chiamata", !string.IsNullOrEmpty(i.chorachi.ToString()) ? i.chorachi.ToString() : String.Empty); + // dic.Add("Min chiusura chiamata", !string.IsNullOrEmpty(i.chminchi.ToString()) ? i.chminchi.ToString() : String.Empty); + // dic.Add("Data inizio intervento", !string.IsNullOrEmpty(i.chdtlin.ToString()) ? i.chdtlin.ToString() : String.Empty); + // dic.Add("Ora inizio intervento", !string.IsNullOrEmpty(i.chorali.ToString()) ? i.chorali.ToString() : String.Empty); + // dic.Add("Min inizio intervento", !string.IsNullOrEmpty(i.chminli.ToString()) ? i.chminli.ToString() : String.Empty); + // dic.Add("Data fine intervento", !string.IsNullOrEmpty(i.chdtlfi.ToString()) ? i.chdtlfi.ToString() : String.Empty); + + // dic.Add("Ora fine intervento", !string.IsNullOrEmpty(i.choralf.ToString()) ? i.choralf.ToString() : String.Empty); + // dic.Add("Min fine intervento", !string.IsNullOrEmpty(i.chminlf.ToString()) ? i.chminlf.ToString() : String.Empty); + // dic.Add("Numero 1 rapportino futuro", !string.IsNullOrEmpty(i.chnrap1.ToString()) ? i.chnrap1.ToString() : String.Empty); + // dic.Add("Serie 1 rapportino futuro", !string.IsNullOrEmpty(i.chsrap1) ? i.chsrap1 : String.Empty); + // dic.Add("Numero 2 rapportino futuro", !string.IsNullOrEmpty(i.chnrap2.ToString()) ? i.chnrap2.ToString() : String.Empty); + // dic.Add("Modalità raccolta chiamata", !string.IsNullOrEmpty(i.chmodrac) ? i.chmodrac : String.Empty); + // dic.Add("Numero chiamata per impianto per anno", !string.IsNullOrEmpty(i.chprgann.ToString()) ? i.chprgann.ToString() : String.Empty); + // dic.Add("Importo manodopera", !string.IsNullOrEmpty(i.chimpman.ToString()) ? i.chimpman.ToString() : String.Empty); + // dic.Add("Percentuale manodopera", !string.IsNullOrEmpty(i.chperman.ToString()) ? i.chperman.ToString() : String.Empty); + // dic.Add("Stampa manodopera", !string.IsNullOrEmpty(i.chflstim) ? i.chflstim : String.Empty); + // dic.Add("Chiusura da remoto", !string.IsNullOrEmpty(i.chfleste) ? i.chfleste : String.Empty); + // dic.Add("Riferimento seriale importazione", !string.IsNullOrEmpty(i.chserext) ? i.chserext : String.Empty); + // dic.Add("Descrizione impianto", !string.IsNullOrEmpty(i.imdescri) ? i.imdescri : String.Empty); + // dic.Add("Tipo impianto", !string.IsNullOrEmpty(i.imtipoim) ? i.imtipoim : String.Empty); + // dic.Add("Matricola impianto ", !string.IsNullOrEmpty(i.immatric) ? i.immatric : String.Empty); + // dic.Add("Numero impianto ", !string.IsNullOrEmpty(i.imnumimp) ? i.imnumimp : String.Empty); + // dic.Add("Ultimo amministratore ", !string.IsNullOrEmpty(i.imultamm) ? i.imultamm : String.Empty); + // dic.Add("Desc Ultimo amministratore ", !string.IsNullOrEmpty(i.imultdam) ? i.imultdam : String.Empty); + // dic.Add("Telefono Ult. Amministratore", !string.IsNullOrEmpty(i.imulttam) ? i.imulttam : String.Empty); + + + // dic.Add("Ubicazione impianto", !string.IsNullOrEmpty(i.imubicaz) ? i.imubicaz : String.Empty); + // dic.Add("Zona manutenzione", !string.IsNullOrEmpty(i.imzonman) ? i.imzonman : String.Empty); + // dic.Add("Pubblico/privato", !string.IsNullOrEmpty(i.imflpupr) ? i.imflpupr : String.Empty); + // dic.Add("Zona chiamate", !string.IsNullOrEmpty(i.imzonchi) ? i.imzonchi : String.Empty); + // dic.Add("Zona supervisione", !string.IsNullOrEmpty(i.imzonsup) ? i.imzonsup : String.Empty); + // dic.Add("Data inizio manutenzione", i.imdainma != null ? i.imdainma.ToString() : String.Empty); + // dic.Add("Data fine manutenzione", !string.IsNullOrEmpty(i.imdafima.ToString()) ? i.imdafima.ToString() : String.Empty); + // dic.Add("Data costruzione", !string.IsNullOrEmpty(i.imdatcos.ToString()) ? i.imdatcos.ToString() : String.Empty); + // dic.Add("Numero telesoccorso ", !string.IsNullOrEmpty(i.imteleso) ? i.imteleso : String.Empty); + // dic.Add("Email cliente", !string.IsNullOrEmpty(i.an_email) ? i.an_email : String.Empty); + // dic.Add("Ultimo cliente", !string.IsNullOrEmpty(i.an_email) ? i.an_email : String.Empty); + // dic.Add("Codice cliente", !string.IsNullOrEmpty(i.ancodice) ? i.ancodice : String.Empty); + // dic.Add("Tipo anagrafica", !string.IsNullOrEmpty(i.antipcon) ? i.antipcon : String.Empty); + // #endregion + + // break; + // case Clienti.Discovery: + // #region discovery + // dic.Add("Esercizio", !string.IsNullOrEmpty(i.chcodese) ? i.chcodese : String.Empty); + // dic.Add("Tipo", !string.IsNullOrEmpty(i.chtipo) ? i.chtipo : String.Empty); + // dic.Add("Numero chiamata", !string.IsNullOrEmpty(i.chnumero.ToString()) ? i.chnumero.ToString() : String.Empty); + // dic.Add("Data chiamata", !string.IsNullOrEmpty(i.chdata.ToString()) ? i.chdata.ToString() : String.Empty); + // dic.Add("Ora inserimento chiamata", !string.IsNullOrEmpty(i.chora.ToString()) ? i.chora.ToString() : String.Empty); + // dic.Add("Min inserimento chiamata", !string.IsNullOrEmpty(i.chmin.ToString()) ? i.chmin.ToString() : String.Empty); + // dic.Add("Operatore assegnazione", !string.IsNullOrEmpty(i.chopass.ToString()) ? i.chopass.ToString() : String.Empty); + // dic.Add("Operatore chiusura", !string.IsNullOrEmpty(i.chopchi.ToString()) ? i.chopchi.ToString() : String.Empty); + // dic.Add("Azienda impianto", !string.IsNullOrEmpty(i.chaziimp) ? i.chaziimp : String.Empty); + // dic.Add("Ora appuntamento fine", !string.IsNullOrEmpty(i.choraapf.ToString()) ? i.choraapf.ToString() : String.Empty); + // dic.Add("Min appuntamento fine", !string.IsNullOrEmpty(i.chminapf.ToString()) ? i.chminapf.ToString() : String.Empty); + // dic.Add("Riferimento chiamata", !string.IsNullOrEmpty(i.chrifer) ? i.chrifer : String.Empty); + // dic.Add("Riferimento telefono", !string.IsNullOrEmpty(i.chtelef) ? i.chtelef : String.Empty); + // dic.Add("Codice segnalazione", !string.IsNullOrEmpty(i.chcodseg) ? i.chcodseg : String.Empty); + // dic.Add("Fermo impianto", !string.IsNullOrEmpty(i.chstopi) ? i.chstopi : String.Empty); + // dic.Add("Data assegnazione chiamata", !string.IsNullOrEmpty(i.chdtass.ToString()) ? i.chdtass.ToString() : String.Empty); + // dic.Add("Ora assegnazione chiamata", !string.IsNullOrEmpty(i.chorass.ToString()) ? i.chorass.ToString() : String.Empty); + // dic.Add("Min assegnazione chiamata", !string.IsNullOrEmpty(i.chminass.ToString()) ? i.chminass.ToString() : String.Empty); + // dic.Add("Data chiusura chiamata", !string.IsNullOrEmpty(i.chdtchi.ToString()) ? i.chdtchi.ToString() : String.Empty); + // dic.Add("Ora chiusura chiamata", !string.IsNullOrEmpty(i.chorachi.ToString()) ? i.chorachi.ToString() : String.Empty); + // dic.Add("Min chiusura chiamata", !string.IsNullOrEmpty(i.chminchi.ToString()) ? i.chminchi.ToString() : String.Empty); + // dic.Add("Data inizio intervento", !string.IsNullOrEmpty(i.chdtlin.ToString()) ? i.chdtlin.ToString() : String.Empty); + // dic.Add("Ora inizio intervento", !string.IsNullOrEmpty(i.chorali.ToString()) ? i.chorali.ToString() : String.Empty); + // dic.Add("Min inizio intervento", !string.IsNullOrEmpty(i.chminli.ToString()) ? i.chminli.ToString() : String.Empty); + // dic.Add("Data fine intervento", !string.IsNullOrEmpty(i.chdtlfi.ToString()) ? i.chdtlfi.ToString() : String.Empty); + + // dic.Add("Ora fine intervento", !string.IsNullOrEmpty(i.choralf.ToString()) ? i.choralf.ToString() : String.Empty); + // dic.Add("Min fine intervento", !string.IsNullOrEmpty(i.chminlf.ToString()) ? i.chminlf.ToString() : String.Empty); + // dic.Add("Numero 1 rapportino futuro", !string.IsNullOrEmpty(i.chnrap1.ToString()) ? i.chnrap1.ToString() : String.Empty); + // dic.Add("Serie 1 rapportino futuro", !string.IsNullOrEmpty(i.chsrap1) ? i.chsrap1 : String.Empty); + // dic.Add("Numero 2 rapportino futuro", !string.IsNullOrEmpty(i.chnrap2.ToString()) ? i.chnrap2.ToString() : String.Empty); + // dic.Add("Modalità raccolta chiamata", !string.IsNullOrEmpty(i.chmodrac) ? i.chmodrac : String.Empty); + // dic.Add("Numero chiamata per impianto per anno", !string.IsNullOrEmpty(i.chprgann.ToString()) ? i.chprgann.ToString() : String.Empty); + // dic.Add("Importo manodopera", !string.IsNullOrEmpty(i.chimpman.ToString()) ? i.chimpman.ToString() : String.Empty); + // dic.Add("Percentuale manodopera", !string.IsNullOrEmpty(i.chperman.ToString()) ? i.chperman.ToString() : String.Empty); + // dic.Add("Stampa manodopera", !string.IsNullOrEmpty(i.chflstim) ? i.chflstim : String.Empty); + // dic.Add("Chiusura da remoto", !string.IsNullOrEmpty(i.chfleste) ? i.chfleste : String.Empty); + // dic.Add("Riferimento seriale importazione", !string.IsNullOrEmpty(i.chserext) ? i.chserext : String.Empty); + // dic.Add("Descrizione impianto", !string.IsNullOrEmpty(i.imdescri) ? i.imdescri : String.Empty); + // dic.Add("Tipo impianto", !string.IsNullOrEmpty(i.imtipoim) ? i.imtipoim : String.Empty); + // dic.Add("Matricola impianto ", !string.IsNullOrEmpty(i.immatric) ? i.immatric : String.Empty); + // dic.Add("Numero impianto ", !string.IsNullOrEmpty(i.imnumimp) ? i.imnumimp : String.Empty); + // dic.Add("Ultimo amministratore ", !string.IsNullOrEmpty(i.imultamm) ? i.imultamm : String.Empty); + // dic.Add("Desc Ultimo amministratore ", !string.IsNullOrEmpty(i.imultdam) ? i.imultdam : String.Empty); + // dic.Add("Telefono Ult. Amministratore", !string.IsNullOrEmpty(i.imulttam) ? i.imulttam : String.Empty); + + + // dic.Add("Ubicazione impianto", !string.IsNullOrEmpty(i.imubicaz) ? i.imubicaz : String.Empty); + // dic.Add("Zona manutenzione", !string.IsNullOrEmpty(i.imzonman) ? i.imzonman : String.Empty); + // dic.Add("Pubblico/privato", !string.IsNullOrEmpty(i.imflpupr) ? i.imflpupr : String.Empty); + // dic.Add("Zona chiamate", !string.IsNullOrEmpty(i.imzonchi) ? i.imzonchi : String.Empty); + // dic.Add("Zona supervisione", !string.IsNullOrEmpty(i.imzonsup) ? i.imzonsup : String.Empty); + // dic.Add("Data inizio manutenzione", i.imdainma != null ? i.imdainma.ToString() : String.Empty); + // dic.Add("Data fine manutenzione", !string.IsNullOrEmpty(i.imdafima.ToString()) ? i.imdafima.ToString() : String.Empty); + // dic.Add("Data costruzione", !string.IsNullOrEmpty(i.imdatcos.ToString()) ? i.imdatcos.ToString() : String.Empty); + // dic.Add("Numero telesoccorso ", !string.IsNullOrEmpty(i.imteleso) ? i.imteleso : String.Empty); + // dic.Add("Email cliente", !string.IsNullOrEmpty(i.an_email) ? i.an_email : String.Empty); + // dic.Add("Ultimo cliente", !string.IsNullOrEmpty(i.an_email) ? i.an_email : String.Empty); + // dic.Add("Codice cliente", !string.IsNullOrEmpty(i.ancodice) ? i.ancodice : String.Empty); + // dic.Add("Tipo anagrafica", !string.IsNullOrEmpty(i.antipcon) ? i.antipcon : String.Empty); + // #endregion + // break; + + // case Clienti.Sarom: + // #region Sarom + // dic.Add("Esercizio", !string.IsNullOrEmpty(i.chcodese) ? i.chcodese : String.Empty); + // dic.Add("Tipo", !string.IsNullOrEmpty(i.chtipo) ? i.chtipo : String.Empty); + // dic.Add("Numero chiamata", !string.IsNullOrEmpty(i.chnumero.ToString()) ? i.chnumero.ToString() : String.Empty); + // dic.Add("Data chiamata", !string.IsNullOrEmpty(i.chdata.ToString()) ? i.chdata.ToString() : String.Empty); + // dic.Add("Ora inserimento chiamata", !string.IsNullOrEmpty(i.chora.ToString()) ? i.chora.ToString() : String.Empty); + // dic.Add("Min inserimento chiamata", !string.IsNullOrEmpty(i.chmin.ToString()) ? i.chmin.ToString() : String.Empty); + // dic.Add("Operatore assegnazione", !string.IsNullOrEmpty(i.chopass.ToString()) ? i.chopass.ToString() : String.Empty); + // dic.Add("Operatore chiusura", !string.IsNullOrEmpty(i.chopchi.ToString()) ? i.chopchi.ToString() : String.Empty); + // dic.Add("Azienda impianto", !string.IsNullOrEmpty(i.chaziimp) ? i.chaziimp : String.Empty); + // dic.Add("Ora appuntamento fine", !string.IsNullOrEmpty(i.choraapf.ToString()) ? i.choraapf.ToString() : String.Empty); + // dic.Add("Min appuntamento fine", !string.IsNullOrEmpty(i.chminapf.ToString()) ? i.chminapf.ToString() : String.Empty); + // dic.Add("Riferimento chiamata", !string.IsNullOrEmpty(i.chrifer) ? i.chrifer : String.Empty); + // dic.Add("Riferimento telefono", !string.IsNullOrEmpty(i.chtelef) ? i.chtelef : String.Empty); + // dic.Add("Codice segnalazione", !string.IsNullOrEmpty(i.chcodseg) ? i.chcodseg : String.Empty); + // dic.Add("Fermo impianto", !string.IsNullOrEmpty(i.chstopi) ? i.chstopi : String.Empty); + // dic.Add("Data assegnazione chiamata", !string.IsNullOrEmpty(i.chdtass.ToString()) ? i.chdtass.ToString() : String.Empty); + // dic.Add("Ora assegnazione chiamata", !string.IsNullOrEmpty(i.chorass.ToString()) ? i.chorass.ToString() : String.Empty); + // dic.Add("Min assegnazione chiamata", !string.IsNullOrEmpty(i.chminass.ToString()) ? i.chminass.ToString() : String.Empty); + // dic.Add("Data chiusura chiamata", !string.IsNullOrEmpty(i.chdtchi.ToString()) ? i.chdtchi.ToString() : String.Empty); + // dic.Add("Ora chiusura chiamata", !string.IsNullOrEmpty(i.chorachi.ToString()) ? i.chorachi.ToString() : String.Empty); + // dic.Add("Min chiusura chiamata", !string.IsNullOrEmpty(i.chminchi.ToString()) ? i.chminchi.ToString() : String.Empty); + // dic.Add("Data inizio intervento", !string.IsNullOrEmpty(i.chdtlin.ToString()) ? i.chdtlin.ToString() : String.Empty); + // dic.Add("Ora inizio intervento", !string.IsNullOrEmpty(i.chorali.ToString()) ? i.chorali.ToString() : String.Empty); + // dic.Add("Min inizio intervento", !string.IsNullOrEmpty(i.chminli.ToString()) ? i.chminli.ToString() : String.Empty); + // dic.Add("Data fine intervento", !string.IsNullOrEmpty(i.chdtlfi.ToString()) ? i.chdtlfi.ToString() : String.Empty); + + // dic.Add("Ora fine intervento", !string.IsNullOrEmpty(i.choralf.ToString()) ? i.choralf.ToString() : String.Empty); + // dic.Add("Min fine intervento", !string.IsNullOrEmpty(i.chminlf.ToString()) ? i.chminlf.ToString() : String.Empty); + // dic.Add("Numero 1 rapportino futuro", !string.IsNullOrEmpty(i.chnrap1.ToString()) ? i.chnrap1.ToString() : String.Empty); + // dic.Add("Serie 1 rapportino futuro", !string.IsNullOrEmpty(i.chsrap1) ? i.chsrap1 : String.Empty); + // dic.Add("Numero 2 rapportino futuro", !string.IsNullOrEmpty(i.chnrap2.ToString()) ? i.chnrap2.ToString() : String.Empty); + // dic.Add("Modalità raccolta chiamata", !string.IsNullOrEmpty(i.chmodrac) ? i.chmodrac : String.Empty); + // dic.Add("Numero chiamata per impianto per anno", !string.IsNullOrEmpty(i.chprgann.ToString()) ? i.chprgann.ToString() : String.Empty); + // dic.Add("Importo manodopera", !string.IsNullOrEmpty(i.chimpman.ToString()) ? i.chimpman.ToString() : String.Empty); + // dic.Add("Percentuale manodopera", !string.IsNullOrEmpty(i.chperman.ToString()) ? i.chperman.ToString() : String.Empty); + // dic.Add("Stampa manodopera", !string.IsNullOrEmpty(i.chflstim) ? i.chflstim : String.Empty); + // dic.Add("Chiusura da remoto", !string.IsNullOrEmpty(i.chfleste) ? i.chfleste : String.Empty); + // dic.Add("Riferimento seriale importazione", !string.IsNullOrEmpty(i.chserext) ? i.chserext : String.Empty); + // dic.Add("Descrizione impianto", !string.IsNullOrEmpty(i.imdescri) ? i.imdescri : String.Empty); + // dic.Add("Tipo impianto", !string.IsNullOrEmpty(i.imtipoim) ? i.imtipoim : String.Empty); + // dic.Add("Matricola impianto ", !string.IsNullOrEmpty(i.immatric) ? i.immatric : String.Empty); + // dic.Add("Numero impianto ", !string.IsNullOrEmpty(i.imnumimp) ? i.imnumimp : String.Empty); + // dic.Add("Ultimo amministratore ", !string.IsNullOrEmpty(i.imultamm) ? i.imultamm : String.Empty); + // dic.Add("Desc Ultimo amministratore ", !string.IsNullOrEmpty(i.imultdam) ? i.imultdam : String.Empty); + // dic.Add("Telefono Ult. Amministratore", !string.IsNullOrEmpty(i.imulttam) ? i.imulttam : String.Empty); + + + // dic.Add("Ubicazione impianto", !string.IsNullOrEmpty(i.imubicaz) ? i.imubicaz : String.Empty); + // dic.Add("Zona manutenzione", !string.IsNullOrEmpty(i.imzonman) ? i.imzonman : String.Empty); + // dic.Add("Pubblico/privato", !string.IsNullOrEmpty(i.imflpupr) ? i.imflpupr : String.Empty); + // dic.Add("Zona chiamate", !string.IsNullOrEmpty(i.imzonchi) ? i.imzonchi : String.Empty); + // dic.Add("Zona supervisione", !string.IsNullOrEmpty(i.imzonsup) ? i.imzonsup : String.Empty); + // dic.Add("Data inizio manutenzione", i.imdainma != null ? i.imdainma.ToString() : String.Empty); + // dic.Add("Data fine manutenzione", !string.IsNullOrEmpty(i.imdafima.ToString()) ? i.imdafima.ToString() : String.Empty); + // dic.Add("Data costruzione", !string.IsNullOrEmpty(i.imdatcos.ToString()) ? i.imdatcos.ToString() : String.Empty); + // dic.Add("Numero telesoccorso ", !string.IsNullOrEmpty(i.imteleso) ? i.imteleso : String.Empty); + // dic.Add("Email cliente", !string.IsNullOrEmpty(i.an_email) ? i.an_email : String.Empty); + // dic.Add("Ultimo cliente", !string.IsNullOrEmpty(i.an_email) ? i.an_email : String.Empty); + // dic.Add("Codice cliente", !string.IsNullOrEmpty(i.ancodice) ? i.ancodice : String.Empty); + // dic.Add("Tipo anagrafica", !string.IsNullOrEmpty(i.antipcon) ? i.antipcon : String.Empty); + // #endregion + // break; + + // default: + + // break; + //} + o.altri = dic; + + o.imazirif = i.imazirif; + o.imrefref = i.imrefref; + return o; + } + + //private string getCommessaSietBySerial(string seriale) + //{ + // string commessa = string.Empty; + + // try + // { + // _commDescSiet = _Siet_commDesc.Commdesc; + // var c = _commDescSiet.Where(c => c.laserial.Equals(seriale)).First(); + // if (c != null && !string.IsNullOrEmpty(c.lacodcom)) + // { + // commessa = c.lacodcom.Trim(); + // if (!string.IsNullOrEmpty(c.lacodcen)) + // { + // commessa = commessa + " - " + c.lacodcen.Trim(); + // } + // } + // } + // catch + // { + // Console.WriteLine(string.Format("*********** {1} Errore Chiamata al metodo getCommessaSietBySerial: seriale:{0} ", seriale, DateTime.Now.ToString())); + // } + + // return commessa; + //} + + private Chiamate_out inputToChiamateOut(Input i) + { + Chiamate_out c = new Chiamate_out(); + c.chserial = i.seriale_chiamata; + c.chcodazi = i.azienda_chiamata; + c.chaziimp = i.codice_impianto; + c.tccodice = i.codice_tecnico; + c.chdata = i.data_rapportino; + return c; + } + + /// Codici di chiusura per scheda intevento return:ActionResult + [HttpGet("codici_chiusura")] + public async Task>> codiciChiusura(string token) + { + try + { + string ten = getClaimValueByToken(token, "tenant"); + string tenConf = getClaimValueByToken(token, "tenantConfigurazioni"); + if (string.IsNullOrEmpty(ten)) + { + ten = tenConf; + } + + _chiusure = _VT_chiu.Chiu; + + //switch (ten) + //{ + // case Clienti.VT: + // _chiusure = _VT_chiu.Chiu; + // ten = getClaimValueByToken(token, "tenant2"); + + // break; + // default: + // _chiusure = getChiusureByTenant(ten); + // break; + //} + + var l = await _chiusure.Where(c => c.cccodazi.Equals(ten)).ToListAsync(); + //per DISCOVERY devo riempire anche gli abbinamenti con il tipo manutenzione + //switch (ten) + //{ + // case Clienti.Discovery: + + // //_ccci = _Disco_ccci.ccci; + // _ccciView= _Disco_ccciView.ccciWiev; + // foreach (Chiusure t in l) + // { + // t.tipologieMan = new List(); + + + // string cod = t.cccodice; + // //logica per cercare nella tabella degli abbinamenti + + + // var appo= await _ccciView.Where(c => c.picodazi!=null && c.picodazi.Equals(ten) && c.picodchi != null && c.picodchi.Equals(cod)).ToListAsync(); + // if (appo != null && appo.Count() > 0) + // { + // //sono nel caso dei codici gestiti: nella lista metto solo quelli permessi + // foreach (CC_CIWiev c in appo) + // { + // t.tipologieMan.Add(c.picodint); + // } + // } + // else + // { + // //t.tipologieMan.Add("SEMESTRALE"); + // //t.tipologieMan.Add("ANN "); + // //t.tipologieMan.Add("BIMESTRALE"); + // //t.tipologieMan.Add("MENSILE "); + // //t.tipologieMan.Add("QUADRIMEST"); + // //t.tipologieMan.Add("TR "); + // //t.tipologieMan.Add("VERSEM "); + + // //Aggiungo tutti + // var result = _ccciView.GroupBy(test => test.cicodice) + // .Select(grp => grp.First()) + // .ToList(); + // foreach (CC_CIWiev c in result) + // { + // string codint = !string.IsNullOrEmpty(c.cicodice) ? c.cicodice : string.Empty; + // t.tipologieMan.Add(codint); + // } + + // //trovo tutti gli altri NON gestiti e li elimino dal totale + // var result2 = _ccciView.Where(p=>p.picodint!=null).GroupBy(test => test.cicodice) + // .Select(grp => grp.First()) + // .ToList(); + // foreach (CC_CIWiev c in result2) + // { + // string codint = !string.IsNullOrEmpty(c.cicodice)? c.cicodice:string.Empty; + // t.tipologieMan.Remove(codint); + // } + // } + // } + + // break; + // default: + + // break; + //} + + return StatusCode(StatusCodes.Status200OK, l); + } + catch (Exception ex) + { + string err = "Errore: " + ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, err); + } + + } + + /// Chiamate per tecnico e azienda (tenant) in stato C=Assegnate return:ActionResult + [HttpGet("chiamate")] + public async Task>> chiamate(string token) + { + try + { + List ilist = new List(); + string ten = getClaimValueByToken(token, "tenant"); + string ten2 = getClaimValueByToken(token, "tenant2"); + string tenOut = getClaimValueByToken(token, "tenant"); + string tecnico = getClaimValueByToken(token, "tccodice"); + string tenConf = getClaimValueByToken(token, "tenantConfigurazioni"); + if(string.IsNullOrEmpty(ten)) + { + ten = tenConf; + } + + _chiamate = _VT_chia.Chiamate; + ten = getClaimValueByToken(token, "tenant2"); + + //switch (ten) + //{ + // case Clienti.VT: + // _chiamate = _VT_chia.Chiamate; + // ten = getClaimValueByToken(token, "tenant2"); + + // break; + // default: + // _chiamate = getChiamateByTenant(ten); + // break; + //} + + var calltec = await _chiamate.Where( + t => t.tccodice == tecnico + && t.chcodazi == ten + ).OrderByDescending(t => t.chdtapp).ToListAsync(); + + foreach (Chiamate ch in calltec) + { + Chiamate_out o = new Chiamate_out(); + if (tenOut.Equals(Clienti.VT)) + { + o = fillChiamateOutVT(ch, ten); + } + else + { + o = fillChiamateOut(ch, ten); + } + ilist.Add(o); + } + // cerco le chiamate che devo fare per sostituzioni SE funzione abilitata + bool cerca_sostituzioni = false; + //cerca_sostituzioni = checkSostituzioneAbilitata(ten); + if (cerca_sostituzioni) + { + //step 1 : trovo tutte le MIE sostituzioni + //_sostituzione = getSostituzioneByTenant(ten); + var s = _sostituzione.Where(t => t.tscodazi.Equals(ten) && t.tscodsos.Trim().Equals(tecnico)); + foreach (Sostituzione ss in s) + { + string tecnico_sostituito = string.Empty; + tecnico_sostituito = ss.tscodtec != null ? ss.tscodtec : string.Empty; + + //2023-03-13: cancellato il filtro sulla zona perchè il tecnico che sostituisce spesso è di un'altra zona + //string zona = string.Empty; + //zona = ss.tscodzon != null ? ss.tscodzon : "zonavuota"; + + //step 2 : trovo tutte le chiamate del tecnico che sto sostitutendo e le aggiungo alla mie + var calltecSost = await _chiamate.Where( + t => t.tccodice == tecnico_sostituito + && t.chcodazi == ten + //&& t.imzonchi.Equals(zona) + ).OrderByDescending(t => t.chdtapp).ToListAsync(); + + foreach (Chiamate ch in calltecSost) + { + Chiamate_out o = new Chiamate_out(); + if(tenOut.Equals(Clienti.VT)) + { + o = fillChiamateOutVT(ch, ten); + } + else + { + o = fillChiamateOut(ch, ten); + } + + ilist.Add(o); + } + } + } + + IEnumerable enumerable = ilist as IEnumerable; + + //return StatusCode(StatusCodes.Status200OK, enumerable.Take(100)); + return StatusCode(StatusCodes.Status200OK, enumerable); + } + catch (Exception ex) + { + string err = "Errore: " + ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, err); + } + } + + /// presaInCarico: 1) crea un nuovo seriale per RAPP_NEW 2)inserisce il primo record di una presa in carico su RAPP_NEW return:ActionResult + [HttpPost] + [Route("chiamate/prendi_in_carico")] + public async Task> prendiInCarico([FromBody] Input model, string token) + { + string ten = getClaimValueByToken(token, "tenant"); + string ten2 = getClaimValueByToken(token, "tenant2"); + string tenConf = getClaimValueByToken(token, "tenantConfigurazioni"); + if (string.IsNullOrEmpty(ten)) + { + ten = tenConf; + } + Chiamate calltec=new Chiamate(); + Chiamate_out calltec_out = new Chiamate_out(); + string tec = string.Empty; + try { + tec = getClaimValueByToken(token, "tccodice"); + } + catch { } + Console.WriteLine(string.Format("*********** {2} metodo prendiInCarico1: tenant:{0} tenant2: {1} token: {3} tecnico:{4} ", ten, ten2, DateTime.Now.ToString(), token, tec)); + + try + { + if (await checkChiamataPresa(ten, model.seriale_chiamata,TipoRapportino.PresaInCarico,ten2) ==0) + { + + _confLette = await readConf(tenConf); + string newSerial = string.Empty; + newSerial = await getSeriale(token); + Rapp_New r = await fillRappNewByInput(model, token, newSerial, _confLette); + using (var transactionVT = _VT_rapptable.Database.BeginTransaction()) + { + await _VT_rapptable.Rapps.AddAsync(r); + await _VT_rapptable.SaveChangesAsync(); + transactionVT.Commit(); + } + //switch (ten) + // { + // case Clienti.Marrocco: + // using (var transaction = _Marro_rapp.Database.BeginTransaction()) + // { + // await _Marro_rapp.Rapps.AddAsync(r); + // await _Marro_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + // break; + // case Clienti.Ferrari: + // using (var transaction = _Ferra_rapp.Database.BeginTransaction()) + // { + // await _Ferra_rapp.Rapps.AddAsync(r); + // await _Ferra_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + // break; + // case Clienti.Sicilia: + // using (var transaction = _Sicilia_rapp.Database.BeginTransaction()) + // { + // await _Sicilia_rapp.Rapps.AddAsync(r); + // await _Sicilia_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + // break; + // case Clienti.Discovery: + // using (var transaction = _Disco_rapp.Database.BeginTransaction()) + // { + // await _Disco_rapp.Rapps.AddAsync(r); + // await _Disco_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + // break; + // case Clienti.Sarom: + // using (var transaction = _Sarom_rapp.Database.BeginTransaction()) + // { + // await _Sarom_rapp.Rapps.AddAsync(r); + // await _Sarom_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + // break; + // case Clienti.Gitoga: + // using (var transactionGit = _Gitoga_rapp.Database.BeginTransaction()) + // { + // await _Gitoga_rapp.Rapps.AddAsync(r); + // await _Gitoga_rapp.SaveChangesAsync(); + // transactionGit.Commit(); + // } + // break; + // case Clienti.Lifta: + // using (var transactionLif = _Lifta_rapp.Database.BeginTransaction()) + // { + // await _Lifta_rapp.Rapps.AddAsync(r); + // await _Lifta_rapp.SaveChangesAsync(); + // transactionLif.Commit(); + // } + // break; + // case Clienti.Siet: + // using (var transactionSiet = _Siet_rapp.Database.BeginTransaction()) + // { + // await _Siet_rapp.Rapps.AddAsync(r); + // await _Siet_rapp.SaveChangesAsync(); + // transactionSiet.Commit(); + // } + // break; + // case Clienti.PMS: + // using (var transactionPMS = _Pms_rapp.Database.BeginTransaction()) + // { + // await _Pms_rapp.Rapps.AddAsync(r); + // await _Pms_rapp.SaveChangesAsync(); + // transactionPMS.Commit(); + // } + // break; + // case Clienti.VT: + // using (var transactionVT = _VT_rapptable.Database.BeginTransaction()) + // { + // await _VT_rapptable.Rapps.AddAsync(r); + // await _VT_rapptable.SaveChangesAsync(); + // transactionVT.Commit(); + // } + // break; + // case Clienti.LW: + // using (var transactionLW = _LW_rapp.Database.BeginTransaction()) + // { + // await _LW_rapp.Rapps.AddAsync(r); + // await _LW_rapp.SaveChangesAsync(); + // transactionLW.Commit(); + // } + // break; + // case Clienti.Tedesco: + // using (var transactionTedes = _Tedes_rapp.Database.BeginTransaction()) + // { + // await _Tedes_rapp.Rapps.AddAsync(r); + // await _Tedes_rapp.SaveChangesAsync(); + // transactionTedes.Commit(); + // } + // break; + // case Clienti.Syscom: + // using (var transactionSys = _Sys_rapp.Database.BeginTransaction()) + // { + // await _Sys_rapp.Rapps.AddAsync(r); + // await _Sys_rapp.SaveChangesAsync(); + // transactionSys.Commit(); + // } + // break; + // default: + // break; + // } + //restituisco la chiamata + Console.WriteLine(string.Format("*********** {2} metodo prendiInCarico2: tenant:{0} tenant2: {1} token: {3} tecnico:{4} ", ten, ten2, DateTime.Now.ToString(), token, tec)); + calltec = await getChiamataBySerial(model.seriale_chiamata, token); + calltec_out = fillChiamateOut(calltec, ten); + calltec_out.err_status_code = StatiRisposta.Ok; + + //2024-08-01: metto la lettura della chiamata in un try/catch per evitare l'errore casuale "sequence contains no element" + //nel catch faccio uscire un oggetto riempito con i valori dell'Input di ingresso + //try + //{ + // calltec = await getChiamataBySerial(model.seriale_chiamata, token); + // calltec_out = fillChiamateOut(calltec, ten); + // calltec_out.err_status_code = StatiRisposta.Ok; + //} + //catch(Exception ee) + //{ + // calltec_out = inputToChiamateOut(model); + //} + } + else + { + calltec_out.err_title = "Impossibile prendere in carico la chiamata"; + calltec_out.err_detail = "Chiamata precendentemente presa in carico: " + model.seriale_chiamata; + calltec_out.err_status_code = StatiRisposta.OperazioneNonAmmessa; + } + return StatusCode(StatusCodes.Status200OK, calltec_out); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + calltec_out.err_title = ex.Message; + calltec_out.err_detail = errmsg; + calltec_out.err_status_code = StatiRisposta.ErroreInterno; + return StatusCode(StatusCodes.Status500InternalServerError, calltec_out); + } + + } + + /// rifiuta: 1) crea un nuovo seriale per RAPP_NEW 2)inserisce record su RAPP_NEW con INCARICO=N e RIFIUTATA=S return:ActionResult + [HttpPost] + [Route("chiamate/rifiuta")] + public async Task> rifiuta([FromBody] Input model, string token) + { + string ten = getClaimValueByToken(token, "tenant"); + string ten2 = getClaimValueByToken(token, "tenant2"); + string tenConf = getClaimValueByToken(token, "tenantConfigurazioni"); + if (string.IsNullOrEmpty(ten)) + { + ten = tenConf; + } + Chiamate calltec = new Chiamate(); + Chiamate_out calltec_out = new Chiamate_out(); + + try + { + if (await checkChiamataRifiutata(ten, model.seriale_chiamata, TipoRapportino.PresaInCarico,ten2) == 0) + { + _confLette = await readConf(tenConf); + string newSerial = string.Empty; + newSerial = await getSeriale(token); + Rapp_New r = await fillRappNewRifiutoByInput(model, token, newSerial, _confLette); + + using (var transactionVT = _VT_rapptable.Database.BeginTransaction()) + { + await _VT_rapptable.Rapps.AddAsync(r); + await _VT_rapptable.SaveChangesAsync(); + transactionVT.Commit(); + } + //switch (ten) + // { + // case Clienti.Marrocco: + // using (var transaction = _Marro_rapp.Database.BeginTransaction()) + // { + // await _Marro_rapp.Rapps.AddAsync(r); + // await _Marro_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + // break; + // case Clienti.Ferrari: + // using (var transaction = _Ferra_rapp.Database.BeginTransaction()) + // { + // await _Ferra_rapp.Rapps.AddAsync(r); + // await _Ferra_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + + // break; + // case Clienti.Sicilia: + // using (var transaction = _Sicilia_rapp.Database.BeginTransaction()) + // { + // await _Sicilia_rapp.Rapps.AddAsync(r); + // await _Sicilia_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + // break; + // case Clienti.Discovery: + // using (var transaction = _Disco_rapp.Database.BeginTransaction()) + // { + // await _Disco_rapp.Rapps.AddAsync(r); + // await _Disco_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + // break; + // case Clienti.Sarom: + // using (var transaction = _Sarom_rapp.Database.BeginTransaction()) + // { + // await _Sarom_rapp.Rapps.AddAsync(r); + // await _Sarom_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + // break; + // case Clienti.Gitoga: + // using (var transactionGit = _Gitoga_rapp.Database.BeginTransaction()) + // { + // await _Gitoga_rapp.Rapps.AddAsync(r); + // await _Gitoga_rapp.SaveChangesAsync(); + // transactionGit.Commit(); + // } + // break; + // case Clienti.Lifta: + // using (var transactionLif = _Lifta_rapp.Database.BeginTransaction()) + // { + // await _Lifta_rapp.Rapps.AddAsync(r); + // await _Lifta_rapp.SaveChangesAsync(); + // transactionLif.Commit(); + // } + // break; + // case Clienti.Siet: + // using (var transactionSiet = _Siet_rapp.Database.BeginTransaction()) + // { + // await _Siet_rapp.Rapps.AddAsync(r); + // await _Siet_rapp.SaveChangesAsync(); + // transactionSiet.Commit(); + // } + // break; + // case Clienti.PMS: + // using (var transactionPMS = _Pms_rapp.Database.BeginTransaction()) + // { + // await _Pms_rapp.Rapps.AddAsync(r); + // await _Pms_rapp.SaveChangesAsync(); + // transactionPMS.Commit(); + // } + // break; + // case Clienti.VT: + // using (var transactionVT = _VT_rapptable.Database.BeginTransaction()) + // { + // await _VT_rapptable.Rapps.AddAsync(r); + // await _VT_rapptable.SaveChangesAsync(); + // transactionVT.Commit(); + // } + // break; + // case Clienti.LW: + // using (var transactionLW = _LW_rapp.Database.BeginTransaction()) + // { + // await _LW_rapp.Rapps.AddAsync(r); + // await _LW_rapp.SaveChangesAsync(); + // transactionLW.Commit(); + // } + // break; + // case Clienti.Tedesco: + // using (var transactionTedes = _Tedes_rapp.Database.BeginTransaction()) + // { + // await _Tedes_rapp.Rapps.AddAsync(r); + // await _Tedes_rapp.SaveChangesAsync(); + // transactionTedes.Commit(); + // } + // break; + // case Clienti.Syscom: + // using (var transactionSys = _Sys_rapp.Database.BeginTransaction()) + // { + // await _Sys_rapp.Rapps.AddAsync(r); + // await _Sys_rapp.SaveChangesAsync(); + // transactionSys.Commit(); + // } + // break; + // default: + // break; + // } + calltec = await getChiamataBySerial(model.seriale_chiamata, token); + calltec_out = fillChiamateOut(calltec, ten); + calltec_out.err_status_code = StatiRisposta.Ok; + + } + else + { + calltec_out.err_title = "Impossibile rifiutare la chiamata"; + calltec_out.err_detail = "Chiamata precendentemente rifiutata: " + model.seriale_chiamata; + calltec_out.err_status_code = StatiRisposta.OperazioneNonAmmessa; + } + return StatusCode(StatusCodes.Status200OK, calltec_out); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + calltec_out.err_title = ex.Message; + calltec_out.err_detail = errmsg; + calltec_out.err_status_code = StatiRisposta.ErroreInterno; + return StatusCode(StatusCodes.Status500InternalServerError, calltec_out); + } + + //return calltec_out; + + } + + /// chiudi: 1) crea un nuovo seriale per RAPP_NEW 2)inserisce record su RAPP_NEW con i dati dell'intervento return:ActionResult + [HttpPost] + [Route("chiamate/chiudi")] + public async Task> chiudi([FromBody] Input model, string token) + { + string ten = getClaimValueByToken(token, "tenant"); + string ten2 = getClaimValueByToken(token, "tenant2"); + string tecnico = getClaimValueByToken(token, "tccodice"); + string tenConf= getClaimValueByToken(token, "tenantConfigurazioni"); + if (string.IsNullOrEmpty(ten)) + { + ten = tenConf; + } + Chiamate calltec = new Chiamate(); + Chiamate_out calltec_out = new Chiamate_out(); + try + { + if (await checkChiamataChiusa(ten, model.seriale_chiamata, TipoRapportino.ChiamataChiusa) == 0) + { + int riga = 0; + if(ten.Equals(Clienti.VT)) + { + _confLette = await readConf(ten2); + } + else + { + + _confLette = await readConf(tenConf); + } + + string newSerial = string.Empty; + newSerial = await getSeriale(token); + + Rapp_New r = await fillRappNewChiudiByInput(model, token, newSerial, _confLette); + + using (var transactionVT = _VT_rapptable.Database.BeginTransaction()) + { + await _VT_rapptable.Rapps.AddAsync(r); + await _VT_rapptable.SaveChangesAsync(); + transactionVT.Commit(); + } + // 27/02/2025 agggiunta gestione Vt_MagNew + riga = 0; + if (model.compo_add != null && model.compo_add.Count() > 0) + { + using (var transactionVT2 = _VT_rapptable.Database.BeginTransaction()) + { + foreach (Saldiart co in model.compo_add) + { + Vt_Mag_New vtmn = new Vt_Mag_New(); + riga = riga + 1; + vtmn = SaldiArtToVtMag_New(co, riga, newSerial, tecnico, ten2); + + await _VT_MagNew.MagNewVt.AddAsync(vtmn); + await _VT_MagNew.SaveChangesAsync(); + } + transactionVT2.Commit(); + } + } + if (model.compo_del != null && model.compo_del.Count() > 0) + { + using (var transactionVt3 = _VT_rapptable.Database.BeginTransaction()) + { + foreach (Compo_Impia co in model.compo_del) + { + Vt_Mag_New vtmn = new Vt_Mag_New(); + riga = riga + 1; + vtmn = compo_ImpiaToVt_Mag_New(co, riga, newSerial, tecnico, ten2); + + await _VT_MagNew.MagNewVt.AddAsync(vtmn); + await _VT_MagNew.SaveChangesAsync(); + } + transactionVt3.Commit(); + } + } + + //switch (ten) + //{ + // case Clienti.Marrocco: + // using (var transaction = _Marro_rapp.Database.BeginTransaction()) + // { + // await _Marro_rapp.Rapps.AddAsync(r); + // await _Marro_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + + // break; + // case Clienti.Ferrari: + // using (var transaction = _Ferra_rapp.Database.BeginTransaction()) + // { + // await _Ferra_rapp.Rapps.AddAsync(r); + // await _Ferra_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + + // break; + // case Clienti.Sarom: + // using (var transaction = _Sarom_rapp.Database.BeginTransaction()) + // { + // await _Sarom_rapp.Rapps.AddAsync(r); + // await _Sarom_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + + // break; + // case Clienti.Gitoga: + // using (var transactionGit = _Gitoga_rapp.Database.BeginTransaction()) + // { + // await _Gitoga_rapp.Rapps.AddAsync(r); + // await _Gitoga_rapp.SaveChangesAsync(); + // transactionGit.Commit(); + // } + + // break; + // case Clienti.Lifta: + // using (var transactionLif = _Lifta_rapp.Database.BeginTransaction()) + // { + // await _Lifta_rapp.Rapps.AddAsync(r); + // await _Lifta_rapp.SaveChangesAsync(); + // transactionLif.Commit(); + // } + + // break; + + // case Clienti.Sicilia: + // using (var transaction = _Sicilia_rapp.Database.BeginTransaction()) + // { + // await _Sicilia_rapp.Rapps.AddAsync(r); + // await _Sicilia_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + // riga = 0; + // if (model.compo_add!=null && model.compo_add.Count()>0) + // { + // using (var transaction2 = _Sicilia_mag.Database.BeginTransaction()) + // { + // foreach (Saldiart co in model.compo_add) + // { + // riga = riga + 1; + // Mag_New mn = new Mag_New(); + // mn = saldiartToMag_New(co, riga, newSerial, tecnico); + + // await _Sicilia_mag.Mag.AddAsync(mn); + // await _Sicilia_mag.SaveChangesAsync(); + // } + // transaction2.Commit(); + // } + // } + // if (model.compo_del != null && model.compo_del.Count() > 0) + // { + // using (var transaction3 = _Sicilia_mag.Database.BeginTransaction()) + // { + // foreach (Compo_Impia co in model.compo_del) + // { + // Mag_New mn = new Mag_New(); + // riga = riga + 1; + // mn = compo_ImpiaToMag_New(co, riga, newSerial, tecnico); + + // await _Sicilia_mag.Mag.AddAsync(mn); + // await _Sicilia_mag.SaveChangesAsync(); + // } + // transaction3.Commit(); + // } + // } + // break; + // case Clienti.Discovery: + + // using (var transaction = _Disco_rapp.Database.BeginTransaction()) + // { + // await _Disco_rapp.Rapps.AddAsync(r); + // await _Disco_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + // riga = 0; + // if (model.compo_add != null && model.compo_add.Count() > 0) + // { + // using (var transaction2 = _Disco_mag.Database.BeginTransaction()) + // { + // foreach (Saldiart co in model.compo_add) + // { + // riga = riga + 1; + // Mag_New mn = new Mag_New(); + // mn = saldiartToMag_New(co, riga, newSerial, tecnico); + + // await _Disco_mag.Mag.AddAsync(mn); + // await _Disco_mag.SaveChangesAsync(); + // } + // transaction2.Commit(); + // } + // } + // if (model.compo_del != null && model.compo_del.Count() > 0) + // { + // using (var transaction3 = _Disco_mag.Database.BeginTransaction()) + // { + // foreach (Compo_Impia co in model.compo_del) + // { + // Mag_New mn = new Mag_New(); + // riga = riga + 1; + // mn = compo_ImpiaToMag_New(co, riga, newSerial, tecnico); + + // await _Disco_mag.Mag.AddAsync(mn); + // await _Disco_mag.SaveChangesAsync(); + // } + // transaction3.Commit(); + // } + // } + // break; + // case Clienti.Siet: + + // using (var transaction = _Siet_rapp.Database.BeginTransaction()) + // { + // await _Siet_rapp.Rapps.AddAsync(r); + // await _Siet_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + // riga = 0; + // if (model.compo_add != null && model.compo_add.Count() > 0) + // { + // using (var transaction2 = _Siet_mag.Database.BeginTransaction()) + // { + // foreach (Saldiart co in model.compo_add) + // { + // riga = riga + 1; + // Mag_New mn = new Mag_New(); + // mn = saldiartToMag_New(co, riga, newSerial, tecnico); + + // await _Siet_mag.Mag.AddAsync(mn); + // await _Siet_mag.SaveChangesAsync(); + // } + // transaction2.Commit(); + // } + // } + // if (model.compo_del != null && model.compo_del.Count() > 0) + // { + // using (var transaction3 = _Siet_mag.Database.BeginTransaction()) + // { + // foreach (Compo_Impia co in model.compo_del) + // { + // Mag_New mn = new Mag_New(); + // riga = riga + 1; + // mn = compo_ImpiaToMag_New(co, riga, newSerial, tecnico); + + // await _Siet_mag.Mag.AddAsync(mn); + // await _Siet_mag.SaveChangesAsync(); + // } + // transaction3.Commit(); + // } + // } + // break; + // case Clienti.PMS: + + // using (var transaction = _Pms_rapp.Database.BeginTransaction()) + // { + // await _Pms_rapp.Rapps.AddAsync(r); + // await _Pms_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + // riga = 0; + // if (model.compo_add != null && model.compo_add.Count() > 0) + // { + // using (var transaction2 = _PMS_mag.Database.BeginTransaction()) + // { + // foreach (Saldiart co in model.compo_add) + // { + // riga = riga + 1; + // Mag_New mn = new Mag_New(); + // mn = saldiartToMag_New(co, riga, newSerial, tecnico); + + // await _PMS_mag.Mag.AddAsync(mn); + // await _PMS_mag.SaveChangesAsync(); + // } + // transaction2.Commit(); + // } + // } + // if (model.compo_del != null && model.compo_del.Count() > 0) + // { + // using (var transaction3 = _PMS_mag.Database.BeginTransaction()) + // { + // foreach (Compo_Impia co in model.compo_del) + // { + // Mag_New mn = new Mag_New(); + // riga = riga + 1; + // mn = compo_ImpiaToMag_New(co, riga, newSerial, tecnico); + + // await _PMS_mag.Mag.AddAsync(mn); + // await _PMS_mag.SaveChangesAsync(); + // } + // transaction3.Commit(); + // } + // } + // break; + // case Clienti.VT: + // using (var transactionVT = _VT_rapptable.Database.BeginTransaction()) + // { + // await _VT_rapptable.Rapps.AddAsync(r); + // await _VT_rapptable.SaveChangesAsync(); + // transactionVT.Commit(); + // } + // // 27/02/2025 agggiunta gestione Vt_MagNew + // riga = 0; + // if (model.compo_add != null && model.compo_add.Count() > 0) + // { + // using (var transactionVT2 = _VT_rapptable.Database.BeginTransaction()) + // { + // foreach (Saldiart co in model.compo_add) + // { + // Vt_Mag_New vtmn = new Vt_Mag_New(); + // riga = riga + 1; + // vtmn = SaldiArtToVtMag_New(co, riga, newSerial, tecnico, ten2); + + // await _VT_MagNew.MagNewVt.AddAsync(vtmn); + // await _VT_MagNew.SaveChangesAsync(); + // } + // transactionVT2.Commit(); + // } + // } + // if (model.compo_del != null && model.compo_del.Count() > 0) + // { + // using (var transactionVt3 = _VT_rapptable.Database.BeginTransaction()) + // { + // foreach (Compo_Impia co in model.compo_del) + // { + // Vt_Mag_New vtmn = new Vt_Mag_New(); + // riga = riga + 1; + // vtmn = compo_ImpiaToVt_Mag_New(co, riga, newSerial, tecnico, ten2); + + // await _VT_MagNew.MagNewVt.AddAsync(vtmn); + // await _VT_MagNew.SaveChangesAsync(); + // } + // transactionVt3.Commit(); + // } + // } + // break; + // case Clienti.LW: + + // using (var transaction = _LW_rapp.Database.BeginTransaction()) + // { + // await _LW_rapp.Rapps.AddAsync(r); + // await _LW_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + // riga = 0; + // if (model.compo_add != null && model.compo_add.Count() > 0) + // { + // using (var transaction2 = _LW_mag.Database.BeginTransaction()) + // { + // foreach (Saldiart co in model.compo_add) + // { + // riga = riga + 1; + // Mag_New mn = new Mag_New(); + // mn = saldiartToMag_New(co, riga, newSerial, tecnico); + + // await _LW_mag.Mag.AddAsync(mn); + // await _LW_mag.SaveChangesAsync(); + // } + // transaction2.Commit(); + // } + // } + // if (model.compo_del != null && model.compo_del.Count() > 0) + // { + // using (var transaction3 = _LW_mag.Database.BeginTransaction()) + // { + // foreach (Compo_Impia co in model.compo_del) + // { + // Mag_New mn = new Mag_New(); + // riga = riga + 1; + // mn = compo_ImpiaToMag_New(co, riga, newSerial, tecnico); + + // await _LW_mag.Mag.AddAsync(mn); + // await _LW_mag.SaveChangesAsync(); + // } + // transaction3.Commit(); + // } + // } + // break; + // case Clienti.Tedesco: + + // using (var transaction = _Tedes_rapp.Database.BeginTransaction()) + // { + // await _Tedes_rapp.Rapps.AddAsync(r); + // await _Tedes_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + // riga = 0; + // if (model.compo_add != null && model.compo_add.Count() > 0) + // { + // using (var transaction2 = _Tedes_mag.Database.BeginTransaction()) + // { + // foreach (Saldiart co in model.compo_add) + // { + // riga = riga + 1; + // Mag_New mn = new Mag_New(); + // mn = saldiartToMag_New(co, riga, newSerial, tecnico); + + // await _Tedes_mag.Mag.AddAsync(mn); + // await _Tedes_mag.SaveChangesAsync(); + // } + // transaction2.Commit(); + // } + // } + // if (model.compo_del != null && model.compo_del.Count() > 0) + // { + // using (var transaction3 = _Tedes_mag.Database.BeginTransaction()) + // { + // foreach (Compo_Impia co in model.compo_del) + // { + // Mag_New mn = new Mag_New(); + // riga = riga + 1; + // mn = compo_ImpiaToMag_New(co, riga, newSerial, tecnico); + + // await _Tedes_mag.Mag.AddAsync(mn); + // await _Tedes_mag.SaveChangesAsync(); + // } + // transaction3.Commit(); + // } + // } + // break; + + // case Clienti.Syscom: + + // using (var transaction = _Sys_rapp.Database.BeginTransaction()) + // { + // await _Sys_rapp.Rapps.AddAsync(r); + // await _Sys_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + // riga = 0; + // if (model.compo_add != null && model.compo_add.Count() > 0) + // { + // using (var transaction2 = _Sys_mag.Database.BeginTransaction()) + // { + // foreach (Saldiart co in model.compo_add) + // { + // riga = riga + 1; + // Mag_New mn = new Mag_New(); + // mn = saldiartToMag_New(co, riga, newSerial, tecnico); + + // await _Sys_mag.Mag.AddAsync(mn); + // await _Sys_mag.SaveChangesAsync(); + // } + // transaction2.Commit(); + // } + // } + // if (model.compo_del != null && model.compo_del.Count() > 0) + // { + // using (var transaction3 = _Sys_mag.Database.BeginTransaction()) + // { + // foreach (Compo_Impia co in model.compo_del) + // { + // Mag_New mn = new Mag_New(); + // riga = riga + 1; + // mn = compo_ImpiaToMag_New(co, riga, newSerial, tecnico); + + // await _Sys_mag.Mag.AddAsync(mn); + // await _Sys_mag.SaveChangesAsync(); + // } + // transaction3.Commit(); + // } + // } + // break; + + // default: + // break; + //} + + calltec = await getChiamataBySerial(r.seriale_chiamata, token); + calltec_out = fillChiamateOut(calltec, ten); + calltec_out.err_status_code = StatiRisposta.Ok; + return StatusCode(StatusCodes.Status200OK, calltec_out); + + } + else + { + calltec_out.err_title = "Impossibile chiudere la chiamata"; + calltec_out.err_detail = "Chiamata precendentemente chiusa: " + model.seriale_chiamata; + calltec_out.err_status_code = StatiRisposta.OperazioneNonAmmessa; + return StatusCode(StatusCodes.Status500InternalServerError, calltec_out); + } + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + calltec_out.err_title = ex.Message; + calltec_out.err_detail = errmsg; + calltec_out.err_status_code = StatiRisposta.ErroreInterno; + return StatusCode(StatusCodes.Status500InternalServerError, calltec_out); + } + + //return calltec_out; + } + + /// rilascia: elimina record su RAPP_NEW con i dati dell'intervento return:ActionResult + [HttpPost] + [Route("chiamate/rilascia")] + public async Task> rilascia([FromBody] Input model, string token) + { + string ten = getClaimValueByToken(token, "tenant"); + string ten2 = getClaimValueByToken(token, "tenant2"); + string tecnico = getClaimValueByToken(token, "tccodice"); + string tenConf = getClaimValueByToken(token, "tenantConfigurazioni"); + if (string.IsNullOrEmpty(ten)) + { + ten = tenConf; + } + Chiamate calltec = new Chiamate(); + Chiamate_out calltec_out = new Chiamate_out(); + Rapp_New r = null; + + try + { + if ((r=await checkChiamataDaRilasciare (ten, model.seriale_rapportino, TipoRapportino.PresaInCarico, ten2))!=null) + { + using (var transactionVT = _VT_rapptable.Database.BeginTransaction()) + { + _VT_rapptable.Rapps.Remove(r); + await _VT_rapptable.SaveChangesAsync(); + transactionVT.Commit(); + } + //switch (ten) + //{ + // case Clienti.Marrocco: + // using (var transaction = _Marro_rapp.Database.BeginTransaction()) + // { + // _Marro_rapp.Rapps.Remove(r); + // await _Marro_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + + // break; + // case Clienti.Ferrari: + // using (var transaction = _Ferra_rapp.Database.BeginTransaction()) + // { + // _Ferra_rapp.Rapps.Remove(r); + // await _Ferra_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + + // break; + // case Clienti.Sarom: + // using (var transaction = _Sarom_rapp.Database.BeginTransaction()) + // { + // _Sarom_rapp.Rapps.Remove(r); + // await _Sarom_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + + // break; + // case Clienti.Gitoga: + // using (var transactionGit = _Gitoga_rapp.Database.BeginTransaction()) + // { + // _Gitoga_rapp.Rapps.Remove(r); + // await _Gitoga_rapp.SaveChangesAsync(); + // transactionGit.Commit(); + // } + + // break; + // case Clienti.Lifta: + // using (var transactionLif = _Lifta_rapp.Database.BeginTransaction()) + // { + // _Lifta_rapp.Rapps.Remove(r); + // await _Lifta_rapp.SaveChangesAsync(); + // transactionLif.Commit(); + // } + + // break; + // case Clienti.Sicilia: + // using (var transaction = _Sicilia_rapp.Database.BeginTransaction()) + // { + // _Sicilia_rapp.Rapps.Remove(r); + // await _Sicilia_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + // break; + // case Clienti.Discovery: + // using (var transaction = _Disco_rapp.Database.BeginTransaction()) + // { + // _Disco_rapp.Rapps.Remove(r); + // await _Disco_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + // break; + // case Clienti.Siet: + + // using (var transaction = _Siet_rapp.Database.BeginTransaction()) + // { + // _Siet_rapp.Rapps.Remove(r); + // await _Siet_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + // break; + // case Clienti.PMS: + + // using (var transaction = _Pms_rapp.Database.BeginTransaction()) + // { + // _Pms_rapp.Rapps.Remove(r); + // await _Pms_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + // break; + // case Clienti.VT: + // using (var transactionVT = _VT_rapptable.Database.BeginTransaction()) + // { + // _VT_rapptable.Rapps.Remove(r); + // await _VT_rapptable.SaveChangesAsync(); + // transactionVT.Commit(); + // } + // break; + // case Clienti.LW: + + // using (var transaction = _LW_rapp.Database.BeginTransaction()) + // { + // _LW_rapp.Rapps.Remove(r); + // await _LW_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + // break; + // case Clienti.Tedesco : + + // using (var transaction = _Tedes_rapp.Database.BeginTransaction()) + // { + // _Tedes_rapp.Rapps.Remove(r); + // await _Tedes_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + // break; + // case Clienti.Syscom: + + // using (var transaction = _Sys_rapp.Database.BeginTransaction()) + // { + // _Sys_rapp.Rapps.Remove(r); + // await _Sys_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + // break; + // default: + // break; + //} + calltec = await getChiamataBySerial(r.seriale_chiamata, token); + calltec_out = fillChiamateOut(calltec, ten); + calltec_out.err_status_code = StatiRisposta.Ok; + return StatusCode(StatusCodes.Status200OK, calltec_out); + + } + else + { + calltec_out.err_title = "Impossibile rilasciare la chiamata.Chiamata non trovata"; + StringBuilder sb = new StringBuilder(); + sb.AppendLine("seriale Chiamata : " + model.seriale_chiamata); + sb.AppendLine("seriale Rapportino : " + model.seriale_rapportino); + calltec_out.err_detail = sb.ToString(); + sb.Clear(); + calltec_out.err_status_code = StatiRisposta.OperazioneNonAmmessa; + return StatusCode(StatusCodes.Status500InternalServerError, calltec_out); + } + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + calltec_out.err_title = ex.Message; + calltec_out.err_detail = errmsg; + calltec_out.err_status_code = StatiRisposta.ErroreInterno; + return StatusCode(StatusCodes.Status500InternalServerError, calltec_out); + } + + //return calltec_out; + } + #endregion + + #region MANUTENZIONI + private Prese fillPreseByInput(Input i, string token) + { + string ten = getClaimValueByToken(token, "tenant"); + string tecnico = getClaimValueByToken(token, "tccodice"); + Prese p = new Prese(); + p.picodazi = ten; + p.pimpianto = i.pimpianto; + p.picodint = i.picodint; + p.picodtec = tecnico; + p.pidatman = i.pidatman; + p.cpccchk = getCpccchk(10); + return p; + } + private async Task fillRappNewChiudiManByInput(Input model, string token, string newSerial,Configurazioni co) + { + Rapp_New r = new Rapp_New(); + //DateTime dateIni = new DateTime(1900, 1, 1); + DateTime adesso = DateTime.Now; + string ten = getClaimValueByToken(token, "tenant"); + string tecnico = getClaimValueByToken(token, "tccodice"); + string ten2 = getClaimValueByToken(token, "tenant2"); + string tenConf = getClaimValueByToken(token, "tenantConfigurazioni"); + var sBuono = await getSerBuonoManutenzione(ten, co.prefisso_buoni_man); + + //model = fakeInputMan(model); + r.seriale_rapportino = newSerial; + + r.tipo_rapportino = TipoRapportino.ManutenzioneChiusa; + r.azienda_impianto = ten; + //r.codice_impianto = model.codice_impianto; + r.codice_impianto = model.pimpianto;//da tabella PIPRESA + r.azienda_chiamata = ten; + r.seriale_chiamata = String.Empty; + r.seriale_commessa = string.Empty; + + + //var time = "03/07/2023 00:00:00"; + //adesso = DateTime.ParseExact(time, "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture); + r.data_rapportino = adesso; + + + //r.ora_ini_rapportino = adesso.Hour.ToString(); + r.ora_ini_rapportino = model.ora_ini_rapportino; + r.ora_fin_rapportino = model.ora_fin_rapportino; + //r.min_ini_rapportino = adesso.Minute.ToString(); + r.min_ini_rapportino = model.min_ini_rapportino; + r.min_fin_rapportino = model.min_fin_rapportino; + r.codice_chiusura_1 = model.codice_chiusura_1; + r.codice_chiusura_2 = model.codice_chiusura_2; + r.codice_chiusura_3 = model.codice_chiusura_3; + r.codice_chiusura_4 = model.codice_chiusura_4; + r.codice_chiusura_5 = model.codice_chiusura_5; + r.codice_chiusura_6 = model.codice_chiusura_6; + r.codice_chiusura_7 = model.codice_chiusura_7; + r.codice_chiusura_8 = model.codice_chiusura_8; + r.codice_chiusura_9 = model.codice_chiusura_9; + r.codice_chiusura_10 = model.codice_chiusura_10; + r.descrizione_intervento = model.descrizione_intervento; + r.stato_finale = model.stato_finale; + r.azienda_tecnico = ten; + r.codice_tecnico = tecnico; + r.rifiutata = string.Empty; + r.firma = model.firma; + r.incarico = string.Empty; + r.data_validita = model.pidatman; + + //r.immagine = co.path_buoni + sBuono.ToString(); + + r.esito_intervento = model.esito_intervento; + r.note_intervento = model.note_intervento; + r.note_esito = model.note_esito; + r.difetti_riscontrati = model.difetti_riscontrati; + r.lavoro_eseguito = model.lavoro_eseguito; + r.nuovo_contratto = model.nuovo_contratto; + r.ore_lavoro = model.ore_lavoro; + r.causale = model.causale; + r.materiale = model.materiale; + r.diritto_chiamata = model.diritto_chiamata; + r.manodopera = model.manodopera; + r.spese_viaggio = model.spese_viaggio; + r.pagamento = model.pagamento; + r.anticipo = model.anticipo; + r.totale = model.totale; + r.note_pagamento = model.note_pagamento; + r.tipo_intervento = model.tipo_intervento; + r.rafoto1 = model.rafoto1; + r.rafoto2 = model.rafoto2; + r.rafoto3 = model.rafoto3; + r.rafoto4 = model.rafoto4; + r.rafoto5 = model.rafoto5; + r.rafoto6 = model.rafoto6; + r.rafoto7 = model.rafoto7; + r.rafoto8 = model.rafoto8; + r.rafoto9 = model.rafoto9; + r.rafoto10 = model.rafoto10; + //r.codice_intervento = model.codice_intervento; + r.codice_intervento = model.picodint;// da tabella PIPRESA + //r.data_effettiva = model.data_effettiva; + r.data_effettiva = model.pidatman;// da tabella PIPRESA + + + //r.immagine = model.immagine; + r.immagine = string.Format(@"{0}\{1}.jpg",co.path_buoni,sBuono.ToString()); + //string ts = DateTime.Now.ToString("yyyyMMddHHmmss"); + //r.immagine = string.Format(@"{0}\{1}_{2}.jpg", co.path_buoni, sBuono.ToString(),ts); + r.ser_buono = sBuono.ToString(); + Console.WriteLine(string.Format("*********** {2} metodo chiudi MAN: tenant:{0} tenant2: {1} tenantConf: {5} buono: {3} tecnico:{4} ", ten, ten2, DateTime.Now.ToString(), r.ser_buono, r.codice_tecnico, tenConf)); + + return r; + } + private async Task getSerBuonoManutenzione(string ten,string suff) + { + //inizializzo il buono nel caso non lo trovi in tabella (per Sicilia è stato così) + //TODO da togliere + //suff = "MAK"; + string seriale = suff+"00000"; + + //_rapp_new = getRappNewByTenant(ten); + //var rapp = await _rapp_new.Where(t => t.azienda_impianto == ten && t.ser_buono != null && t.tipo_rapportino == TipoRapportino.ManutenzioneChiusa).OrderByDescending(t => t.seriale_rapportino).Take(1).ToListAsync(); + var rapp = await _rapp_new.Where(t => t.azienda_impianto == ten && t.ser_buono != null && t.ser_buono.Trim().Contains(suff) && t.tipo_rapportino == TipoRapportino.ManutenzioneChiusa).OrderByDescending(t => t.seriale_rapportino).Take(1).ToListAsync(); + + if (rapp != null && rapp.Count() > 0) + { + seriale = getNewSerialeBuonoMan(rapp.First().ser_buono, suff); + } + else + { + seriale = getNewSerialeBuonoMan(seriale, suff); + } + return seriale; + } + private Manprog_out fillManprogOut(Manprog m, string tenant) + { + Manprog_out o = new Manprog_out(); + o.ctcodint=m.ctcodint; + o.ctdatpro = m.ctdatpro; + o.ctdesint = m.ctdesint; + o.imindiri1 = m.imindiri1; + o.imindiri2 = m.imindiri2; + + o.imindiri3 = m.imindiri3; + o.imindiri4 = m.imindiri4; + o.imindiri5 = m.imindiri5; + o.imlocali = m.imlocali; + o.imcodcap = m.imcodcap; + + o.imcomune = m.imcomune; + o.improvin = m.improvin; + o.improvin = m.improvin; + + o.immatric = m.immatric; + o.imnumimp = m.imnumimp; + o.imubicaz = m.imubicaz; + + o.tccodice = m.tccodice; + o.seriale_rapportino = m.seriale_rapportino; + o.ser_buono = m.ser_buono; + o.generato = m.generato; + + + o.pimpianto = m.pimpianto; + o.picodint = m.picodint; + o.pidatman = m.pidatman; + o.err_title = m.err_title; + o.err_detail = m.err_detail; + o.err_status_code = m.err_status_code; + + o.telefono1 = m.telefono1; + o.telefono2 = m.telefono2; + o.cliente = m.cliente; + o.chiamata = m.chiamata; + o.spe_viaggio = m.spe_viaggio; + + //campi chiave + o.ctcodazi = tenant; + o.ctcodimp = m.ctcodimp; + o.ctdatpro = Convert.ToDateTime(m.ctdatpro); + o.ctcodint = m.ctcodint; + //FINE campi chiave + StringBuilder sb = new StringBuilder(); + Dictionary dic = new Dictionary(); + + string indStampa = string.Empty; + //switch (tenant) + //{ + // case Clienti.Marrocco: + // #region marrocco + // indStampa = formattaIndirizzoStampaManutMarrocco(m); + + // dic.Add("Num. Impianto", !string.IsNullOrEmpty(m.imnumimp) ? m.imnumimp : String.Empty); + // dic.Add("Ubicazione", !string.IsNullOrEmpty(m.imubicaz) ? m.imubicaz : String.Empty); + // #endregion + // break; + // case Clienti.Gitoga: + // #region gitoga + // indStampa = formattaIndirizzoStampaManutMarrocco(m); + + // dic.Add("Num. Impianto", !string.IsNullOrEmpty(m.imnumimp) ? m.imnumimp : String.Empty); + // dic.Add("Ubicazione", !string.IsNullOrEmpty(m.imubicaz) ? m.imubicaz : String.Empty); + // #endregion + // break; + // case Clienti.Lifta: + // #region lifta + // indStampa = formattaIndirizzoStampaManutMarrocco(m); + + // dic.Add("Num. Impianto", !string.IsNullOrEmpty(m.imnumimp) ? m.imnumimp : String.Empty); + // dic.Add("Ubicazione", !string.IsNullOrEmpty(m.imubicaz) ? m.imubicaz : String.Empty); + // #endregion + // break; + // case Clienti.Sicilia: + // #region sicila dictionary + // dic.Add("Gennaio", !string.IsNullOrEmpty(m.mpmesgen) ? m.mpmesgen : String.Empty); + // dic.Add("Febbraio", !string.IsNullOrEmpty(m.mpmesfeb) ? m.mpmesfeb : String.Empty); + // dic.Add("Marzo", !string.IsNullOrEmpty(m.mpmesmar) ? m.mpmesmar : String.Empty); + // dic.Add("Aprile", !string.IsNullOrEmpty(m.mpmesapr) ? m.mpmesapr : String.Empty); + // dic.Add("Maggio", !string.IsNullOrEmpty(m.mpmesmag) ? m.mpmesmag : String.Empty); + // dic.Add("Giugno", !string.IsNullOrEmpty(m.mpmesgiu) ? m.mpmesgiu : String.Empty); + + // dic.Add("Luglio", !string.IsNullOrEmpty(m.mpmeslug) ? m.mpmeslug : String.Empty); + // dic.Add("Agosto", !string.IsNullOrEmpty(m.mpmesago) ? m.mpmesago : String.Empty); + // dic.Add("Settembre", !string.IsNullOrEmpty(m.mpmesset) ? m.mpmesset : String.Empty); + // dic.Add("Ottobre", !string.IsNullOrEmpty(m.mpmesott) ? m.mpmesott : String.Empty); + // dic.Add("Novembre", !string.IsNullOrEmpty(m.mpmesnov) ? m.mpmesnov : String.Empty); + // dic.Add("Dicembre", !string.IsNullOrEmpty(m.mpmesdic) ? m.mpmesdic : String.Empty); + // #endregion + + // #region sicilia indirizzo + // sb.Append("SPETT.LE :"); + // sb.Append(!string.IsNullOrEmpty(m.imindiri1) ? m.imindiri1.Trim() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(m.imindiri2) ? m.imindiri2.Trim() + " " : string.Empty); + // sb.Append(m.imindiri3 != null ? m.imindiri3.ToString() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(m.imindiri4) ? m.imindiri4.Trim() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(m.imindiri5) ? m.imindiri5.Trim() : string.Empty); + // indStampa = sb.ToString(); + // #endregion + // break; + // case Clienti.Discovery: + // #region discovery + // indStampa = formattaIndirizzoStampaManutDiscovery(m); + + // dic.Add("Num. Impianto", !string.IsNullOrEmpty(m.imnumimp) ? m.imnumimp : String.Empty); + // dic.Add("Ubicazione", !string.IsNullOrEmpty(m.imubicaz) ? m.imubicaz : String.Empty); + // #endregion + // break; + // default: + // sb.Append("SPETT.LE :"); + // sb.Append(!string.IsNullOrEmpty(m.imindiri1) ? m.imindiri1.Trim() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(m.imindiri2) ? m.imindiri2.Trim() + " " : string.Empty); + // sb.Append(m.imindiri3 != null ? m.imindiri3.ToString() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(m.imindiri4) ? m.imindiri4.Trim() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(m.imindiri5) ? m.imindiri5.Trim() : string.Empty); + // indStampa = sb.ToString(); + // break; + //} + o.altri = dic; + o.indirizzo_stampa = indStampa; + sb.Clear(); + + string itemList = string.Empty; + //switch (tenant) + //{ + // case Clienti.Marrocco: + // #region marrocco + // itemList = formattaItemManutenzioniMarrocco(m); + // #endregion + // break; + + // case Clienti.Gitoga: + // #region gitoga + // itemList = formattaItemManutenzioniMarrocco(m); + // #endregion + // break; + + // case Clienti.Lifta: + // #region lifta + // itemList = formattaItemManutenzioniMarrocco(m); + // #endregion + // break; + + // case Clienti.Sicilia: + // #region sicilia lista man + // sb.Append(!string.IsNullOrEmpty(m.imindiri1) ? m.imindiri1.Trim() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(m.imindiri2) ? m.imindiri2.Trim() + " " : string.Empty); + // sb.Append(m.imindiri3 != null ? m.imindiri3.ToString() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(m.imindiri4) ? m.imindiri4.Trim() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(m.imindiri5) ? m.imindiri5.Trim() : string.Empty); + // sb.Append(!string.IsNullOrEmpty(m.imcodcap) ? " " + m.imcodcap.Trim() : string.Empty); + // sb.Append(!string.IsNullOrEmpty(m.imlocali) ? " " + m.imlocali.Trim() : string.Empty); + + // if (!string.IsNullOrEmpty(m.ctcodimp)) + // { + // sb.Append("
"); + // sb.Append("Impianto : " + m.ctcodimp.Trim()); + // } + // itemList = sb.ToString(); + // #endregion + // break; + + // case Clienti.Tedesco: + // #region Tedesco lista man + // if (!string.IsNullOrEmpty(m.ctcodimp)) + // { + // //var sBuono = await getSerBuonoManutenzione(ten, co.prefisso_buoni_man); + // var a = getDescrImpTedesco(m.ctcodimp, tenant); + // string appo = a.Result; + // sb.Append("N.pratica : " + appo); + // sb.Append("
"); + // } + + // sb.Append(!string.IsNullOrEmpty(m.imindiri1) ? m.imindiri1.Trim() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(m.imindiri2) ? m.imindiri2.Trim() + " " : string.Empty); + // sb.Append(m.imindiri3 != null ? m.imindiri3.ToString() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(m.imindiri4) ? m.imindiri4.Trim() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(m.imindiri5) ? m.imindiri5.Trim() : string.Empty); + // sb.Append(!string.IsNullOrEmpty(m.imcodcap) ? " " + m.imcodcap.Trim() : string.Empty); + // sb.Append(!string.IsNullOrEmpty(m.imlocali) ? " " + m.imlocali.Trim() : string.Empty); + + // if (!string.IsNullOrEmpty(m.ctcodimp)) + // { + // sb.Append("
"); + // sb.Append("Impianto : " + m.ctcodimp.Trim()); + // } + // if (!string.IsNullOrEmpty(m.imubicaz)) + // { + // sb.Append("
"); + // sb.Append("Ubicazione : " + m.imubicaz.Trim()); + // } + // if (!string.IsNullOrEmpty(m.immatric)) + // { + // sb.Append("
"); + // sb.Append("Matricola : " + m.immatric.Trim()); + // } + + // itemList = sb.ToString(); + // #endregion + // break; + + // default: + // sb.Append(!string.IsNullOrEmpty(m.imindiri1) ? m.imindiri1.Trim() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(m.imindiri2) ? m.imindiri2.Trim() + " " : string.Empty); + // sb.Append(m.imindiri3 != null ? m.imindiri3.ToString() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(m.imindiri4) ? m.imindiri4.Trim() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(m.imindiri5) ? m.imindiri5.Trim() : string.Empty); + // sb.Append(!string.IsNullOrEmpty(m.imcodcap) ? " " + m.imcodcap.Trim() : string.Empty); + // sb.Append(!string.IsNullOrEmpty(m.imlocali) ? " " + m.imlocali.Trim() : string.Empty); + + // if (!string.IsNullOrEmpty(m.ctcodimp)) + // { + // sb.Append("
"); + // sb.Append("Impianto : " + m.ctcodimp.Trim()); + // } + // if (!string.IsNullOrEmpty(m.imubicaz)) + // { + // sb.Append("
"); + // sb.Append("Ubicazione : " + m.imubicaz.Trim()); + // } + // if (!string.IsNullOrEmpty(m.immatric)) + // { + // sb.Append("
"); + // sb.Append("Matricola : " + m.immatric.Trim()); + // } + + // itemList = sb.ToString(); + + // break; + //} + o.impianto_list = itemList; + sb.Clear(); + + string rif_impianto = string.Empty; + //switch (tenant) + //{ + // case Clienti.Marrocco: + // #region marrocco + // rif_impianto = formattaRifImpMarrocco(m); + // #endregion + // break; + + // case Clienti.Discovery: + // #region dicovery + // rif_impianto = formattaRifImpDiscovery(m); + // #endregion + // break; + + // case Clienti.Gitoga: + // #region gitoga + // rif_impianto = formattaRifImpMarrocco(m); + // #endregion + // break; + + // case Clienti.Lifta: + // #region lifta + // rif_impianto = formattaRifImpMarrocco(m); + // #endregion + // break; + + // case Clienti.Sicilia: + // #region sicilia lista man + + + // if (!string.IsNullOrEmpty(m.ctcodimp)) + // { + + // sb.AppendLine("Impianto : " + m.ctcodimp.Trim()); + // } + // rif_impianto = sb.ToString(); + // #endregion + // break; + + // default: + // if (!string.IsNullOrEmpty(m.ctcodimp)) + // { + // sb.Append("N. Impianto : " + m.ctcodimp.Trim()); + // } + // rif_impianto = sb.ToString(); + // break; + //} + o.riferimento_impianto = rif_impianto; + sb.Clear(); + + o.imazirif = m.imazirif; + o.imzonman = m.imzonman; + o.imrefref = m.imrefref; + + return o; + } + private Manprog_out fillManprogOut2(Manprog m, string tenant) + { + Manprog_out o = new Manprog_out(); + o.ctcodint = m.ctcodint; + o.ctdatpro = m.ctdatpro; + o.ctdesint = m.ctdesint; + o.imindiri1 = m.imindiri1; + o.imindiri2 = m.imindiri2; + + o.imindiri3 = m.imindiri3; + o.imindiri4 = m.imindiri4; + o.imindiri5 = m.imindiri5; + o.imlocali = m.imlocali; + o.imcodcap = m.imcodcap; + + o.imcomune = m.imcomune; + o.improvin = m.improvin; + + o.improvin = m.improvin; + o.improvin = m.improvin; + o.improvin = m.improvin; + + o.immatric = m.immatric; + o.imnumimp = m.imnumimp; + o.imubicaz = m.imubicaz; + + o.tccodice = m.tccodice; + o.seriale_rapportino = m.seriale_rapportino; + o.ser_buono = m.ser_buono; + o.generato = m.generato; + + + //o.pimpianto = m.pimpianto; + //questo è il campo che l'app deve avere per accorgersi del cambiamento di stato + //quindi gli passo, se lo trovo vuoto, quello riletto dalla manutenzione + string impianto = string.Empty; + if (!string.IsNullOrEmpty(m.pimpianto)) + impianto = m.pimpianto; + else + impianto = m.ctcodimp; + o.pimpianto = impianto; + + //o.picodint = m.picodint; + string codice_intervento = string.Empty; + if (!string.IsNullOrEmpty(m.picodint)) + codice_intervento = m.picodint; + else + codice_intervento = m.ctcodint; + o.picodint = codice_intervento; + + //o.pidatman = m.pidatman; + DateTime? data_manutenzione = null; + if (m.pidatman != null) + data_manutenzione = m.pidatman; + else + data_manutenzione = m.ctdatpro; + o.pidatman = data_manutenzione; + + + o.err_title = m.err_title; + o.err_detail = m.err_detail; + o.err_status_code = m.err_status_code; + + o.telefono1 = m.telefono1; + o.telefono2 = m.telefono2; + o.cliente = m.cliente; + o.chiamata = m.chiamata; + o.spe_viaggio = m.spe_viaggio; + + //campi chiave + o.ctcodazi = tenant; + o.ctcodimp = m.ctcodimp; + o.ctdatpro = Convert.ToDateTime(m.ctdatpro); + o.ctcodint = m.ctcodint; + //FINE campi chiave + StringBuilder sb = new StringBuilder(); + Dictionary dic = new Dictionary(); + + + + //posizione 1-questa stampa è quella che va sotto il numero del buono e + //ha l'indirizzo dell'impianto che comincia con spettabile + string indStampa = string.Empty; + //switch (tenant) + //{ + // case Clienti.Marrocco: + // #region marrocco + // indStampa = formattaIndirizzoStampaManutMarrocco(m); + // #endregion + // break; + + // case Clienti.Discovery: + // #region discovery + // indStampa = formattaIndirizzoStampaManutDiscovery(m); + // #endregion + // break; + + // case Clienti.Gitoga: + // #region gitoga + // indStampa = formattaIndirizzoStampaManutMarrocco(m); + // #endregion + // break; + + // case Clienti.Lifta: + // #region lifta + // indStampa = formattaIndirizzoStampaManutMarrocco(m); + // #endregion + // break; + + // case Clienti.Sicilia: + // #region sicila dictionary + // dic.Add("Gennaio", !string.IsNullOrEmpty(m.mpmesgen) ? m.mpmesgen : String.Empty); + // dic.Add("Febbraio", !string.IsNullOrEmpty(m.mpmesfeb) ? m.mpmesfeb : String.Empty); + // dic.Add("Marzo", !string.IsNullOrEmpty(m.mpmesmar) ? m.mpmesmar : String.Empty); + // dic.Add("Aprile", !string.IsNullOrEmpty(m.mpmesapr) ? m.mpmesapr : String.Empty); + // dic.Add("Maggio", !string.IsNullOrEmpty(m.mpmesmag) ? m.mpmesmag : String.Empty); + // dic.Add("Giugno", !string.IsNullOrEmpty(m.mpmesgiu) ? m.mpmesgiu : String.Empty); + + // dic.Add("Luglio", !string.IsNullOrEmpty(m.mpmeslug) ? m.mpmeslug : String.Empty); + // dic.Add("Agosto", !string.IsNullOrEmpty(m.mpmesago) ? m.mpmesago : String.Empty); + // dic.Add("Settembre", !string.IsNullOrEmpty(m.mpmesset) ? m.mpmesset : String.Empty); + // dic.Add("Ottobre", !string.IsNullOrEmpty(m.mpmesott) ? m.mpmesott : String.Empty); + // dic.Add("Novembre", !string.IsNullOrEmpty(m.mpmesnov) ? m.mpmesnov : String.Empty); + // dic.Add("Dicembre", !string.IsNullOrEmpty(m.mpmesdic) ? m.mpmesdic : String.Empty); + // #endregion + + // #region sicilia indirizzo + // sb.Append("SPETT.LE :"); + // sb.Append(!string.IsNullOrEmpty(m.imindiri1) ? m.imindiri1.Trim() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(m.imindiri2) ? m.imindiri2.Trim() + " " : string.Empty); + // sb.Append(m.imindiri3 != null ? m.imindiri3.ToString() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(m.imindiri4) ? m.imindiri4.Trim() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(m.imindiri5) ? m.imindiri5.Trim() : string.Empty); + // indStampa = sb.ToString(); + // #endregion + // break; + + // default: + // sb.Append("SPETT.LE :"); + // sb.Append(!string.IsNullOrEmpty(m.imindiri1) ? m.imindiri1.Trim() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(m.imindiri2) ? m.imindiri2.Trim() + " " : string.Empty); + // sb.Append(m.imindiri3 != null ? m.imindiri3.ToString() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(m.imindiri4) ? m.imindiri4.Trim() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(m.imindiri5) ? m.imindiri5.Trim() : string.Empty); + // indStampa = sb.ToString(); + // break; + //} + o.indirizzo_stampa = indStampa; + o.altri = dic; + sb.Clear(); + + //posizione 2 + string itemList = string.Empty; + //switch (tenant) + //{ + // case Clienti.Marrocco: + // #region marrocco + // itemList = formattaItemManutenzioniMarrocco(m); + // #endregion + // break; + + // case Clienti.Gitoga: + // #region gitoga + // itemList = formattaItemManutenzioniMarrocco(m); + + // #endregion + // break; + + // case Clienti.Lifta: + // #region lifta + // itemList = formattaItemManutenzioniMarrocco(m); + // #endregion + // break; + + // case Clienti.Sicilia: + // #region sicilia lista man + // sb.Append(!string.IsNullOrEmpty(m.imindiri1) ? m.imindiri1.Trim() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(m.imindiri2) ? m.imindiri2.Trim() + " " : string.Empty); + // sb.Append(m.imindiri3 != null ? m.imindiri3.ToString() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(m.imindiri4) ? m.imindiri4.Trim() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(m.imindiri5) ? m.imindiri5.Trim() : string.Empty); + // sb.Append(!string.IsNullOrEmpty(m.imcodcap) ? "," + m.imcodcap.Trim() : string.Empty); + // sb.Append(!string.IsNullOrEmpty(m.imlocali) ? "," + m.imlocali.Trim() : string.Empty); + + // if (!string.IsNullOrEmpty(m.ctcodimp)) + // { + // sb.Append("
"); + // sb.Append("Impianto : " + m.ctcodimp.Trim()); + // } + // itemList = sb.ToString(); + // #endregion + // break; + + // default: + // sb.Append(!string.IsNullOrEmpty(m.imindiri1) ? m.imindiri1.Trim() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(m.imindiri2) ? m.imindiri2.Trim() + " " : string.Empty); + // sb.Append(m.imindiri3 != null ? m.imindiri3.ToString() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(m.imindiri4) ? m.imindiri4.Trim() + " " : string.Empty); + // sb.Append(!string.IsNullOrEmpty(m.imindiri5) ? m.imindiri5.Trim() : string.Empty); + // sb.Append(!string.IsNullOrEmpty(m.imcodcap) ? "," + m.imcodcap.Trim() : string.Empty); + // sb.Append(!string.IsNullOrEmpty(m.imlocali) ? "," + m.imlocali.Trim() : string.Empty); + + // if (!string.IsNullOrEmpty(m.ctcodimp)) + // { + // sb.Append("
"); + // sb.Append("Impianto : " + m.ctcodimp.Trim()); + // } + // itemList = sb.ToString(); + // break; + //} + o.impianto_list = itemList; + sb.Clear(); + + //posizione 3-questa stampa è quella che va a destra della posizione 1 + //contiene i dati (matricola, ubicazione, num impianto) + string rif_impianto = string.Empty; + //switch (tenant) + //{ + // case Clienti.Marrocco: + // #region marrocco + // rif_impianto = formattaRifImpMarrocco(m); + // #endregion + // break; + + // case Clienti.Gitoga: + // #region gitoga + // rif_impianto = formattaRifImpMarrocco(m); + // #endregion + // break; + + // case Clienti.Discovery: + // #region discovery + // rif_impianto = formattaRifImpDiscovery(m); + // #endregion + // break; + // case Clienti.Lifta: + // #region lifta + // rif_impianto = formattaRifImpMarrocco(m); + // #endregion + // break; + + // case Clienti.Sicilia: + // #region sicilia lista man + + + // if (!string.IsNullOrEmpty(m.ctcodimp)) + // { + + // sb.AppendLine("Impianto : " + m.ctcodimp.Trim()); + // } + // rif_impianto = sb.ToString(); + // #endregion + // break; + + // default: + // if (!string.IsNullOrEmpty(m.ctcodimp)) + // { + // sb.Append("N. Impianto : " + m.ctcodimp.Trim()); + // } + // rif_impianto = sb.ToString(); + // break; + //} + o.riferimento_impianto = rif_impianto; + sb.Clear(); + + o.imazirif = m.imazirif; + o.imzonman = m.imzonman; + o.imrefref = m.imrefref; + + return o; + } + + private async Task getDescrImpTedesco(string codimp, string ten) + { + string descImp = string.Empty; + //_impianto = _Tedes_impianti.Impia; + var l = await _impianto.Where(t => t.imcodazi != null && t.imcodazi.Equals(ten) && t.imcodimp != null && t.imcodimp.Equals(codimp)).ToListAsync(); + if (l != null && l.Count()>0 ) + { + foreach(Impianto i in l) + { + descImp = i.imdescri; + } + } + return descImp; + } + + /// Manutenzioni per tecnico e azienda (tenant). Intervallo: 1 mese prima e 1 mese dopo rispetto a GETDATE() con GENERATO diverso da S return:ActionResult + [HttpGet("manutenzioni")] + public async Task>> manutenzioni(string token) + { + try + { + string ten = getClaimValueByToken(token, "tenant"); + string tecnico = getClaimValueByToken(token, "tccodice"); + //_manutprog = getManutenzioniByTenant(ten); + + //var manut = await _manutprog.Where(t => t.tccodice == tecnico && t.ctcodazi == ten && t.ctdatpro >= da && t.ctdatpro <= a).OrderBy(t => t.ctcodint).ToListAsync(); + var manut = await _manutprog.Where(t => t.tccodice == tecnico && t.ctcodazi == ten).OrderBy(t => t.ctcodint).ToListAsync(); + + List ilist = new List(); + foreach (Manprog ch in manut) + { + Manprog_out o = new Manprog_out(); + o = fillManprogOut(ch, ten); + ilist.Add(o); + } + + + // cerco le manutenzioni che devo fare per sostituzioni SE abilitate + bool cerca_sostituzioni = false; + //cerca_sostituzioni = checkSostituzioneAbilitata(ten); + if(cerca_sostituzioni) + { + //step 1 : trovo tutte le MIE sostituzioni + //_sostituzione = getSostituzioneByTenant(ten); + var s = _sostituzione.Where(t => t.tscodazi.Equals(ten) && t.tscodsos.Trim().Equals(tecnico)); + foreach (Sostituzione ss in s) + { + string tecnico_sostituito = string.Empty; + tecnico_sostituito = ss.tscodtec != null ? ss.tscodtec : string.Empty; + //string zona = string.Empty; + //zona = ss.tscodzon != null ? ss.tscodzon : "zonavuota"; + + //step 2 : trovo tutte le manutenzioni del tecnico che sto sostitutendo e le aggiungo alla mie + var manutSost = await _manutprog.Where(t => t.tccodice == tecnico_sostituito + && t.ctcodazi == ten + //&& t.imzonman == zona + ).OrderBy(t => t.ctcodint).ToListAsync(); + + foreach (Manprog ch in manutSost) + { + Manprog_out o = new Manprog_out(); + o = fillManprogOut(ch, ten); + ilist.Add(o); + } + } + } + + IEnumerable enumerable = ilist as IEnumerable; + //return enumerable; + return StatusCode(StatusCodes.Status200OK, enumerable); + } + catch (Exception ex) + { + return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); + } + } + + /// prendi_in_carico: inserisce record su Prese con i dati dell'intervento return:ActionResult TEDES_MAGAZZINIDbContext + [HttpPost] + [Route("manutenzioni/prendi_in_carico")] + public async Task> prendiInCaricoMan([FromBody] Input model, string token) + { + string ten = getClaimValueByToken(token, "tenant"); + Manprog man=new Manprog(); + Manprog_out output = new Manprog_out(); + + try + { + if (await checkManutenzionePresaInCarico(ten, model.pimpianto, model.picodint, model.pidatman) == 0) + { + Prese r = fillPreseByInput(model, token); + + //man = await getManutenzioneByChiave(model, token); + man = await getManutenzioneByChiave2(r, token); + + //output = fillManprogOut(man, ten); + output = fillManprogOut2(man, ten); + output.err_status_code = StatiRisposta.Ok; + return StatusCode(StatusCodes.Status200OK, output); + } + else + { + output.err_title = "Impossibile prendere in carico"; + output.err_detail = "Manutenzione precedentemente presa in carico"; + output.err_status_code = StatiRisposta.OperazioneNonAmmessa; + return StatusCode(StatusCodes.Status500InternalServerError, output); + } + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + + output.err_title = ex.Message; + output.err_detail = errmsg; + output.err_status_code = StatiRisposta.ErroreInterno; + return StatusCode(StatusCodes.Status500InternalServerError, output); + } + + //return output; + } + + /// chiudi: 1) crea un nuovo seriale per RAPP_NEW 2)inserisce record su RAPP_NEW con i dati dell'intervento return:ActionResult + [HttpPost] + [Route("manutenzioni/chiudi")] + public async Task> chiudiMan([FromBody] Input model, string token) + { + string ten = getClaimValueByToken(token, "tenant"); + string tecnico = getClaimValueByToken(token, "tccodice"); + string tenConf = getClaimValueByToken(token, "tenantConfigurazioni"); + + Manprog man = new Manprog(); + Manprog_out output = new Manprog_out(); + try + { + if (await checkManutenzioneChiusa(ten,TipoRapportino.ManutenzioneChiusa,model.pimpianto,model.pidatman,model.picodint)==0) + { + _confLette = await readConf(tenConf); + string newSerial = string.Empty; + newSerial = await getSeriale(token); + Rapp_New r = await fillRappNewChiudiManByInput(model, token, newSerial, _confLette); + + //switch (ten) + //{ + // case Clienti.Marrocco: + // using (var transaction = _Marro_rapp.Database.BeginTransaction()) + // { + // await _Marro_rapp.Rapps.AddAsync(r); + // await _Marro_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + + + // break; + // case Clienti.Ferrari: + // using (var transaction = _Ferra_rapp.Database.BeginTransaction()) + // { + // await _Ferra_rapp.Rapps.AddAsync(r); + // await _Ferra_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + // break; + // case Clienti.Sarom: + // using (var transaction = _Sarom_rapp.Database.BeginTransaction()) + // { + // await _Sarom_rapp.Rapps.AddAsync(r); + // await _Sarom_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + // break; + // case Clienti.Sicilia: + // using (var transaction = _Sicilia_rapp.Database.BeginTransaction()) + // { + // await _Sicilia_rapp.Rapps.AddAsync(r); + // await _Sicilia_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + // int riga = 0; + // if (model.compo_add != null && model.compo_add.Count() > 0) + // { + + // using (var transaction2 = _Sicilia_mag.Database.BeginTransaction()) + // { + + // foreach (Saldiart co in model.compo_add) + // { + // riga = riga + 1; + // Mag_New mn = new Mag_New(); + // mn = saldiartToMag_New(co, riga, newSerial, tecnico); + + // await _Sicilia_mag.Mag.AddAsync(mn); + // await _Sicilia_mag.SaveChangesAsync(); + + // } + // transaction2.Commit(); + // } + // } + // if (model.compo_del != null && model.compo_del.Count() > 0) + // { + + + // using (var transaction3 = _Sicilia_mag.Database.BeginTransaction()) + // { + // foreach (Compo_Impia co in model.compo_del) + // { + // Mag_New mn = new Mag_New(); + // riga = riga + 1; + // mn = compo_ImpiaToMag_New(co, riga, newSerial, tecnico); + + // await _Sicilia_mag.Mag.AddAsync(mn); + // await _Sicilia_mag.SaveChangesAsync(); + // } + // transaction3.Commit(); + // } + // } + // break; + // case Clienti.Discovery: + // using (var transaction4 = _Disco_rapp.Database.BeginTransaction()) + // { + // await _Disco_rapp.Rapps.AddAsync(r); + // await _Disco_rapp.SaveChangesAsync(); + // transaction4.Commit(); + // } + // break; + // case Clienti.Gitoga: + // using (var transactionGit = _Gitoga_rapp.Database.BeginTransaction()) + // { + // await _Gitoga_rapp.Rapps.AddAsync(r); + // await _Gitoga_rapp.SaveChangesAsync(); + // transactionGit.Commit(); + // } + // break; + // case Clienti.Lifta: + // using (var transactionLif = _Lifta_rapp.Database.BeginTransaction()) + // { + // await _Lifta_rapp.Rapps.AddAsync(r); + // await _Lifta_rapp.SaveChangesAsync(); + // transactionLif.Commit(); + // } + // break; + //case Clienti.Siet: + // using (var transactionSiet = _Siet_rapp.Database.BeginTransaction()) + // { + // await _Siet_rapp.Rapps.AddAsync(r); + // await _Siet_rapp.SaveChangesAsync(); + // transactionSiet.Commit(); + // } + // int rigaSiet = 0; + // if (model.compo_add != null && model.compo_add.Count() > 0) + // { + + // using (var transaction2 = _Siet_mag.Database.BeginTransaction()) + // { + + // foreach (Saldiart co in model.compo_add) + // { + // rigaSiet = rigaSiet + 1; + // Mag_New mn = new Mag_New(); + // mn = saldiartToMag_New(co, rigaSiet, newSerial, tecnico); + + // await _Siet_mag.Mag.AddAsync(mn); + // await _Siet_mag.SaveChangesAsync(); + + // } + // transaction2.Commit(); + // } + // } + // if (model.compo_del != null && model.compo_del.Count() > 0) + // { + // using (var transaction3 = _Siet_mag.Database.BeginTransaction()) + // { + // foreach (Compo_Impia co in model.compo_del) + // { + // Mag_New mn = new Mag_New(); + // rigaSiet = rigaSiet + 1; + // mn = compo_ImpiaToMag_New(co, rigaSiet, newSerial, tecnico); + + // await _Siet_mag.Mag.AddAsync(mn); + // await _Siet_mag.SaveChangesAsync(); + // } + // transaction3.Commit(); + // } + // } + + // break; + //case Clienti.PMS: + // using (var transactionPms = _Pms_rapp.Database.BeginTransaction()) + // { + // await _Pms_rapp.Rapps.AddAsync(r); + // await _Pms_rapp.SaveChangesAsync(); + // transactionPms.Commit(); + // } + // int rigapms = 0; + // if (model.compo_add != null && model.compo_add.Count() > 0) + // { + + // using (var transaction2 = _PMS_mag.Database.BeginTransaction()) + // { + + // foreach (Saldiart co in model.compo_add) + // { + // rigapms = rigapms + 1; + // Mag_New mn = new Mag_New(); + // mn = saldiartToMag_New(co, rigapms, newSerial, tecnico); + + // await _PMS_mag.Mag.AddAsync(mn); + // await _PMS_mag.SaveChangesAsync(); + + // } + // transaction2.Commit(); + // } + // } + // if (model.compo_del != null && model.compo_del.Count() > 0) + // { + // using (var transaction3 = _PMS_mag.Database.BeginTransaction()) + // { + // foreach (Compo_Impia co in model.compo_del) + // { + // Mag_New mn = new Mag_New(); + // rigapms = rigapms + 1; + // mn = compo_ImpiaToMag_New(co, rigapms, newSerial, tecnico); + + // await _PMS_mag.Mag.AddAsync(mn); + // await _PMS_mag.SaveChangesAsync(); + // } + // transaction3.Commit(); + // } + // } + + // break; + + //case Clienti.LW: + // using (var transactionLW = _LW_rapp.Database.BeginTransaction()) + // { + // await _LW_rapp.Rapps.AddAsync(r); + // await _LW_rapp.SaveChangesAsync(); + // transactionLW.Commit(); + // } + // int rigalw = 0; + // if (model.compo_add != null && model.compo_add.Count() > 0) + // { + + // using (var transaction2 = _LW_mag.Database.BeginTransaction()) + // { + + // foreach (Saldiart co in model.compo_add) + // { + // rigalw = rigalw + 1; + // Mag_New mn = new Mag_New(); + // mn = saldiartToMag_New(co, rigalw, newSerial, tecnico); + + // await _LW_mag.Mag.AddAsync(mn); + // await _LW_mag.SaveChangesAsync(); + + // } + // transaction2.Commit(); + // } + // } + // if (model.compo_del != null && model.compo_del.Count() > 0) + // { + // using (var transaction3 = _LW_mag.Database.BeginTransaction()) + // { + // foreach (Compo_Impia co in model.compo_del) + // { + // Mag_New mn = new Mag_New(); + // rigalw = rigalw + 1; + // mn = compo_ImpiaToMag_New(co, rigalw, newSerial, tecnico); + + // await _LW_mag.Mag.AddAsync(mn); + // await _LW_mag.SaveChangesAsync(); + // } + // transaction3.Commit(); + // } + // } + + // break; + + //case Clienti.Tedesco: + // using (var transactionTedes = _Tedes_rapp.Database.BeginTransaction()) + // { + // await _Tedes_rapp.Rapps.AddAsync(r); + // await _Tedes_rapp.SaveChangesAsync(); + // transactionTedes.Commit(); + // } + // int rigatedes = 0; + // if (model.compo_add != null && model.compo_add.Count() > 0) + // { + + // using (var transaction2 = _Tedes_mag.Database.BeginTransaction()) + // { + + // foreach (Saldiart co in model.compo_add) + // { + // rigatedes = rigatedes + 1; + // Mag_New mn = new Mag_New(); + // mn = saldiartToMag_New(co, rigatedes, newSerial, tecnico); + + // await _Tedes_mag.Mag.AddAsync(mn); + // await _Tedes_mag.SaveChangesAsync(); + + // } + // transaction2.Commit(); + // } + // } + // if (model.compo_del != null && model.compo_del.Count() > 0) + // { + // using (var transaction3 = _Tedes_mag.Database.BeginTransaction()) + // { + // foreach (Compo_Impia co in model.compo_del) + // { + // Mag_New mn = new Mag_New(); + // rigatedes = rigatedes + 1; + // mn = compo_ImpiaToMag_New(co, rigatedes, newSerial, tecnico); + + // await _Tedes_mag.Mag.AddAsync(mn); + // await _Tedes_mag.SaveChangesAsync(); + // } + // transaction3.Commit(); + // } + // } + + // break; + + //case Clienti.Syscom: + // using (var transactionSys = _Sys_rapp.Database.BeginTransaction()) + // { + // await _Sys_rapp.Rapps.AddAsync(r); + // await _Sys_rapp.SaveChangesAsync(); + // transactionSys.Commit(); + // } + // int rigasys = 0; + // if (model.compo_add != null && model.compo_add.Count() > 0) + // { + + // using (var transaction2 = _Sys_mag.Database.BeginTransaction()) + // { + + // foreach (Saldiart co in model.compo_add) + // { + // rigasys = rigasys + 1; + // Mag_New mn = new Mag_New(); + // mn = saldiartToMag_New(co, rigasys, newSerial, tecnico); + + // await _Sys_mag.Mag.AddAsync(mn); + // await _Sys_mag.SaveChangesAsync(); + + // } + // transaction2.Commit(); + // } + // } + // if (model.compo_del != null && model.compo_del.Count() > 0) + // { + // using (var transaction3 = _Sys_mag.Database.BeginTransaction()) + // { + // foreach (Compo_Impia co in model.compo_del) + // { + // Mag_New mn = new Mag_New(); + // rigasys = rigasys + 1; + // mn = compo_ImpiaToMag_New(co, rigasys, newSerial, tecnico); + + // await _Sys_mag.Mag.AddAsync(mn); + // await _Sys_mag.SaveChangesAsync(); + // } + // transaction3.Commit(); + // } + // } + + // break; + //default: + // break; + //} + man = await getManutenzioneByChiaveOut(model, token,r); + output = fillManprogOut(man, ten); + output.err_status_code = StatiRisposta.Ok; + return StatusCode(StatusCodes.Status200OK, output); + } + else + { + output.err_title = "Impossibile chiudere la manutenzione"; + output.err_detail = "Manutenzione precedentemente chiusa"; + output.err_status_code = StatiRisposta.OperazioneNonAmmessa; + return StatusCode(StatusCodes.Status500InternalServerError, output); + } + + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + + output.err_title = ex.Message; + output.err_detail = errmsg; + output.err_status_code = StatiRisposta.ErroreInterno; + return StatusCode(StatusCodes.Status500InternalServerError, output); + } + + //return output; + } + + /// rilascia: elimina record su Prese con i dati dell'intervento return:ActionResult + [HttpPost] + [Route("manutenzioni/rilascia")] + public async Task> rilasciaMan([FromBody] Input model, string token) + { + string ten = getClaimValueByToken(token, "tenant"); + string tecnico = getClaimValueByToken(token, "tccodice"); + Manprog man = new Manprog(); + Manprog_out output = new Manprog_out(); + Prese pre = null; + try + { + if ((pre=await checkManutenzioneDaRilasciare(ten, model.pimpianto, model.picodint, model.pidatman)) !=null) + { + //_prese = getPreseByTenant(ten); + //var pre = _prese.SingleOrDefault(t => t.picodazi.Equals(ten) && t.pimpianto.Equals(model.pimpianto) && t.picodint.Equals(model.picodint) && t.pidatman == model.pidatman); + //switch (ten) + //{ + // case Clienti.Marrocco: + // using (var transaction = _Marro_prese.Database.BeginTransaction()) + // { + // _Marro_prese.Prese.Remove(pre); + // await _Marro_prese.SaveChangesAsync(); + // transaction.Commit(); + // } + // break; + // case Clienti.Ferrari: + // using (var transaction2 = _Ferra_prese.Database.BeginTransaction()) + // { + // _Ferra_prese.Prese.Remove(pre); + // await _Ferra_prese.SaveChangesAsync(); + // transaction2.Commit(); + // } + // break; + // case Clienti.Sarom: + // using (var transaction5 = _Sarom_prese.Database.BeginTransaction()) + // { + // _Sarom_prese.Prese.Remove(pre); + // await _Sarom_prese.SaveChangesAsync(); + // transaction5.Commit(); + // } + // break; + // case Clienti.Sicilia: + // using (var transaction3 = _Sicilia_prese.Database.BeginTransaction()) + // { + // _Sicilia_prese.Prese.Remove(pre); + // await _Sicilia_prese.SaveChangesAsync(); + // transaction3.Commit(); + // } + // break; + // case Clienti.Discovery: + // using (var transaction4 = _Disco_prese.Database.BeginTransaction()) + // { + // _Disco_prese.Prese.Remove(pre); + // await _Disco_prese.SaveChangesAsync(); + // transaction4.Commit(); + // } + // break; + // case Clienti.Gitoga: + // using (var transactionGit = _Gitoga_prese.Database.BeginTransaction()) + // { + // _Gitoga_prese.Prese.Remove(pre); + // await _Gitoga_prese.SaveChangesAsync(); + // transactionGit.Commit(); + // } + // break; + // case Clienti.Lifta: + // using (var transactionLif = _Lifta_prese.Database.BeginTransaction()) + // { + // _Lifta_prese.Prese.Remove(pre); + // await _Lifta_prese.SaveChangesAsync(); + // transactionLif.Commit(); + // } + // break; + // case Clienti.Siet: + // using (var transactionSiet = _Siet_prese.Database.BeginTransaction()) + // { + // _Siet_prese.Prese.Remove(pre); + // await _Siet_prese.SaveChangesAsync(); + // transactionSiet.Commit(); + // } + // break; + // case Clienti.PMS: + // using (var transactionPms = _PMS_prese.Database.BeginTransaction()) + // { + // _PMS_prese.Prese.Remove(pre); + // await _PMS_prese.SaveChangesAsync(); + // transactionPms.Commit(); + // } + // break; + // case Clienti.LW: + // using (var transactionLW = _LW_prese.Database.BeginTransaction()) + // { + // _LW_prese.Prese.Remove(pre); + // await _LW_prese.SaveChangesAsync(); + // transactionLW.Commit(); + // } + // break; + // case Clienti.Tedesco: + // using (var transactionTedes = _Tedes_prese.Database.BeginTransaction()) + // { + // _Tedes_prese.Prese.Remove(pre); + // await _Tedes_prese.SaveChangesAsync(); + // transactionTedes.Commit(); + // } + // break; + // case Clienti.Syscom : + // using (var transactionSys = _Sys_prese.Database.BeginTransaction()) + // { + // _Sys_prese.Prese.Remove(pre); + // await _Sys_prese.SaveChangesAsync(); + // transactionSys.Commit(); + // } + // break; + // default: + // break; + //} + + //man = await getManutenzioneByChiave(model, token); + man = await getManutenzioneByChiave2(pre, token); + + output = fillManprogOut(man, ten); + //output = fillManprogOut2(man, ten); + + output.err_status_code = StatiRisposta.Ok; + return StatusCode(StatusCodes.Status200OK, output); + } + else + { + output.err_title = "Impossibile rilasciare la manutenzione. Manutenzione non trovata"; + + StringBuilder sb = new StringBuilder(); + sb.AppendLine("pimpianto: "+model.pimpianto); + sb.AppendLine("picodint: " + model.picodint); + sb.AppendLine("pidatman: " + model.pidatman); + sb.AppendLine("tenant: " + ten); + output.err_detail = sb.ToString(); + sb.Clear(); + output.err_status_code = StatiRisposta.OperazioneNonAmmessa; + return StatusCode(StatusCodes.Status500InternalServerError, output); + } + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + + output.err_title = ex.Message; + output.err_detail = errmsg; + output.err_status_code = StatiRisposta.ErroreInterno; + return StatusCode(StatusCodes.Status500InternalServerError, output); + } + + //return output; + } + #endregion + + #region UPLOAD FILE + private static void FtpSend(string url, string ftp_usr, string ftp_pwd, IFormFile files) + { + //string url = "ftp://10.0.0.10/LABSE/" + fileName; + //url = "ftp://poloinformatico41.clienti.init-s.it:6363/test.bmp"; + + //esempio Discovery + //url = "ftp://discoverylift.dyndns.org:21/test.jpg"; + + + //esempio SICILIA PROD + //url = "ftp://studioliuzzo.selfip.net:21/adhoc/bmp_24.bmp"; + + FtpWebRequest request = (FtpWebRequest)WebRequest.Create(url); + request.Credentials = new NetworkCredential(ftp_usr, ftp_pwd); + //request.Credentials = new NetworkCredential("anonymous", "janeDoe@contoso.com"); + request.Method = WebRequestMethods.Ftp.UploadFile; + using (Stream ftpStream = request.GetRequestStream()) + { + files.CopyTo(ftpStream); + } + } + private static string CheckFtp(string url, string ftp_usr, string ftp_pwd) + { + string _esito = "OK"; + //url = "ftp://10.0.0.10/PMS/cccetcwqsss.jpg"; + + var request = (FtpWebRequest)WebRequest.Create(url); + request.Credentials = new NetworkCredential(ftp_usr, ftp_pwd); + request.Method = WebRequestMethods.Ftp.GetFileSize; + + try + { + FtpWebResponse response = (FtpWebResponse)request.GetResponse(); + } + catch (WebException ex) + { + FtpWebResponse response = (FtpWebResponse)ex.Response; + if (response.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable) + { + _esito = "KO"; + } + } + return _esito; + } + private static void SFtpSend(string url, string ftp_usr, string ftp_pwd, IFormFile files) + { + var connectionInfo = new Renci.SshNet.ConnectionInfo(url, "sftp", new PasswordAuthenticationMethod(ftp_usr, ftp_pwd)); + + // Upload File + using (var sftp = new SftpClient(connectionInfo)) + { + sftp.Connect(); + //sftp.ChangeDirectory("/MyFolder"); + using (var uplfileStream = System.IO.File.OpenRead(files.FileName)) + { + sftp.UploadFile(uplfileStream, files.FileName, true); + } + sftp.Disconnect(); + } + } + + /// + public static void FileUploadSFTP(IFormFile files,string ip,string usr,string pwd, int? sftp_port, string filename) + { + //var host = "37.159.179.14"; + //var port = 27000; + //var username = "apppolo"; + //var password = "utx3BizRykw1hdY"; + + var host = ip; + var port = sftp_port.Value; + var username = usr; + var password = pwd; + + // path for file you want to upload + //var uploadFile = @"C:\Zucchetti\b.bmp"; + var uploadFile = files.OpenReadStream(); + + using (var client = new SftpClient(host, port, username, password)) + { + client.Connect(); + using (var uplfileStream = files.OpenReadStream()) + { + client.UploadFile(uplfileStream, filename); + } + } + } + + /// Upload return:ActionResult + [HttpPost] + [Route("file/upload")] + public async Task OnPostUpload2Async(IFormFile files, string token, string nomefile) + { + + + string ten = getClaimValueByToken(token, "tenant"); + string ten2 = getClaimValueByToken(token, "tenant2"); + string tenConf = getClaimValueByToken(token, "tenantConfigurazioni"); + string tecnico = getClaimValueByToken(token, "tccodice"); + + if (string.IsNullOrEmpty(ten)) + { + ten = tenConf; + } + string fileName = string.Empty; + + //Console.WriteLine(string.Format("*********** {2} metodo chiudi: tenant:{0} tenant2: {1} tenantConf: {5} buono: {3} tecnico:{4} ", ten, ten2, DateTime.Now.ToString(), r.ser_buono, r.codice_tecnico,tenConf)); + Console.WriteLine(string.Format("*********** {2} INIZIO Chiamata al metodo upload: tenant:{0} tenant2: {3} tenantConf: {4} file: {1} tecnico:{5}", ten, nomefile, DateTime.Now.ToString(),ten2,tenConf, tecnico)); + + if (ten.Equals(Clienti.VT)) + { + //ten2= getClaimValueByToken(token, "tenant2"); + _confLette = await readConf(ten2); + } + else + { + _confLette = await readConf(tenConf); + } + + try + { + long size = files.Length; + if(string.IsNullOrEmpty(nomefile)) + { + fileName = Path.GetFileName(files.FileName); + } + else + { + fileName = nomefile; + } + + string url = string.Empty; + string usr = string.Empty; + string pwd = string.Empty; + string ip = string.Empty; + int? port = 0; + + // per VT faccio solo il salvataggio in tabella + //2024-04-08: CONTRORDINE: devo salvare il file perchè il file deve essere depositato nella directory + //dove risiedono le API per poter essere esposto con un url pubblico in modo da poter essere utilizzato dall'app + //(questo per le Immagini azienda che vanno nel logo del buono) + + #region inserimento tabella + Buoni model = new Buoni(); + model.azienda = ten2; + if (nomefile.Length > 8) + nomefile = nomefile.Substring(0, 8); + model.ser_buono = nomefile; + model.dt_ins = DateTime.Now; + using (MemoryStream ms = new MemoryStream()) + { + files.CopyTo(ms); + byte[] array = ms.GetBuffer(); + model.immagine = array; + } + using (var transaction = _VT_Buoni.Database.BeginTransaction()) + { + await _VT_Buoni.buoni.AddAsync(model); + await _VT_Buoni.SaveChangesAsync(); + transaction.Commit(); + } + + #endregion + + //switch (ten) + //{ + // case Clienti.Marrocco: + // url = _confLette.ftp_url + fileName; + // usr = _confLette.ftp_usr != null ? _confLette.ftp_usr : string.Empty; + // pwd = _confLette.ftp_pwd != null ? _confLette.ftp_pwd : string.Empty; + // FtpSend(url, usr, pwd, files); + + // break; + // case Clienti.Gitoga: + // url = _confLette.ftp_url + fileName; + // usr = _confLette.ftp_usr != null ? _confLette.ftp_usr : string.Empty; + // pwd = _confLette.ftp_pwd != null ? _confLette.ftp_pwd : string.Empty; + // FtpSend(url, usr, pwd, files); + + // break; + // case Clienti.Lifta: + // url = _confLette.ftp_url + fileName; + // usr = _confLette.ftp_usr != null ? _confLette.ftp_usr : string.Empty; + // pwd = _confLette.ftp_pwd != null ? _confLette.ftp_pwd : string.Empty; + // FtpSend(url, usr, pwd, files); + + // break; + + // case Clienti.Ferrari: + // ip = _confLette.ftp_url!=null ? _confLette.ftp_url : string.Empty; + // usr = _confLette.ftp_usr != null ? _confLette.ftp_usr : string.Empty; + // pwd = _confLette.ftp_pwd != null ? _confLette.ftp_pwd : string.Empty; + // port = _confLette.ftp_port != null ? _confLette.ftp_port : 0; + + // FileUploadSFTP(files,ip,usr,pwd, port,fileName); + + // break; + // case Clienti.Sarom: + // ip = _confLette.ftp_url != null ? _confLette.ftp_url : string.Empty; + // usr = _confLette.ftp_usr != null ? _confLette.ftp_usr : string.Empty; + // pwd = _confLette.ftp_pwd != null ? _confLette.ftp_pwd : string.Empty; + // port = _confLette.ftp_port != null ? _confLette.ftp_port : 0; + + // FileUploadSFTP(files, ip, usr, pwd, port, fileName); + + // break; + // case Clienti.Sicilia: + // url = _confLette.ftp_url + fileName; + // usr = _confLette.ftp_usr != null ? _confLette.ftp_usr : string.Empty; + // pwd = _confLette.ftp_pwd != null ? _confLette.ftp_pwd : string.Empty; + // FtpSend(url, usr, pwd, files); + + // break; + // case Clienti.Discovery: + + // //ip = _confLette.ftp_url != null ? _confLette.ftp_url : string.Empty; + // //usr = _confLette.ftp_usr != null ? _confLette.ftp_usr : string.Empty; + // //pwd = _confLette.ftp_pwd != null ? _confLette.ftp_pwd : string.Empty; + // //port = _confLette.ftp_port != null ? _confLette.ftp_port : 0; + // //FileUploadSFTP(files, ip, usr, pwd, port, fileName); + + + // //url = _confLette.ftp_url + fileName; + // usr = _confLette.ftp_usr != null ? _confLette.ftp_usr : string.Empty; + // pwd = _confLette.ftp_pwd != null ? _confLette.ftp_pwd : string.Empty; + // port = _confLette.ftp_port != null ? _confLette.ftp_port : 0; + + // //ftp://discoverylift.dyndns.org:21/test.jpg; + // url = string.Format("{0}:{1}/{2}", _confLette.ftp_url, port, fileName); + // FtpSend(url, usr, pwd, files); + // break; + // case Clienti.Siet: + // url = _confLette.ftp_url + fileName; + // usr = _confLette.ftp_usr != null ? _confLette.ftp_usr : string.Empty; + // pwd = _confLette.ftp_pwd != null ? _confLette.ftp_pwd : string.Empty; + // FtpSend(url, usr, pwd, files); + // break; + // case Clienti.PMS: + // //url = _confLette.ftp_url + fileName; + // //usr = _confLette.ftp_usr != null ? _confLette.ftp_usr : string.Empty; + // //pwd = _confLette.ftp_pwd != null ? _confLette.ftp_pwd : string.Empty; + // //port = _confLette.ftp_port != null ? _confLette.ftp_port : 0; + // //ip = _confLette.ftp_url != null ? _confLette.ftp_url : string.Empty; + // //FileUploadSFTP(files, ip, usr, pwd, port, fileName); + // url = _confLette.ftp_url + fileName; + // usr = _confLette.ftp_usr != null ? _confLette.ftp_usr : string.Empty; + // pwd = _confLette.ftp_pwd != null ? _confLette.ftp_pwd : string.Empty; + + // FtpSend(url, usr, pwd, files); + // string _esito = CheckFtp(url, usr, pwd); + // if(_esito.Equals("KO")) + // { + // throw new Exception("Buono non depositato !!"+url); + // } + + // break; + // case Clienti.VT: + + // // per VT faccio solo il salvataggio in tabella + // //2024-04-08: CONTRORDINE: devo salvare il file perchè il file deve essere depositato nella directory + // //dove risiedono le API per poter essere esposto con un url pubblico in modo da poter essere utilizzato dall'app + // //(questo per le Immagini azienda che vanno nel logo del buono) + + + // #region inserimento tabella + // Buoni model = new Buoni(); + // model.azienda = ten2; + // if (nomefile.Length > 8) + // nomefile = nomefile.Substring(0, 8); + // model.ser_buono = nomefile; + // model.dt_ins = DateTime.Now; + // using (MemoryStream ms = new MemoryStream()) + // { + // files.CopyTo(ms); + // byte[] array = ms.GetBuffer(); + // model.immagine = array; + // } + // using (var transaction = _VT_Buoni.Database.BeginTransaction()) + // { + // await _VT_Buoni.buoni.AddAsync(model); + // await _VT_Buoni.SaveChangesAsync(); + // transaction.Commit(); + // } + // #endregion + + + + // break; + // case Clienti.LW: + + // #region inserimento tabella + // BuoniLW model2 = new BuoniLW(); + // model2.azienda = ten; + // if (nomefile.Length > 8) + // nomefile = nomefile.Substring(0, 8); + // model2.ser_buono = nomefile; + // model2.dt_ins = DateTime.Now; + // using (MemoryStream ms = new MemoryStream()) + // { + // files.CopyTo(ms); + // byte[] byteArray = ms.GetBuffer(); + // string base64String = Convert.ToBase64String(byteArray); + // model2.immagine = base64String; + // } + // //var result = new StringBuilder(); + // //using (var reader = new StreamReader(files.OpenReadStream())) + // //{ + // // while (reader.Peek() >= 0) + // // { + // // result.AppendLine(reader.ReadLine()); + // // } + // //} + // //model2.immagine = result.ToString(); + // using (var transaction = _LW_Buoni.Database.BeginTransaction()) + // { + // await _LW_Buoni.buoni.AddAsync(model2); + // await _LW_Buoni.SaveChangesAsync(); + // transaction.Commit(); + // } + // #endregion + // break; + // case Clienti.Tedesco: + + // url = _confLette.ftp_url + fileName; + // usr = _confLette.ftp_usr != null ? _confLette.ftp_usr : string.Empty; + // pwd = _confLette.ftp_pwd != null ? _confLette.ftp_pwd : string.Empty; + // FtpSend(url, usr, pwd, files); + // break; + // case Clienti.Syscom: + + // #region inserimento tabella + // BuoniLW modelsys = new BuoniLW(); + // modelsys.azienda = ten; + // if (nomefile.Length > 8) + // nomefile = nomefile.Substring(0, 8); + // modelsys.ser_buono = nomefile; + // modelsys.dt_ins = DateTime.Now; + // using (MemoryStream ms = new MemoryStream()) + // { + // files.CopyTo(ms); + // byte[] byteArray = ms.GetBuffer(); + // string base64String = Convert.ToBase64String(byteArray); + // modelsys.immagine = base64String; + // } + + // using (var transaction = _Sys_Buoni.Database.BeginTransaction()) + // { + // await _Sys_Buoni.buoni.AddAsync(modelsys); + // await _Sys_Buoni.SaveChangesAsync(); + // transaction.Commit(); + // } + // #endregion + // break; + // default: + // break; + //} + + Console.WriteLine(string.Format("*********** {2} FINE Chiamata al metodo upload: tenant:{0} tenant2: {3} tenantConf: {4} file: {1} tecnico:{5}", ten, nomefile, DateTime.Now.ToString(), ten2, tenConf, tecnico)); + return Ok(new { count = 1, size }); + } + catch (Exception ex) + { + StringBuilder sb = new StringBuilder(); + string errMsg = string.Empty; + if(ex.Message!=null) + { + sb.AppendLine(ex.Message); + } + if(ex.InnerException!=null) + { + sb.AppendLine(ex.InnerException.Message); + } + errMsg = sb.ToString(); + //Console.WriteLine(string.Format("*********** {2} ERRORE metodo upload: tenant:{0} file: {1} ==> {3}", ten, nomefile, DateTime.Now.ToString(),errMsg)); + Console.WriteLine(string.Format("*********** {2} ERRORE metodo upload: tenant:{0} tenant2: {3} tenantConf: {4} file: {1} tecnico:{5} ==> {6}", ten, nomefile, DateTime.Now.ToString(), ten2, tenConf, tecnico, errMsg)); + return StatusCode(StatusCodes.Status500InternalServerError, "Error: "+errMsg); + } + } + + #endregion + + #region IMPIANTI COMPONENTI + private async Task fillCompoImpiaByInput(Compo_Impia i, string token) + { + Compo_Impia_Table r = new Compo_Impia_Table(); + + string ten = getClaimValueByToken(token, "tenant"); + string tecnico = getClaimValueByToken(token, "tccodice"); + + //i = fakeInput(i, ten); + //_compoTable = getComponentiTableByTenant(ten); + var co = await _compoTable.Where(t => t.cocodimp == i.cocodimp).OrderByDescending(t => t.cprownum).ToListAsync(); + + int? row = 0; + if(co!=null && co.Count()>0) + { + row = co.First().cprownum; + } + row++; + + r.cocodimp = co.First().cocodimp; + r.cprownum = row; + r.cocodart = i.cocodart; + r.coqtaart = i.coqtaart; + r.co__note = i.co__note; + r.pilotto = i.lotto; + r.pimatric = i.matricola; + r.cocodazi = ten; + + return r; + } + private Compo_Impia_out fillCompoImpiaOUTByInput(Compo_Impia_Table i) + { + Compo_Impia_out r = new Compo_Impia_out(); + + r.cocodimp = i.cocodimp; + r.cprownum = i.cprownum; + r.cocodart = i.cocodart; + r.coqtaart = i.coqtaart; + r.co__note = i.co__note; + r.lotto = i.pilotto; + r.matricola = i.pimatric; + r.cocodazi = i.cocodazi; + + return r; + } + + /// Componenti impianto return:ActionResult + [HttpGet("componenti_impianto")] + public async Task>> componenti_impianto(string token, string codimp) + { + try + { + string ten = getClaimValueByToken(token, "tenant"); + List lst = new List(); + + if(!ten.Equals(Clienti.VT)) + { + //_compo = getComponentiByTenant(ten); + + var co = await _compo.Where( + t => t.cocodimp == codimp + ).ToListAsync(); + lst = co; + } + else + { + Compo_Impia ci = new Compo_Impia(); + ci.cocodimp = codimp; + ci.cprownum = 1; + ci.cocodart = "00001"; + ci.cocodazi = "AZI02"; + ci.ardesart = "Tubo in metallo"; + + + lst.Add(ci); + + } + return StatusCode(StatusCodes.Status200OK, lst); + } + catch (Exception ex) + { + return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); + } + } + + /// aggiunge un componente all'impianto. Inserisce in LABSEMICOMIMP return:ActionResult + [HttpPost] + [Route("componenti_impianto/add")] + public async Task> addcomponente([FromBody] Compo_Impia model, string token) + { + string ten = getClaimValueByToken(token, "tenant"); + string tenConf = getClaimValueByToken(token, "tenantConfigurazioni"); + if (string.IsNullOrEmpty(ten)) + { + ten = tenConf; + } + + Compo_Impia_Table co = new Compo_Impia_Table(); + Compo_Impia_out co_out = new Compo_Impia_out(); + co = await fillCompoImpiaByInput(model, token); + co_out = fillCompoImpiaOUTByInput(co); + + try + { + //switch (ten) + //{ + // case Clienti.Sicilia: + // using (var transaction = _Sicilia_compTable.Database.BeginTransaction()) + // { + // await _Sicilia_compTable.Componen.AddAsync(co); + // await _Sicilia_compTable.SaveChangesAsync(); + // transaction.Commit(); + // } + // break; + // case Clienti.Siet: + // using (var transactionSiet = _Siet_compTable.Database.BeginTransaction()) + // { + // await _Siet_compTable.Componen.AddAsync(co); + // await _Siet_compTable.SaveChangesAsync(); + // transactionSiet.Commit(); + // } + // break; + // case Clienti.PMS: + // using (var transactionPms = _PMS_compTable.Database.BeginTransaction()) + // { + // await _PMS_compTable.Componen.AddAsync(co); + // await _PMS_compTable.SaveChangesAsync(); + // transactionPms.Commit(); + // } + // break; + // case Clienti.LW: + // using (var transactionlw = _LW_compTable.Database.BeginTransaction()) + // { + // await _LW_compTable.Componen.AddAsync(co); + // await _LW_compTable.SaveChangesAsync(); + // transactionlw.Commit(); + // } + // break; + // case Clienti.Tedesco: + // using (var transactionTedes = _Tedes_compTable.Database.BeginTransaction()) + // { + // await _Tedes_compTable.Componen.AddAsync(co); + // await _Tedes_compTable.SaveChangesAsync(); + // transactionTedes.Commit(); + // } + // break; + // case Clienti.Syscom: + // using (var transactionsys = _Sys_compTable.Database.BeginTransaction()) + // { + // await _Sys_compTable.Componen.AddAsync(co); + // await _Sys_compTable.SaveChangesAsync(); + // transactionsys.Commit(); + // } + // break; + // default: + // break; + //} + + co_out.err_status_code = StatiRisposta.Ok; + return StatusCode(StatusCodes.Status200OK, co_out); + + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + co_out.err_title = ex.Message; + co_out.err_detail = errmsg; + co_out.err_status_code = StatiRisposta.ErroreInterno; + return StatusCode(StatusCodes.Status500InternalServerError, co_out); + } + //return co_out; + } + + /// toglie un componente all'impianto. Cancella in LABSEMICOMIMP return:ActionResult + [HttpPost] + [Route("componenti_impianto/del")] + public async Task> delcomponente([FromBody] Compo_Impia model, string token) + { + string ten = getClaimValueByToken(token, "tenant"); + string tenConf = getClaimValueByToken(token, "tenantConfigurazioni"); + if (string.IsNullOrEmpty(ten)) + { + ten = tenConf; + } + //_compoTable = getComponentiTableByTenant(ten); + var comp = await _compoTable.Where(t => t.cocodimp == model.cocodimp && t.cprownum == model.cprownum && t.cocodazi == ten).ToListAsync(); + Compo_Impia_out co_out = new Compo_Impia_out(); + + if (comp != null) + { + Compo_Impia_Table t = new Compo_Impia_Table(); + t = (Compo_Impia_Table)comp.First(); + co_out = fillCompoImpiaOUTByInput(t); + try + { + //switch (ten) + //{ + // case Clienti.Sicilia: + // using (var transaction = _Sicilia_compTable.Database.BeginTransaction()) + // { + // _Sicilia_compTable.Entry(t).State = EntityState.Deleted; + // await _Sicilia_compTable.SaveChangesAsync(); + // transaction.Commit(); + // } + // break; + // case Clienti.Siet: + // using (var transactionSiet = _Siet_compTable.Database.BeginTransaction()) + // { + // _Siet_compTable.Entry(t).State = EntityState.Deleted; + // await _Siet_compTable.SaveChangesAsync(); + // transactionSiet.Commit(); + // } + // break; + // case Clienti.PMS: + // using (var transactionPMS = _PMS_compTable.Database.BeginTransaction()) + // { + // _PMS_compTable.Entry(t).State = EntityState.Deleted; + // await _PMS_compTable.SaveChangesAsync(); + // transactionPMS.Commit(); + // } + // break; + // case Clienti.LW: + // using (var transactionlw = _LW_compTable.Database.BeginTransaction()) + // { + // _LW_compTable.Entry(t).State = EntityState.Deleted; + // await _LW_compTable.SaveChangesAsync(); + // transactionlw.Commit(); + // } + // break; + // case Clienti.Tedesco: + // using (var transactionTedes = _Tedes_compTable.Database.BeginTransaction()) + // { + // _Tedes_compTable.Entry(t).State = EntityState.Deleted; + // await _Tedes_compTable.SaveChangesAsync(); + // transactionTedes.Commit(); + // } + // break; + // case Clienti.Syscom: + // using (var transactionsys = _Sys_compTable.Database.BeginTransaction()) + // { + // _Sys_compTable.Entry(t).State = EntityState.Deleted; + // await _Sys_compTable.SaveChangesAsync(); + // transactionsys.Commit(); + // } + // break; + // default: + // break; + //} + + co_out.err_status_code = StatiRisposta.Ok; + return StatusCode(StatusCodes.Status200OK, co_out); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + co_out.err_title = ex.Message; + co_out.err_detail = errmsg; + co_out.err_status_code = StatiRisposta.ErroreInterno; + return StatusCode(StatusCodes.Status500InternalServerError, co_out); + } + } + else + { + co_out.err_title = "Cancellazione fallita"; + co_out.err_detail = "record non trovato"; + co_out.err_status_code = StatiRisposta.ErroreInterno; + return StatusCode(StatusCodes.Status500InternalServerError, co_out); + } + //return co_out; + } + #endregion + + #region Saldi articoli + /// Ricerca articoli per impianto return:ActionResult + [HttpGet("saldi_articolo")] + public async Task>> saldi_articolo(string token, string? art, string? desart, string? matric, string? maga,string? codcli, string? codimp ) + { + try + { + string ten = getClaimValueByToken(token, "tenant"); + string ten2 = getClaimValueByToken(token, "tenant2"); + string tenConf = getClaimValueByToken(token, "tenantConfigurazioni"); + + //27/02/2025 aggiunta gestione Articoli + if (tenConf.Equals(Clienti.VT)) + { + _articoliTable = _VT_articoliTable.Articoli; + + var listaFiltro = new List(); + + listaFiltro = await _articoliTable.Where(x => x.Azienda.Equals(ten2)).ToListAsync(); + + if (!string.IsNullOrEmpty(art)) + { + listaFiltro = await _articoliTable.Where(x => x.SlCodice.Contains(art)).ToListAsync(); + } + + if (!string.IsNullOrEmpty(desart)) + { + listaFiltro = await _articoliTable.Where(x => x.ArDesArt.Contains(desart)).ToListAsync(); + } + + if (!string.IsNullOrEmpty(maga)) + { + listaFiltro = await _articoliTable.Where(x => x.SlCodMag.Contains(maga)).ToListAsync(); + } + + List listaSaldiArt = new List(); + + foreach (Articoli a in listaFiltro) + { + Saldiart saldo = new Saldiart(); + + saldo.slcodice = a.SlCodice.TrimEnd(); + saldo.ardesart = a.ArDesArt.TrimEnd(); + saldo.slcodmag = a.SlCodMag.TrimEnd(); + saldo.slqtaper = a.SlQtAper; + saldo.amcodice = !string.IsNullOrEmpty(a.AmCodice) ? a.AmCodice.TrimEnd():string.Empty; + saldo.locodice = !string.IsNullOrEmpty(a.LoCodice) ? a.LoCodice.TrimEnd() : string.Empty; + saldo.licodlis = !string.IsNullOrEmpty(a.LiCodLis) ? a.LiCodLis.TrimEnd() : string.Empty; + saldo.licodart = !string.IsNullOrEmpty(a.LiCodArt) ? a.LiCodArt.TrimEnd() : string.Empty; + saldo.lidatatt = a.LiDatAtt; + saldo.liquanti = a.LiQuanti; + saldo.liprezzo = a.LiPrezzo; + saldo.liscont1 = a.LiScont1; + saldo.liscont2 = a.LiScont2; + saldo.liscont3 = a.LiScont3; + saldo.liscont4 = a.LiScont4; + saldo.gest_matr = a.Gest_Matr.TrimEnd(); + saldo.gest_lotti = a.Gest_Lotti.TrimEnd(); + saldo.desc_sup = a.Desc_sup.TrimEnd(); + + listaSaldiArt.Add(saldo); + } + + return StatusCode(StatusCodes.Status200OK, listaSaldiArt); + } + else + { + //_saldi = getSaldiartByTenant(ten); + Configurazioni conf = await readConf(tenConf); + int max_record = 0; + max_record = conf.max_record != null ? conf.max_record.Value : 0; + string codlis = string.Empty; + //_clienti = getClientiByTenant(ten); + var a = await _clienti.Where(t => t.ancodice == codcli).ToListAsync(); + if (a != null && a.Count() == 0) + { + codlis = conf.listino; + } + else + { + codlis = string.IsNullOrEmpty(a.First().annumlis) ? conf.listino : a.First().annumlis; + } + var co = await _saldi.Where(t => t.slcodmag != null && t.slcodmag.Equals(maga) && t.licodlis != null && t.licodlis.Equals(codlis)).ToListAsync(); + + if (!string.IsNullOrEmpty(art)) + { + co = co.Where(t => t.slcodice != null && t.slcodice.ToUpper().Contains(art.ToUpper())).ToList(); + } + if (!string.IsNullOrEmpty(desart)) + { + co = co.Where(t => t.ardesart != null && t.ardesart.ToUpper().Contains(desart.ToUpper())).ToList(); + } + if (!string.IsNullOrEmpty(matric)) + { + //List lista = new List(); + //var codart = co.Where(m => m.amcodice != null && m.amcodice.ToUpper().Contains(matric.ToUpper())).ToList(); + //var query = co.Where(p => codart.Any(kw => p..StartsWith(kw))); + //if (codart != null && codart.Count() > 0) + //{ + // foreach(Saldiart sa in codart) + // { + // string artTrovato = sa.slcodice; + // co= co.Where(t => t.slcodice != null && t.slcodice.ToUpper().Contains(artTrovato.ToUpper()) + // && t.amcodice.ToUpper().Contains(matric.ToUpper())).ToList(); + // } + //} + //else + //{ + // // devo svuotare l'elenco articoli + // co = co.Take(0).ToList(); + //} + co = co.Where(t => t.amcodice != null && t.amcodice.ToUpper().Contains(matric.ToUpper())).ToList(); + + } + //2024-02-19: se l'articolo è gestito a matricole, la query restituisce tutte le righe splittate, + //in questo caso forzo la quantità a 1 + if (co != null && co.Count() > 0) + { + foreach (Saldiart s in co) + { + if (s.gest_matr != null && s.gest_matr.Equals("S")) + { + s.slqtaper = 1; + } + + } + } + co = co.Take(max_record).ToList(); + return StatusCode(StatusCodes.Status200OK, co); + } + + } + catch (Exception ex) + { + return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); + } + } + #endregion + + #region Magazzino + private async Task fillMag_NewByInput(Mag_New i, string token) + { + Mag_New r = new Mag_New(); + + string ten = getClaimValueByToken(token, "tenant"); + string tecnico = getClaimValueByToken(token, "tccodice"); + + //i = fakeInput(i, ten); + //_mag = getMag_NewByTenant(ten); + var co = await _mag.Where(t => t.seriale_rapportino == i.seriale_rapportino).OrderByDescending(t => t.riga).ToListAsync(); + + int? row = 0; + if (co != null && co.Count() > 0) + { + row = co.First().riga; + row++; + } + else + { + row++; + } + + + r.seriale_rapportino = i.seriale_rapportino; + r.riga = row; + r.magazzino = i.magazzino; + r.articolo = i.articolo; + r.tipo_movimento = i.tipo_movimento; + r.quantita = i.quantita; + r.prezzo = i.prezzo; + r.codice_tecnico = i.codice_tecnico; + r.generato = i.generato; + r.codlotto = i.codlotto; + r.matricola = i.matricola; + r.cprownum = row; + + return r; + } + private Mag_New_out fillMag_NewOUTByInput(Mag_New i) + { + Mag_New_out r = new Mag_New_out(); + + r.seriale_rapportino = i.seriale_rapportino; + r.riga = i.riga; + r.magazzino = i.magazzino; + r.articolo = i.articolo; + r.tipo_movimento = i.tipo_movimento; + r.quantita = i.quantita; + r.prezzo = i.prezzo; + r.codice_tecnico = i.codice_tecnico; + r.generato = i.generato; + r.codlotto = i.codlotto; + r.matricola = i.matricola; + return r; + } + + /// rapportino per pezzi magazzino. Inserisce in LABSEMAG_NEW return:ActionResult + [HttpPost] + [Route("rapportini/add")] + public async Task> addrapportino([FromBody] Mag_New model, string token) + { + string ten = getClaimValueByToken(token, "tenant"); + string tenConf = getClaimValueByToken(token, "tenantConfigurazioni"); + if (string.IsNullOrEmpty(ten)) + { + ten = tenConf; + } + + Mag_New co = new Mag_New(); + Mag_New_out co_out = new Mag_New_out(); + co = await fillMag_NewByInput(model, token); + co_out = fillMag_NewOUTByInput(co); + + try + { + //switch (ten) + //{ + // case Clienti.Sicilia: + // using (var transaction = _Sicilia_mag.Database.BeginTransaction()) + // { + // await _Sicilia_mag.Mag.AddAsync(co); + // await _Sicilia_mag.SaveChangesAsync(); + // transaction.Commit(); + // } + // break; + // case Clienti.Siet: + // using (var transactionSiet = _Siet_mag.Database.BeginTransaction()) + // { + // await _Siet_mag.Mag.AddAsync(co); + // await _Siet_mag.SaveChangesAsync(); + // transactionSiet.Commit(); + // } + // break; + // case Clienti.PMS: + // using (var transactionPMS = _PMS_mag.Database.BeginTransaction()) + // { + // await _PMS_mag.Mag.AddAsync(co); + // await _PMS_mag.SaveChangesAsync(); + // transactionPMS.Commit(); + // } + // break; + // case Clienti.LW: + // using (var transactionlw = _LW_mag.Database.BeginTransaction()) + // { + // await _LW_mag.Mag.AddAsync(co); + // await _LW_mag.SaveChangesAsync(); + // transactionlw.Commit(); + // } + // break; + // case Clienti.Tedesco: + // using (var transactionTedes = _Tedes_mag.Database.BeginTransaction()) + // { + // await _Tedes_mag.Mag.AddAsync(co); + // await _Tedes_mag.SaveChangesAsync(); + // transactionTedes.Commit(); + // } + // break; + // case Clienti.Syscom: + // using (var transactionsys = _Sys_mag.Database.BeginTransaction()) + // { + // await _Sys_mag.Mag.AddAsync(co); + // await _Sys_mag.SaveChangesAsync(); + // transactionsys.Commit(); + // } + // break; + // default: + // break; + //} + + co_out.err_status_code = StatiRisposta.Ok; + return StatusCode(StatusCodes.Status200OK, co_out); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + co_out.err_title = ex.Message; + co_out.err_detail = errmsg; + co_out.err_status_code = StatiRisposta.ErroreInterno; + return StatusCode(StatusCodes.Status500InternalServerError, co_out); + } + //return co_out; + } + + #endregion + + #region Storico rapportini + + private Sto_Rapp_out fillSto_Rapp_Out(Sto_Rapp i, string tenant) + { + Sto_Rapp_out o = new Sto_Rapp_out(); + + o.tccodice = !string.IsNullOrEmpty(i.tccodice) ? i.tccodice.Trim() : string.Empty; ; + o.tcdescri = !string.IsNullOrEmpty(i.tcdescri) ? i.tcdescri.Trim() : string.Empty; ; + o.note_esito = !string.IsNullOrEmpty(i.note_esito) ? i.note_esito.Trim():string.Empty ; + o.data_rapportino = i.data_rapportino; + + Dictionary dic = new Dictionary(); + string appo = string.Empty; + if (!string.IsNullOrEmpty(i.codice_chiusura_1) && !i.codice_chiusura_1.Trim().Equals(string.Empty)) + { + appo = string.Empty; + appo = !string.IsNullOrEmpty(i.cc1) ? " - " + i.cc1 : string.Empty; + dic.Add("Cod. Chiusura 1", i.codice_chiusura_1.Trim() + appo); + } + if (!string.IsNullOrEmpty(i.codice_chiusura_2) && !i.codice_chiusura_2.Trim().Equals(string.Empty)) + { + appo = string.Empty; + appo = !string.IsNullOrEmpty(i.cc2) ? " - " + i.cc2 : string.Empty; + dic.Add("Cod. Chiusura 2", i.codice_chiusura_2.Trim() + appo); + } + if (!string.IsNullOrEmpty(i.codice_chiusura_3) && !i.codice_chiusura_3.Trim().Equals(string.Empty)) + { + appo = string.Empty; + appo = !string.IsNullOrEmpty(i.cc3) ? " - " + i.cc3 : string.Empty; + dic.Add("Cod. Chiusura 3", i.codice_chiusura_3.Trim() + appo); + } + if (!string.IsNullOrEmpty(i.codice_chiusura_4) && !i.codice_chiusura_4.Trim().Equals(string.Empty)) + { + appo = string.Empty; + appo = !string.IsNullOrEmpty(i.cc4) ? " - " + i.cc4 : string.Empty; + dic.Add("Cod. Chiusura 4", i.codice_chiusura_4.Trim() + appo); + } + if (!string.IsNullOrEmpty(i.codice_chiusura_5) && !i.codice_chiusura_5.Trim().Equals(string.Empty)) + { + appo = string.Empty; + appo = !string.IsNullOrEmpty(i.cc5) ? " - " + i.cc5 : string.Empty; + dic.Add("Cod. Chiusura 5", i.codice_chiusura_5.Trim() + appo); + } + + + if (!string.IsNullOrEmpty(i.codice_chiusura_6) && !i.codice_chiusura_6.Trim().Equals(string.Empty)) + { + appo = string.Empty; + appo = !string.IsNullOrEmpty(i.cc6) ? " - " + i.cc6 : string.Empty; + dic.Add("Cod. Chiusura 6", i.codice_chiusura_6.Trim() + appo); + } + if (!string.IsNullOrEmpty(i.codice_chiusura_7) && !i.codice_chiusura_7.Trim().Equals(string.Empty)) + { + appo = string.Empty; + appo = !string.IsNullOrEmpty(i.cc7) ? " - " + i.cc7 : string.Empty; + dic.Add("Cod. Chiusura 7", i.codice_chiusura_7.Trim() + appo); + } + if (!string.IsNullOrEmpty(i.codice_chiusura_8) && !i.codice_chiusura_8.Trim().Equals(string.Empty)) + { + appo = string.Empty; + appo = !string.IsNullOrEmpty(i.cc8) ? " - " + i.cc8 : string.Empty; + dic.Add("Cod. Chiusura 8", i.codice_chiusura_8.Trim() + appo); + } + if (!string.IsNullOrEmpty(i.codice_chiusura_9) && !i.codice_chiusura_9.Trim().Equals(string.Empty)) + { + appo = string.Empty; + appo = !string.IsNullOrEmpty(i.cc9) ? " - " + i.cc9 : string.Empty; + dic.Add("Cod. Chiusura 9", i.codice_chiusura_9.Trim() + appo); + } + if (!string.IsNullOrEmpty(i.codice_chiusura_10) && !i.codice_chiusura_10.Trim().Equals(string.Empty)) + { + appo = string.Empty; + appo = !string.IsNullOrEmpty(i.cc10) ? " - " + i.cc10 : string.Empty; + dic.Add("Cod. Chiusura 10", i.codice_chiusura_10.Trim() + appo); + } + if (!string.IsNullOrEmpty(i.descrizione_intervento) && !i.descrizione_intervento.Trim().Equals(string.Empty)) + { + dic.Add("Descrizione intervento", i.descrizione_intervento.Trim()); + } + if (!string.IsNullOrEmpty(i.note_intervento) && !i.note_intervento.Trim().Equals(string.Empty)) + { + dic.Add("Note intervento", i.note_intervento.Trim()); + } + if (!string.IsNullOrEmpty(i.esito_intervento) && !i.esito_intervento.Trim().Equals(string.Empty)) + { + dic.Add("Esito intervento", i.esito_intervento.Trim()); + } + //switch (tenant) + //{ + // case Clienti.Marrocco: + // #region marrocco + // //chiamata + // if (!string.IsNullOrEmpty(i.codice_segnalazione) && !i.codice_segnalazione.Trim().Equals(string.Empty)) + // { + // dic.Add("Codice segnalazione", i.codice_segnalazione.Trim()); + // } + // if (!string.IsNullOrEmpty(i.seriale_chiamata) && !i.seriale_chiamata.Trim().Equals(string.Empty)) + // { + // dic.Add("N° Chiamata", i.seriale_chiamata.Trim()); + // } + // //manutenzione + // if (!string.IsNullOrEmpty(i.codice_intervento) && !i.codice_intervento.Trim().Equals(string.Empty)) + // { + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_intervento.Trim()); + // if (!string.IsNullOrEmpty(i.cidescri) && !i.cidescri.Trim().Equals(string.Empty)) + // { + // sb.Append(" - " + i.cidescri.Trim()); + // } + // if (!string.IsNullOrEmpty(i.cidessup) && !i.cidessup.Trim().Equals(string.Empty)) + // { + // sb.Append(" - " + i.cidessup.Trim()); + // } + // dic.Add("Manutenzione", sb.ToString()); + // } + // if (i.data_manutenzione != null) + // { + // dic.Add("Data manutenzione", i.data_manutenzione.Value.ToString()); + // } + + // //dati intervento + // if (!string.IsNullOrEmpty(i.stato_finale) && !i.stato_finale.Trim().Equals(string.Empty)) + // { + // string st = string.Empty; + // switch (i.stato_finale) + // { + // case "1": + // st = "In Funzione"; + // dic.Add("Stato finale", st); + // break; + // case "0": + // st = "Fermo"; + // dic.Add("Stato finale", st); + // break; + // } + // } + // if (!string.IsNullOrEmpty(i.esito_intervento) && !i.esito_intervento.Trim().Equals(string.Empty)) + // { + // string st = string.Empty; + // switch (i.esito_intervento) + // { + // case "1": + // st = "Positivo"; + // break; + // case "P": + // st = "Positivo"; + // break; + // default: + // st = "Negativo"; + // break; + // } + // dic.Add("Esito intervento", st); + // } + // if (!string.IsNullOrEmpty(i.descrizione_intervento) && !i.descrizione_intervento.Trim().Equals(string.Empty)) + // { + // dic.Add("Descrizione intervento", i.descrizione_intervento.Trim()); + // } + // if (!string.IsNullOrEmpty(i.difetti_riscontrati) && !i.difetti_riscontrati.Trim().Equals(string.Empty)) + // { + // dic.Add("Difetti riscontrati", i.difetti_riscontrati.Trim()); + // } + // if (!string.IsNullOrEmpty(i.lavoro_eseguito) && !i.lavoro_eseguito.Trim().Equals(string.Empty)) + // { + // dic.Add("Lavoro eseguito", i.lavoro_eseguito.Trim()); + // } + // if (!string.IsNullOrEmpty(i.note_intervento) && !i.note_intervento.Trim().Equals(string.Empty)) + // { + // dic.Add("Note intervento", i.note_intervento); + // } + // if (!string.IsNullOrEmpty(i.tipo_intervento) && !i.tipo_intervento.Trim().Equals(string.Empty)) + // { + // dic.Add("Tipo intervento", i.tipo_intervento.Trim()); + // } + + // if (!string.IsNullOrEmpty(i.codice_chiusura_1) && !i.codice_chiusura_1.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_1.Trim()); + // if (!string.IsNullOrEmpty(i.cc1)) + // { + // sb.Append(" - " + i.cc1.Trim()); + // } + // sb.Append(i.ccds1); + // if (!string.IsNullOrEmpty(i.ccds1)) + // { + // sb.Append(" - " + i.ccds1.Trim()); + // } + // dic.Add("Codice Chiusura 1", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_2) && !i.codice_chiusura_2.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_2.Trim()); + // if (!string.IsNullOrEmpty(i.cc2)) + // { + // sb.Append(" - " + i.cc2.Trim()); + // } + // sb.Append(i.ccds2); + // if (!string.IsNullOrEmpty(i.ccds2)) + // { + // sb.Append(" - " + i.ccds2.Trim()); + // } + // dic.Add("Codice Chiusura 2", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_3) && !i.codice_chiusura_3.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_3.Trim()); + // if (!string.IsNullOrEmpty(i.cc3)) + // { + // sb.Append(" - " + i.cc3.Trim()); + // } + // sb.Append(i.ccds3); + // if (!string.IsNullOrEmpty(i.ccds3)) + // { + // sb.Append(" - " + i.ccds3.Trim()); + // } + // dic.Add("Codice Chiusura 3", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_4) && !i.codice_chiusura_4.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_4.Trim()); + // if (!string.IsNullOrEmpty(i.cc4)) + // { + // sb.Append(" - " + i.cc4.Trim()); + // } + // sb.Append(i.ccds4); + // if (!string.IsNullOrEmpty(i.ccds4)) + // { + // sb.Append(" - " + i.ccds4.Trim()); + // } + // dic.Add("Codice Chiusura 4", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_5) && !i.codice_chiusura_5.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_5.Trim()); + // if (!string.IsNullOrEmpty(i.cc5)) + // { + // sb.Append(" - " + i.cc5.Trim()); + // } + // sb.Append(i.ccds5); + // if (!string.IsNullOrEmpty(i.ccds5)) + // { + // sb.Append(" - " + i.ccds5.Trim()); + // } + // dic.Add("Codice Chiusura 5", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_6) && !i.codice_chiusura_6.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_6.Trim()); + // if (!string.IsNullOrEmpty(i.cc6)) + // { + // sb.Append(" - " + i.cc6.Trim()); + // } + // sb.Append(i.ccds6); + // if (!string.IsNullOrEmpty(i.ccds6)) + // { + // sb.Append(" - " + i.ccds6.Trim()); + // } + // dic.Add("Codice Chiusura 6", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_7) && !i.codice_chiusura_7.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_7.Trim()); + // if (!string.IsNullOrEmpty(i.cc7)) + // { + // sb.Append(" - " + i.cc7.Trim()); + // } + // sb.Append(i.ccds7); + // if (!string.IsNullOrEmpty(i.ccds7)) + // { + // sb.Append(" - " + i.ccds7.Trim()); + // } + // dic.Add("Codice Chiusura 7", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_8) && !i.codice_chiusura_8.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_8.Trim()); + // if (!string.IsNullOrEmpty(i.cc8)) + // { + // sb.Append(" - " + i.cc8.Trim()); + // } + // sb.Append(i.ccds8); + // if (!string.IsNullOrEmpty(i.ccds8)) + // { + // sb.Append(" - " + i.ccds8.Trim()); + // } + // dic.Add("Codice Chiusura 8", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_9) && !i.codice_chiusura_9.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_9.Trim()); + // if (!string.IsNullOrEmpty(i.cc9)) + // { + // sb.Append(" - " + i.cc9.Trim()); + // } + // sb.Append(i.ccds9); + // if (!string.IsNullOrEmpty(i.ccds9)) + // { + // sb.Append(" - " + i.ccds9.Trim()); + // } + // dic.Add("Codice Chiusura 9", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_10) && !i.codice_chiusura_10.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_10.Trim()); + // if (!string.IsNullOrEmpty(i.cc10)) + // { + // sb.Append(" - " + i.cc10.Trim()); + // } + // sb.Append(i.ccds10); + // if (!string.IsNullOrEmpty(i.ccds10)) + // { + // sb.Append(" - " + i.ccds10.Trim()); + // } + // dic.Add("Codice Chiusura 10", sb.ToString()); + // } + + // if (!string.IsNullOrEmpty(i.firma) && !i.firma.Trim().Equals(string.Empty)) + // { + // dic.Add("Firma", i.firma.Trim()); + // } + + // if (!string.IsNullOrEmpty(i.ser_buono) && !i.ser_buono.Trim().Equals(string.Empty)) + // { + // dic.Add("N° buono", i.ser_buono.Trim()); + // } + // if (!string.IsNullOrEmpty(i.seriale_rapportino) && !i.seriale_rapportino.Trim().Equals(string.Empty)) + // { + // dic.Add("Seriale rapportino", i.seriale_rapportino.Trim()); + // } + // if (!string.IsNullOrEmpty(i.pagamento) && !i.pagamento.Trim().Equals(string.Empty)) + // { + // dic.Add("Pagamento", i.pagamento.Trim()); + // } + // if (!string.IsNullOrEmpty(i.note_pagamento) && !i.note_pagamento.Trim().Equals(string.Empty)) + // { + // dic.Add("Note pagamento", i.note_pagamento.Trim()); + // } + // if (!string.IsNullOrEmpty(i.codice_impianto) && !i.codice_impianto.Trim().Equals(string.Empty)) + // { + // dic.Add("Cod. impianto", i.codice_impianto.Trim()); + // } + // if (!string.IsNullOrEmpty(i.indirizzo) && !i.indirizzo.Trim().Equals(string.Empty)) + // { + // StringBuilder sb = new StringBuilder(); + // string ind = string.Empty; + // string via = !string.IsNullOrEmpty(i.indirizzo_tipo) ? i.indirizzo_tipo.Trim() : string.Empty; + // string indiri = !string.IsNullOrEmpty(i.indirizzo) ? i.indirizzo.Trim() : string.Empty; + // string num = string.Empty; + // if (i.indirizzo_num != null && i.indirizzo_num.Value > 0) + // { + // num = i.indirizzo_num.ToString().Trim(); + // } + // string num2 = !string.IsNullOrEmpty(i.indirizzo_num2) ? i.indirizzo_num2.Trim() : string.Empty; + // string sca = !string.IsNullOrEmpty(i.indirizzo_scala) ? i.indirizzo_scala.Trim() : string.Empty; + + // //ind = string.Concat("{0} {1} num {2} interno {3} scala {4}",via,indiri,num,num2,sca); + // if (!string.IsNullOrEmpty(via)) sb.Append(via); + // if (!string.IsNullOrEmpty(indiri)) sb.Append(" " + indiri); + // if (!string.IsNullOrEmpty(num)) sb.Append(" ," + num); + // if (!string.IsNullOrEmpty(num2)) sb.Append(" Int: " + num2); + // if (!string.IsNullOrEmpty(sca)) sb.Append(" Scala: " + sca); + // dic.Add("Indirizzo imp", sb.ToString()); + + // } + // if (!string.IsNullOrEmpty(i.azienda_tecnico) && !i.azienda_tecnico.Trim().Equals(string.Empty)) + // { + // dic.Add("Azienda", i.azienda_tecnico); + // } + // if (!string.IsNullOrEmpty(i.generato) && !i.generato.Trim().Equals(string.Empty)) + // { + // string st = string.Empty; + // switch (i.generato) + // { + // case "S": + // st = "SI"; + // break; + // default: + // st = "NO"; + // break; + // } + // dic.Add("Rapportino importato", st); + // } + + // if (i.ore_lavoro != null && i.ore_lavoro.Value > 0) + // { + // dic.Add("Ore lavoro", i.ore_lavoro.Value.ToString()); + // } + // if (i.spese_viaggio != null && i.spese_viaggio.Value > 0) + // { + // dic.Add("Spese viaggio", i.spese_viaggio.Value.ToString()); + // } + // if (i.materiale != null && i.materiale.Value > 0) + // { + // dic.Add("Materiale", i.materiale.Value.ToString()); + // } + // if (i.anticipo != null && i.anticipo.Value > 0) + // { + // dic.Add("Anticipo", i.anticipo.Value.ToString()); + // } + // if (i.manodopera != null && i.manodopera.Value > 0) + // { + // dic.Add("Manodopera", i.manodopera.Value.ToString()); + // } + // if (i.diritto_chiamata != null && i.diritto_chiamata.Value > 0) + // { + // dic.Add("Diritto chiamata", i.diritto_chiamata.Value.ToString()); + // } + // if (i.totale != null && i.totale.Value > 0) + // { + // dic.Add("Totale", i.totale.Value.ToString()); + // } + // #endregion + // break; + // case Clienti.Gitoga: + // #region gitoga + // //chiamata + // if (!string.IsNullOrEmpty(i.codice_segnalazione) && !i.codice_segnalazione.Trim().Equals(string.Empty)) + // { + // dic.Add("Codice segnalazione", i.codice_segnalazione.Trim()); + // } + // if (!string.IsNullOrEmpty(i.seriale_chiamata) && !i.seriale_chiamata.Trim().Equals(string.Empty)) + // { + // dic.Add("N° Chiamata", i.seriale_chiamata.Trim()); + // } + // //manutenzione + // if (!string.IsNullOrEmpty(i.codice_intervento) && !i.codice_intervento.Trim().Equals(string.Empty)) + // { + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_intervento.Trim()); + // if (!string.IsNullOrEmpty(i.cidescri) && !i.cidescri.Trim().Equals(string.Empty)) + // { + // sb.Append(" - " + i.cidescri.Trim()); + // } + // if (!string.IsNullOrEmpty(i.cidessup) && !i.cidessup.Trim().Equals(string.Empty)) + // { + // sb.Append(" - " + i.cidessup.Trim()); + // } + // dic.Add("Manutenzione", sb.ToString()); + // } + // if (i.data_manutenzione != null) + // { + // dic.Add("Data manutenzione", i.data_manutenzione.Value.ToString()); + // } + + // //dati intervento + // if (!string.IsNullOrEmpty(i.stato_finale) && !i.stato_finale.Trim().Equals(string.Empty)) + // { + // string st = string.Empty; + // switch (i.stato_finale) + // { + // case "1": + // st = "In Funzione"; + // dic.Add("Stato finale", st); + // break; + // case "0": + // st = "Fermo"; + // dic.Add("Stato finale", st); + // break; + // } + // } + // if (!string.IsNullOrEmpty(i.esito_intervento) && !i.esito_intervento.Trim().Equals(string.Empty)) + // { + // string st = string.Empty; + // switch (i.esito_intervento) + // { + // case "1": + // st = "Positivo"; + // break; + // case "P": + // st = "Positivo"; + // break; + // default: + // st = "Negativo"; + // break; + // } + // dic.Add("Esito intervento", st); + // } + // if (!string.IsNullOrEmpty(i.descrizione_intervento) && !i.descrizione_intervento.Trim().Equals(string.Empty)) + // { + // dic.Add("Descrizione intervento", i.descrizione_intervento.Trim()); + // } + // if (!string.IsNullOrEmpty(i.difetti_riscontrati) && !i.difetti_riscontrati.Trim().Equals(string.Empty)) + // { + // dic.Add("Difetti riscontrati", i.difetti_riscontrati.Trim()); + // } + // if (!string.IsNullOrEmpty(i.lavoro_eseguito) && !i.lavoro_eseguito.Trim().Equals(string.Empty)) + // { + // dic.Add("Lavoro eseguito", i.lavoro_eseguito.Trim()); + // } + // if (!string.IsNullOrEmpty(i.note_intervento) && !i.note_intervento.Trim().Equals(string.Empty)) + // { + // dic.Add("Note intervento", i.note_intervento); + // } + // if (!string.IsNullOrEmpty(i.tipo_intervento) && !i.tipo_intervento.Trim().Equals(string.Empty)) + // { + // dic.Add("Tipo intervento", i.tipo_intervento.Trim()); + // } + + // if (!string.IsNullOrEmpty(i.codice_chiusura_1) && !i.codice_chiusura_1.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_1.Trim()); + // if (!string.IsNullOrEmpty(i.cc1)) + // { + // sb.Append(" - " + i.cc1.Trim()); + // } + // sb.Append(i.ccds1); + // if (!string.IsNullOrEmpty(i.ccds1)) + // { + // sb.Append(" - " + i.ccds1.Trim()); + // } + // dic.Add("Codice Chiusura 1", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_2) && !i.codice_chiusura_2.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_2.Trim()); + // if (!string.IsNullOrEmpty(i.cc2)) + // { + // sb.Append(" - " + i.cc2.Trim()); + // } + // sb.Append(i.ccds2); + // if (!string.IsNullOrEmpty(i.ccds2)) + // { + // sb.Append(" - " + i.ccds2.Trim()); + // } + // dic.Add("Codice Chiusura 2", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_3) && !i.codice_chiusura_3.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_3.Trim()); + // if (!string.IsNullOrEmpty(i.cc3)) + // { + // sb.Append(" - " + i.cc3.Trim()); + // } + // sb.Append(i.ccds3); + // if (!string.IsNullOrEmpty(i.ccds3)) + // { + // sb.Append(" - " + i.ccds3.Trim()); + // } + // dic.Add("Codice Chiusura 3", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_4) && !i.codice_chiusura_4.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_4.Trim()); + // if (!string.IsNullOrEmpty(i.cc4)) + // { + // sb.Append(" - " + i.cc4.Trim()); + // } + // sb.Append(i.ccds4); + // if (!string.IsNullOrEmpty(i.ccds4)) + // { + // sb.Append(" - " + i.ccds4.Trim()); + // } + // dic.Add("Codice Chiusura 4", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_5) && !i.codice_chiusura_5.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_5.Trim()); + // if (!string.IsNullOrEmpty(i.cc5)) + // { + // sb.Append(" - " + i.cc5.Trim()); + // } + // sb.Append(i.ccds5); + // if (!string.IsNullOrEmpty(i.ccds5)) + // { + // sb.Append(" - " + i.ccds5.Trim()); + // } + // dic.Add("Codice Chiusura 5", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_6) && !i.codice_chiusura_6.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_6.Trim()); + // if (!string.IsNullOrEmpty(i.cc6)) + // { + // sb.Append(" - " + i.cc6.Trim()); + // } + // sb.Append(i.ccds6); + // if (!string.IsNullOrEmpty(i.ccds6)) + // { + // sb.Append(" - " + i.ccds6.Trim()); + // } + // dic.Add("Codice Chiusura 6", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_7) && !i.codice_chiusura_7.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_7.Trim()); + // if (!string.IsNullOrEmpty(i.cc7)) + // { + // sb.Append(" - " + i.cc7.Trim()); + // } + // sb.Append(i.ccds7); + // if (!string.IsNullOrEmpty(i.ccds7)) + // { + // sb.Append(" - " + i.ccds7.Trim()); + // } + // dic.Add("Codice Chiusura 7", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_8) && !i.codice_chiusura_8.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_8.Trim()); + // if (!string.IsNullOrEmpty(i.cc8)) + // { + // sb.Append(" - " + i.cc8.Trim()); + // } + // sb.Append(i.ccds8); + // if (!string.IsNullOrEmpty(i.ccds8)) + // { + // sb.Append(" - " + i.ccds8.Trim()); + // } + // dic.Add("Codice Chiusura 8", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_9) && !i.codice_chiusura_9.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_9.Trim()); + // if (!string.IsNullOrEmpty(i.cc9)) + // { + // sb.Append(" - " + i.cc9.Trim()); + // } + // sb.Append(i.ccds9); + // if (!string.IsNullOrEmpty(i.ccds9)) + // { + // sb.Append(" - " + i.ccds9.Trim()); + // } + // dic.Add("Codice Chiusura 9", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_10) && !i.codice_chiusura_10.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_10.Trim()); + // if (!string.IsNullOrEmpty(i.cc10)) + // { + // sb.Append(" - " + i.cc10.Trim()); + // } + // sb.Append(i.ccds10); + // if (!string.IsNullOrEmpty(i.ccds10)) + // { + // sb.Append(" - " + i.ccds10.Trim()); + // } + // dic.Add("Codice Chiusura 10", sb.ToString()); + // } + + // if (!string.IsNullOrEmpty(i.firma) && !i.firma.Trim().Equals(string.Empty)) + // { + // dic.Add("Firma", i.firma.Trim()); + // } + + // if (!string.IsNullOrEmpty(i.ser_buono) && !i.ser_buono.Trim().Equals(string.Empty)) + // { + // dic.Add("N° buono", i.ser_buono.Trim()); + // } + // if (!string.IsNullOrEmpty(i.seriale_rapportino) && !i.seriale_rapportino.Trim().Equals(string.Empty)) + // { + // dic.Add("Seriale rapportino", i.seriale_rapportino.Trim()); + // } + // if (!string.IsNullOrEmpty(i.pagamento) && !i.pagamento.Trim().Equals(string.Empty)) + // { + // dic.Add("Pagamento", i.pagamento.Trim()); + // } + // if (!string.IsNullOrEmpty(i.note_pagamento) && !i.note_pagamento.Trim().Equals(string.Empty)) + // { + // dic.Add("Note pagamento", i.note_pagamento.Trim()); + // } + // if (!string.IsNullOrEmpty(i.codice_impianto) && !i.codice_impianto.Trim().Equals(string.Empty)) + // { + // dic.Add("Cod. impianto", i.codice_impianto.Trim()); + // } + // if (!string.IsNullOrEmpty(i.indirizzo) && !i.indirizzo.Trim().Equals(string.Empty)) + // { + // StringBuilder sb = new StringBuilder(); + // string ind = string.Empty; + // string via = !string.IsNullOrEmpty(i.indirizzo_tipo) ? i.indirizzo_tipo.Trim() : string.Empty; + // string indiri = !string.IsNullOrEmpty(i.indirizzo) ? i.indirizzo.Trim() : string.Empty; + // string num = string.Empty; + // if (i.indirizzo_num != null && i.indirizzo_num.Value > 0) + // { + // num = i.indirizzo_num.ToString().Trim(); + // } + // string num2 = !string.IsNullOrEmpty(i.indirizzo_num2) ? i.indirizzo_num2.Trim() : string.Empty; + // string sca = !string.IsNullOrEmpty(i.indirizzo_scala) ? i.indirizzo_scala.Trim() : string.Empty; + + // //ind = string.Concat("{0} {1} num {2} interno {3} scala {4}",via,indiri,num,num2,sca); + // if (!string.IsNullOrEmpty(via)) sb.Append(via); + // if (!string.IsNullOrEmpty(indiri)) sb.Append(" " + indiri); + // if (!string.IsNullOrEmpty(num)) sb.Append(" ," + num); + // if (!string.IsNullOrEmpty(num2)) sb.Append(" Int: " + num2); + // if (!string.IsNullOrEmpty(sca)) sb.Append(" Scala: " + sca); + // dic.Add("Indirizzo imp", sb.ToString()); + + // } + // if (!string.IsNullOrEmpty(i.azienda_tecnico) && !i.azienda_tecnico.Trim().Equals(string.Empty)) + // { + // dic.Add("Azienda", i.azienda_tecnico); + // } + // if (!string.IsNullOrEmpty(i.generato) && !i.generato.Trim().Equals(string.Empty)) + // { + // string st = string.Empty; + // switch (i.generato) + // { + // case "S": + // st = "SI"; + // break; + // default: + // st = "NO"; + // break; + // } + // dic.Add("Rapportino importato", st); + // } + + // if (i.ore_lavoro != null && i.ore_lavoro.Value > 0) + // { + // dic.Add("Ore lavoro", i.ore_lavoro.Value.ToString()); + // } + // if (i.spese_viaggio != null && i.spese_viaggio.Value > 0) + // { + // dic.Add("Spese viaggio", i.spese_viaggio.Value.ToString()); + // } + // if (i.materiale != null && i.materiale.Value > 0) + // { + // dic.Add("Materiale", i.materiale.Value.ToString()); + // } + // if (i.anticipo != null && i.anticipo.Value > 0) + // { + // dic.Add("Anticipo", i.anticipo.Value.ToString()); + // } + // if (i.manodopera != null && i.manodopera.Value > 0) + // { + // dic.Add("Manodopera", i.manodopera.Value.ToString()); + // } + // if (i.diritto_chiamata != null && i.diritto_chiamata.Value > 0) + // { + // dic.Add("Diritto chiamata", i.diritto_chiamata.Value.ToString()); + // } + // if (i.totale != null && i.totale.Value > 0) + // { + // dic.Add("Totale", i.totale.Value.ToString()); + // } + // #endregion + // break; + // case Clienti.Lifta: + // #region lifta + // //chiamata + // if (!string.IsNullOrEmpty(i.codice_segnalazione) && !i.codice_segnalazione.Trim().Equals(string.Empty)) + // { + // dic.Add("Codice segnalazione", i.codice_segnalazione.Trim()); + // } + // if (!string.IsNullOrEmpty(i.seriale_chiamata) && !i.seriale_chiamata.Trim().Equals(string.Empty)) + // { + // dic.Add("N° Chiamata", i.seriale_chiamata.Trim()); + // } + // //manutenzione + // if (!string.IsNullOrEmpty(i.codice_intervento) && !i.codice_intervento.Trim().Equals(string.Empty)) + // { + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_intervento.Trim()); + // if (!string.IsNullOrEmpty(i.cidescri) && !i.cidescri.Trim().Equals(string.Empty)) + // { + // sb.Append(" - " + i.cidescri.Trim()); + // } + // if (!string.IsNullOrEmpty(i.cidessup) && !i.cidessup.Trim().Equals(string.Empty)) + // { + // sb.Append(" - " + i.cidessup.Trim()); + // } + // dic.Add("Manutenzione", sb.ToString()); + // } + // if (i.data_manutenzione != null) + // { + // dic.Add("Data manutenzione", i.data_manutenzione.Value.ToString()); + // } + + // //dati intervento + // if (!string.IsNullOrEmpty(i.stato_finale) && !i.stato_finale.Trim().Equals(string.Empty)) + // { + // string st = string.Empty; + // switch (i.stato_finale) + // { + // case "1": + // st = "In Funzione"; + // dic.Add("Stato finale", st); + // break; + // case "0": + // st = "Fermo"; + // dic.Add("Stato finale", st); + // break; + // } + // } + // if (!string.IsNullOrEmpty(i.esito_intervento) && !i.esito_intervento.Trim().Equals(string.Empty)) + // { + // string st = string.Empty; + // switch (i.esito_intervento) + // { + // case "1": + // st = "Positivo"; + // break; + // case "P": + // st = "Positivo"; + // break; + // default: + // st = "Negativo"; + // break; + // } + // dic.Add("Esito intervento", st); + // } + // if (!string.IsNullOrEmpty(i.descrizione_intervento) && !i.descrizione_intervento.Trim().Equals(string.Empty)) + // { + // dic.Add("Descrizione intervento", i.descrizione_intervento.Trim()); + // } + // if (!string.IsNullOrEmpty(i.difetti_riscontrati) && !i.difetti_riscontrati.Trim().Equals(string.Empty)) + // { + // dic.Add("Difetti riscontrati", i.difetti_riscontrati.Trim()); + // } + // if (!string.IsNullOrEmpty(i.lavoro_eseguito) && !i.lavoro_eseguito.Trim().Equals(string.Empty)) + // { + // dic.Add("Lavoro eseguito", i.lavoro_eseguito.Trim()); + // } + // if (!string.IsNullOrEmpty(i.note_intervento) && !i.note_intervento.Trim().Equals(string.Empty)) + // { + // dic.Add("Note intervento", i.note_intervento); + // } + // if (!string.IsNullOrEmpty(i.tipo_intervento) && !i.tipo_intervento.Trim().Equals(string.Empty)) + // { + // dic.Add("Tipo intervento", i.tipo_intervento.Trim()); + // } + + // if (!string.IsNullOrEmpty(i.codice_chiusura_1) && !i.codice_chiusura_1.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_1.Trim()); + // if (!string.IsNullOrEmpty(i.cc1)) + // { + // sb.Append(" - " + i.cc1.Trim()); + // } + // sb.Append(i.ccds1); + // if (!string.IsNullOrEmpty(i.ccds1)) + // { + // sb.Append(" - " + i.ccds1.Trim()); + // } + // dic.Add("Codice Chiusura 1", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_2) && !i.codice_chiusura_2.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_2.Trim()); + // if (!string.IsNullOrEmpty(i.cc2)) + // { + // sb.Append(" - " + i.cc2.Trim()); + // } + // sb.Append(i.ccds2); + // if (!string.IsNullOrEmpty(i.ccds2)) + // { + // sb.Append(" - " + i.ccds2.Trim()); + // } + // dic.Add("Codice Chiusura 2", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_3) && !i.codice_chiusura_3.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_3.Trim()); + // if (!string.IsNullOrEmpty(i.cc3)) + // { + // sb.Append(" - " + i.cc3.Trim()); + // } + // sb.Append(i.ccds3); + // if (!string.IsNullOrEmpty(i.ccds3)) + // { + // sb.Append(" - " + i.ccds3.Trim()); + // } + // dic.Add("Codice Chiusura 3", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_4) && !i.codice_chiusura_4.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_4.Trim()); + // if (!string.IsNullOrEmpty(i.cc4)) + // { + // sb.Append(" - " + i.cc4.Trim()); + // } + // sb.Append(i.ccds4); + // if (!string.IsNullOrEmpty(i.ccds4)) + // { + // sb.Append(" - " + i.ccds4.Trim()); + // } + // dic.Add("Codice Chiusura 4", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_5) && !i.codice_chiusura_5.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_5.Trim()); + // if (!string.IsNullOrEmpty(i.cc5)) + // { + // sb.Append(" - " + i.cc5.Trim()); + // } + // sb.Append(i.ccds5); + // if (!string.IsNullOrEmpty(i.ccds5)) + // { + // sb.Append(" - " + i.ccds5.Trim()); + // } + // dic.Add("Codice Chiusura 5", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_6) && !i.codice_chiusura_6.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_6.Trim()); + // if (!string.IsNullOrEmpty(i.cc6)) + // { + // sb.Append(" - " + i.cc6.Trim()); + // } + // sb.Append(i.ccds6); + // if (!string.IsNullOrEmpty(i.ccds6)) + // { + // sb.Append(" - " + i.ccds6.Trim()); + // } + // dic.Add("Codice Chiusura 6", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_7) && !i.codice_chiusura_7.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_7.Trim()); + // if (!string.IsNullOrEmpty(i.cc7)) + // { + // sb.Append(" - " + i.cc7.Trim()); + // } + // sb.Append(i.ccds7); + // if (!string.IsNullOrEmpty(i.ccds7)) + // { + // sb.Append(" - " + i.ccds7.Trim()); + // } + // dic.Add("Codice Chiusura 7", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_8) && !i.codice_chiusura_8.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_8.Trim()); + // if (!string.IsNullOrEmpty(i.cc8)) + // { + // sb.Append(" - " + i.cc8.Trim()); + // } + // sb.Append(i.ccds8); + // if (!string.IsNullOrEmpty(i.ccds8)) + // { + // sb.Append(" - " + i.ccds8.Trim()); + // } + // dic.Add("Codice Chiusura 8", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_9) && !i.codice_chiusura_9.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_9.Trim()); + // if (!string.IsNullOrEmpty(i.cc9)) + // { + // sb.Append(" - " + i.cc9.Trim()); + // } + // sb.Append(i.ccds9); + // if (!string.IsNullOrEmpty(i.ccds9)) + // { + // sb.Append(" - " + i.ccds9.Trim()); + // } + // dic.Add("Codice Chiusura 9", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_10) && !i.codice_chiusura_10.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_10.Trim()); + // if (!string.IsNullOrEmpty(i.cc10)) + // { + // sb.Append(" - " + i.cc10.Trim()); + // } + // sb.Append(i.ccds10); + // if (!string.IsNullOrEmpty(i.ccds10)) + // { + // sb.Append(" - " + i.ccds10.Trim()); + // } + // dic.Add("Codice Chiusura 10", sb.ToString()); + // } + + // if (!string.IsNullOrEmpty(i.firma) && !i.firma.Trim().Equals(string.Empty)) + // { + // dic.Add("Firma", i.firma.Trim()); + // } + + // if (!string.IsNullOrEmpty(i.ser_buono) && !i.ser_buono.Trim().Equals(string.Empty)) + // { + // dic.Add("N° buono", i.ser_buono.Trim()); + // } + // if (!string.IsNullOrEmpty(i.seriale_rapportino) && !i.seriale_rapportino.Trim().Equals(string.Empty)) + // { + // dic.Add("Seriale rapportino", i.seriale_rapportino.Trim()); + // } + // if (!string.IsNullOrEmpty(i.pagamento) && !i.pagamento.Trim().Equals(string.Empty)) + // { + // dic.Add("Pagamento", i.pagamento.Trim()); + // } + // if (!string.IsNullOrEmpty(i.note_pagamento) && !i.note_pagamento.Trim().Equals(string.Empty)) + // { + // dic.Add("Note pagamento", i.note_pagamento.Trim()); + // } + // if (!string.IsNullOrEmpty(i.codice_impianto) && !i.codice_impianto.Trim().Equals(string.Empty)) + // { + // dic.Add("Cod. impianto", i.codice_impianto.Trim()); + // } + // if (!string.IsNullOrEmpty(i.indirizzo) && !i.indirizzo.Trim().Equals(string.Empty)) + // { + // StringBuilder sb = new StringBuilder(); + // string ind = string.Empty; + // string via = !string.IsNullOrEmpty(i.indirizzo_tipo) ? i.indirizzo_tipo.Trim() : string.Empty; + // string indiri = !string.IsNullOrEmpty(i.indirizzo) ? i.indirizzo.Trim() : string.Empty; + // string num = string.Empty; + // if (i.indirizzo_num != null && i.indirizzo_num.Value > 0) + // { + // num = i.indirizzo_num.ToString().Trim(); + // } + // string num2 = !string.IsNullOrEmpty(i.indirizzo_num2) ? i.indirizzo_num2.Trim() : string.Empty; + // string sca = !string.IsNullOrEmpty(i.indirizzo_scala) ? i.indirizzo_scala.Trim() : string.Empty; + + // //ind = string.Concat("{0} {1} num {2} interno {3} scala {4}",via,indiri,num,num2,sca); + // if (!string.IsNullOrEmpty(via)) sb.Append(via); + // if (!string.IsNullOrEmpty(indiri)) sb.Append(" " + indiri); + // if (!string.IsNullOrEmpty(num)) sb.Append(" ," + num); + // if (!string.IsNullOrEmpty(num2)) sb.Append(" Int: " + num2); + // if (!string.IsNullOrEmpty(sca)) sb.Append(" Scala: " + sca); + // dic.Add("Indirizzo imp", sb.ToString()); + + // } + // if (!string.IsNullOrEmpty(i.azienda_tecnico) && !i.azienda_tecnico.Trim().Equals(string.Empty)) + // { + // dic.Add("Azienda", i.azienda_tecnico); + // } + // if (!string.IsNullOrEmpty(i.generato) && !i.generato.Trim().Equals(string.Empty)) + // { + // string st = string.Empty; + // switch (i.generato) + // { + // case "S": + // st = "SI"; + // break; + // default: + // st = "NO"; + // break; + // } + // dic.Add("Rapportino importato", st); + // } + + // if (i.ore_lavoro != null && i.ore_lavoro.Value > 0) + // { + // dic.Add("Ore lavoro", i.ore_lavoro.Value.ToString()); + // } + // if (i.spese_viaggio != null && i.spese_viaggio.Value > 0) + // { + // dic.Add("Spese viaggio", i.spese_viaggio.Value.ToString()); + // } + // if (i.materiale != null && i.materiale.Value > 0) + // { + // dic.Add("Materiale", i.materiale.Value.ToString()); + // } + // if (i.anticipo != null && i.anticipo.Value > 0) + // { + // dic.Add("Anticipo", i.anticipo.Value.ToString()); + // } + // if (i.manodopera != null && i.manodopera.Value > 0) + // { + // dic.Add("Manodopera", i.manodopera.Value.ToString()); + // } + // if (i.diritto_chiamata != null && i.diritto_chiamata.Value > 0) + // { + // dic.Add("Diritto chiamata", i.diritto_chiamata.Value.ToString()); + // } + // if (i.totale != null && i.totale.Value > 0) + // { + // dic.Add("Totale", i.totale.Value.ToString()); + // } + // #endregion + // break; + // case Clienti.Ferrari: + // #region ferrari + + // //chiamata + // if (!string.IsNullOrEmpty(i.codice_segnalazione) && !i.codice_segnalazione.Trim().Equals(string.Empty)) + // { + // dic.Add("Codice segnalazione", i.codice_segnalazione.Trim()); + // } + // if (!string.IsNullOrEmpty(i.seriale_chiamata) && !i.seriale_chiamata.Trim().Equals(string.Empty)) + // { + // dic.Add("N° Chiamata", i.seriale_chiamata.Trim()); + // } + // //manutenzione + // if (!string.IsNullOrEmpty(i.codice_intervento) && !i.codice_intervento.Trim().Equals(string.Empty)) + // { + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_intervento.Trim()); + // if(!string.IsNullOrEmpty(i.cidescri) && !i.cidescri.Trim().Equals(string.Empty)) + // { + // sb.Append(" - "+i.cidescri.Trim()); + // } + // if (!string.IsNullOrEmpty(i.cidessup) && !i.cidessup.Trim().Equals(string.Empty)) + // { + // sb.Append(" - " + i.cidessup.Trim()); + // } + // dic.Add("Manutenzione", sb.ToString()); + // } + // if(i.data_manutenzione!=null) + // { + // dic.Add("Data manutenzione", i.data_manutenzione.Value.ToString()); + // } + + // //dati intervento + // if (!string.IsNullOrEmpty(i.stato_finale) && !i.stato_finale.Trim().Equals(string.Empty)) + // { + // string st = string.Empty; + // switch (i.stato_finale) + // { + // case "1": + // st = "In Funzione"; + // dic.Add("Stato finale", st); + // break; + // case "0": + // st = "Fermo"; + // dic.Add("Stato finale", st); + // break; + // } + // } + // if (!string.IsNullOrEmpty(i.esito_intervento) && !i.esito_intervento.Trim().Equals(string.Empty)) + // { + // string st = string.Empty; + // switch (i.esito_intervento) + // { + // case "1": + // st = "Positivo"; + // break; + // case "P": + // st = "Positivo"; + // break; + // default: + // st = "Negativo"; + // break; + // } + // dic.Add("Esito intervento", st); + // } + // if (!string.IsNullOrEmpty(i.descrizione_intervento) && !i.descrizione_intervento.Trim().Equals(string.Empty)) + // { + // dic.Add("Descrizione intervento", i.descrizione_intervento.Trim()); + // } + // if (!string.IsNullOrEmpty(i.difetti_riscontrati) && !i.difetti_riscontrati.Trim().Equals(string.Empty)) + // { + // dic.Add("Difetti riscontrati", i.difetti_riscontrati.Trim()); + // } + // if (!string.IsNullOrEmpty(i.lavoro_eseguito) && !i.lavoro_eseguito.Trim().Equals(string.Empty)) + // { + // dic.Add("Lavoro eseguito", i.lavoro_eseguito.Trim()); + // } + // if (!string.IsNullOrEmpty(i.note_intervento) && !i.note_intervento.Trim().Equals(string.Empty)) + // { + // dic.Add("Note intervento", i.note_intervento); + // } + // if (!string.IsNullOrEmpty(i.tipo_intervento) && !i.tipo_intervento.Trim().Equals(string.Empty)) + // { + // dic.Add("Tipo intervento", i.tipo_intervento.Trim()); + // } + + // if (!string.IsNullOrEmpty(i.codice_chiusura_1) && !i.codice_chiusura_1.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_1.Trim()); + // if(!string.IsNullOrEmpty(i.cc1)) + // { + // sb.Append(" - "+i.cc1.Trim()); + // } + // sb.Append(i.ccds1); + // if (!string.IsNullOrEmpty(i.ccds1)) + // { + // sb.Append(" - " + i.ccds1.Trim()); + // } + // dic.Add("Codice Chiusura 1", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_2) && !i.codice_chiusura_2.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_2.Trim()); + // if (!string.IsNullOrEmpty(i.cc2)) + // { + // sb.Append(" - " + i.cc2.Trim()); + // } + // sb.Append(i.ccds2); + // if (!string.IsNullOrEmpty(i.ccds2)) + // { + // sb.Append(" - " + i.ccds2.Trim()); + // } + // dic.Add("Codice Chiusura 2", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_3) && !i.codice_chiusura_3.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_3.Trim()); + // if (!string.IsNullOrEmpty(i.cc3)) + // { + // sb.Append(" - " + i.cc3.Trim()); + // } + // sb.Append(i.ccds3); + // if (!string.IsNullOrEmpty(i.ccds3)) + // { + // sb.Append(" - " + i.ccds3.Trim()); + // } + // dic.Add("Codice Chiusura 3", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_4) && !i.codice_chiusura_4.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_4.Trim()); + // if (!string.IsNullOrEmpty(i.cc4)) + // { + // sb.Append(" - " + i.cc4.Trim()); + // } + // sb.Append(i.ccds4); + // if (!string.IsNullOrEmpty(i.ccds4)) + // { + // sb.Append(" - " + i.ccds4.Trim()); + // } + // dic.Add("Codice Chiusura 4", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_5) && !i.codice_chiusura_5.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_5.Trim()); + // if (!string.IsNullOrEmpty(i.cc5)) + // { + // sb.Append(" - " + i.cc5.Trim()); + // } + // sb.Append(i.ccds5); + // if (!string.IsNullOrEmpty(i.ccds5)) + // { + // sb.Append(" - " + i.ccds5.Trim()); + // } + // dic.Add("Codice Chiusura 5", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_6) && !i.codice_chiusura_6.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_6.Trim()); + // if (!string.IsNullOrEmpty(i.cc6)) + // { + // sb.Append(" - " + i.cc6.Trim()); + // } + // sb.Append(i.ccds6); + // if (!string.IsNullOrEmpty(i.ccds6)) + // { + // sb.Append(" - " + i.ccds6.Trim()); + // } + // dic.Add("Codice Chiusura 6", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_7) && !i.codice_chiusura_7.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_7.Trim()); + // if (!string.IsNullOrEmpty(i.cc7)) + // { + // sb.Append(" - " + i.cc7.Trim()); + // } + // sb.Append(i.ccds7); + // if (!string.IsNullOrEmpty(i.ccds7)) + // { + // sb.Append(" - " + i.ccds7.Trim()); + // } + // dic.Add("Codice Chiusura 7", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_8) && !i.codice_chiusura_8.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_8.Trim()); + // if (!string.IsNullOrEmpty(i.cc8)) + // { + // sb.Append(" - " + i.cc8.Trim()); + // } + // sb.Append(i.ccds8); + // if (!string.IsNullOrEmpty(i.ccds8)) + // { + // sb.Append(" - " + i.ccds8.Trim()); + // } + // dic.Add("Codice Chiusura 8", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_9) && !i.codice_chiusura_9.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_9.Trim()); + // if (!string.IsNullOrEmpty(i.cc9)) + // { + // sb.Append(" - " + i.cc9.Trim()); + // } + // sb.Append(i.ccds9); + // if (!string.IsNullOrEmpty(i.ccds9)) + // { + // sb.Append(" - " + i.ccds9.Trim()); + // } + // dic.Add("Codice Chiusura 9", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_10) && !i.codice_chiusura_10.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_10.Trim()); + // if (!string.IsNullOrEmpty(i.cc10)) + // { + // sb.Append(" - " + i.cc10.Trim()); + // } + // sb.Append(i.ccds10); + // if (!string.IsNullOrEmpty(i.ccds10)) + // { + // sb.Append(" - " + i.ccds10.Trim()); + // } + // dic.Add("Codice Chiusura 10", sb.ToString()); + // } + + // if (!string.IsNullOrEmpty(i.firma) && !i.firma.Trim().Equals(string.Empty)) + // { + // dic.Add("Firma", i.firma.Trim()); + // } + + // if (!string.IsNullOrEmpty(i.ser_buono) && !i.ser_buono.Trim().Equals(string.Empty)) + // { + // dic.Add("N° buono", i.ser_buono.Trim()); + // } + // if (!string.IsNullOrEmpty(i.seriale_rapportino) && !i.seriale_rapportino.Trim().Equals(string.Empty)) + // { + // dic.Add("Seriale rapportino", i.seriale_rapportino.Trim()); + // } + // if (!string.IsNullOrEmpty(i.pagamento) && !i.pagamento.Trim().Equals(string.Empty)) + // { + // dic.Add("Pagamento", i.pagamento.Trim()); + // } + // if (!string.IsNullOrEmpty(i.note_pagamento) && !i.note_pagamento.Trim().Equals(string.Empty)) + // { + // dic.Add("Note pagamento", i.note_pagamento.Trim()); + // } + // if (!string.IsNullOrEmpty(i.codice_impianto) && !i.codice_impianto.Trim().Equals(string.Empty)) + // { + // dic.Add("Cod. impianto", i.codice_impianto.Trim()); + // } + // if (!string.IsNullOrEmpty(i.indirizzo) && !i.indirizzo.Trim().Equals(string.Empty)) + // { + // StringBuilder sb = new StringBuilder(); + // string ind = string.Empty; + // string via = !string.IsNullOrEmpty(i.indirizzo_tipo) ? i.indirizzo_tipo.Trim() : string.Empty; + // string indiri = !string.IsNullOrEmpty(i.indirizzo) ? i.indirizzo.Trim() : string.Empty; + // string num = string.Empty; + // if(i.indirizzo_num!=null && i.indirizzo_num.Value>0) + // { + // num = i.indirizzo_num.ToString().Trim(); + // } + // string num2 = !string.IsNullOrEmpty(i.indirizzo_num2) ? i.indirizzo_num2.Trim() : string.Empty; + // string sca = !string.IsNullOrEmpty(i.indirizzo_scala) ? i.indirizzo_scala.Trim() : string.Empty; + + // //ind = string.Concat("{0} {1} num {2} interno {3} scala {4}",via,indiri,num,num2,sca); + // if (!string.IsNullOrEmpty(via)) sb.Append(via); + // if (!string.IsNullOrEmpty(indiri)) sb.Append(" "+indiri); + // if (!string.IsNullOrEmpty(num)) sb.Append(" ,"+num); + // if (!string.IsNullOrEmpty(num2)) sb.Append(" Int: " + num2); + // if (!string.IsNullOrEmpty(sca)) sb.Append(" Scala: " + sca); + // dic.Add("Indirizzo imp", sb.ToString()); + + // } + // if (!string.IsNullOrEmpty(i.azienda_tecnico) && !i.azienda_tecnico.Trim().Equals(string.Empty)) + // { + // dic.Add("Azienda", i.azienda_tecnico); + // } + // if (!string.IsNullOrEmpty(i.generato) && !i.generato.Trim().Equals(string.Empty)) + // { + // string st = string.Empty; + // switch (i.generato) + // { + // case "S": + // st = "SI"; + // break; + // default: + // st = "NO"; + // break; + // } + // dic.Add("Rapportino importato", st); + // } + + // if (i.ore_lavoro != null && i.ore_lavoro.Value > 0) + // { + // dic.Add("Ore lavoro", i.ore_lavoro.Value.ToString()); + // } + // if (i.spese_viaggio!=null && i.spese_viaggio.Value > 0) + // { + // dic.Add("Spese viaggio", i.spese_viaggio.Value.ToString()); + // } + // if (i.materiale != null && i.materiale.Value > 0) + // { + // dic.Add("Materiale", i.materiale.Value.ToString()); + // } + // if (i.anticipo != null && i.anticipo.Value>0) + // { + // dic.Add("Anticipo", i.anticipo.Value.ToString()); + // } + // if (i.manodopera != null && i.manodopera.Value > 0) + // { + // dic.Add("Manodopera", i.manodopera.Value.ToString()); + // } + // if (i.diritto_chiamata != null && i.diritto_chiamata.Value > 0) + // { + // dic.Add("Diritto chiamata", i.diritto_chiamata.Value.ToString()); + // } + // if (i.totale != null && i.totale.Value > 0) + // { + // dic.Add("Totale", i.totale.Value.ToString()); + // } + // #endregion + // break; + // case Clienti.Sicilia: + // #region sicilia + // //chiamata + // if (!string.IsNullOrEmpty(i.codice_segnalazione) && !i.codice_segnalazione.Trim().Equals(string.Empty)) + // { + // dic.Add("Codice segnalazione", i.codice_segnalazione.Trim()); + // } + // if (!string.IsNullOrEmpty(i.seriale_chiamata) && !i.seriale_chiamata.Trim().Equals(string.Empty)) + // { + // dic.Add("N° Chiamata", i.seriale_chiamata.Trim()); + // } + // //manutenzione + // if (!string.IsNullOrEmpty(i.codice_intervento) && !i.codice_intervento.Trim().Equals(string.Empty)) + // { + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_intervento.Trim()); + // if (!string.IsNullOrEmpty(i.cidescri) && !i.cidescri.Trim().Equals(string.Empty)) + // { + // sb.Append(" - " + i.cidescri.Trim()); + // } + // if (!string.IsNullOrEmpty(i.cidessup) && !i.cidessup.Trim().Equals(string.Empty)) + // { + // sb.Append(" - " + i.cidessup.Trim()); + // } + // dic.Add("Manutenzione", sb.ToString()); + // } + // if (i.data_manutenzione != null) + // { + // dic.Add("Data manutenzione", i.data_manutenzione.Value.ToString()); + // } + + // //dati intervento + // if (!string.IsNullOrEmpty(i.stato_finale) && !i.stato_finale.Trim().Equals(string.Empty)) + // { + // string st = string.Empty; + // switch (i.stato_finale) + // { + // case "1": + // st = "In Funzione"; + // dic.Add("Stato finale", st); + // break; + // case "0": + // st = "Fermo"; + // dic.Add("Stato finale", st); + // break; + // } + // } + // if (!string.IsNullOrEmpty(i.esito_intervento) && !i.esito_intervento.Trim().Equals(string.Empty)) + // { + // string st = string.Empty; + // switch (i.esito_intervento) + // { + // case "1": + // st = "Positivo"; + // break; + // case "P": + // st = "Positivo"; + // break; + // default: + // st = "Negativo"; + // break; + // } + // dic.Add("Esito intervento", st); + // } + // if (!string.IsNullOrEmpty(i.descrizione_intervento) && !i.descrizione_intervento.Trim().Equals(string.Empty)) + // { + // dic.Add("Descrizione intervento", i.descrizione_intervento.Trim()); + // } + // if (!string.IsNullOrEmpty(i.difetti_riscontrati) && !i.difetti_riscontrati.Trim().Equals(string.Empty)) + // { + // dic.Add("Difetti riscontrati", i.difetti_riscontrati.Trim()); + // } + // if (!string.IsNullOrEmpty(i.lavoro_eseguito) && !i.lavoro_eseguito.Trim().Equals(string.Empty)) + // { + // dic.Add("Lavoro eseguito", i.lavoro_eseguito.Trim()); + // } + // if (!string.IsNullOrEmpty(i.note_intervento) && !i.note_intervento.Trim().Equals(string.Empty)) + // { + // dic.Add("Note intervento", i.note_intervento); + // } + // if (!string.IsNullOrEmpty(i.tipo_intervento) && !i.tipo_intervento.Trim().Equals(string.Empty)) + // { + // dic.Add("Tipo intervento", i.tipo_intervento.Trim()); + // } + + // if (!string.IsNullOrEmpty(i.codice_chiusura_1) && !i.codice_chiusura_1.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_1.Trim()); + // if (!string.IsNullOrEmpty(i.cc1)) + // { + // sb.Append(" - " + i.cc1.Trim()); + // } + // sb.Append(i.ccds1); + // if (!string.IsNullOrEmpty(i.ccds1)) + // { + // sb.Append(" - " + i.ccds1.Trim()); + // } + // dic.Add("Codice Chiusura 1", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_2) && !i.codice_chiusura_2.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_2.Trim()); + // if (!string.IsNullOrEmpty(i.cc2)) + // { + // sb.Append(" - " + i.cc2.Trim()); + // } + // sb.Append(i.ccds2); + // if (!string.IsNullOrEmpty(i.ccds2)) + // { + // sb.Append(" - " + i.ccds2.Trim()); + // } + // dic.Add("Codice Chiusura 2", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_3) && !i.codice_chiusura_3.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_3.Trim()); + // if (!string.IsNullOrEmpty(i.cc3)) + // { + // sb.Append(" - " + i.cc3.Trim()); + // } + // sb.Append(i.ccds3); + // if (!string.IsNullOrEmpty(i.ccds3)) + // { + // sb.Append(" - " + i.ccds3.Trim()); + // } + // dic.Add("Codice Chiusura 3", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_4) && !i.codice_chiusura_4.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_4.Trim()); + // if (!string.IsNullOrEmpty(i.cc4)) + // { + // sb.Append(" - " + i.cc4.Trim()); + // } + // sb.Append(i.ccds4); + // if (!string.IsNullOrEmpty(i.ccds4)) + // { + // sb.Append(" - " + i.ccds4.Trim()); + // } + // dic.Add("Codice Chiusura 4", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_5) && !i.codice_chiusura_5.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_5.Trim()); + // if (!string.IsNullOrEmpty(i.cc5)) + // { + // sb.Append(" - " + i.cc5.Trim()); + // } + // sb.Append(i.ccds5); + // if (!string.IsNullOrEmpty(i.ccds5)) + // { + // sb.Append(" - " + i.ccds5.Trim()); + // } + // dic.Add("Codice Chiusura 5", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_6) && !i.codice_chiusura_6.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_6.Trim()); + // if (!string.IsNullOrEmpty(i.cc6)) + // { + // sb.Append(" - " + i.cc6.Trim()); + // } + // sb.Append(i.ccds6); + // if (!string.IsNullOrEmpty(i.ccds6)) + // { + // sb.Append(" - " + i.ccds6.Trim()); + // } + // dic.Add("Codice Chiusura 6", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_7) && !i.codice_chiusura_7.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_7.Trim()); + // if (!string.IsNullOrEmpty(i.cc7)) + // { + // sb.Append(" - " + i.cc7.Trim()); + // } + // sb.Append(i.ccds7); + // if (!string.IsNullOrEmpty(i.ccds7)) + // { + // sb.Append(" - " + i.ccds7.Trim()); + // } + // dic.Add("Codice Chiusura 7", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_8) && !i.codice_chiusura_8.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_8.Trim()); + // if (!string.IsNullOrEmpty(i.cc8)) + // { + // sb.Append(" - " + i.cc8.Trim()); + // } + // sb.Append(i.ccds8); + // if (!string.IsNullOrEmpty(i.ccds8)) + // { + // sb.Append(" - " + i.ccds8.Trim()); + // } + // dic.Add("Codice Chiusura 8", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_9) && !i.codice_chiusura_9.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_9.Trim()); + // if (!string.IsNullOrEmpty(i.cc9)) + // { + // sb.Append(" - " + i.cc9.Trim()); + // } + // sb.Append(i.ccds9); + // if (!string.IsNullOrEmpty(i.ccds9)) + // { + // sb.Append(" - " + i.ccds9.Trim()); + // } + // dic.Add("Codice Chiusura 9", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_10) && !i.codice_chiusura_10.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_10.Trim()); + // if (!string.IsNullOrEmpty(i.cc10)) + // { + // sb.Append(" - " + i.cc10.Trim()); + // } + // sb.Append(i.ccds10); + // if (!string.IsNullOrEmpty(i.ccds10)) + // { + // sb.Append(" - " + i.ccds10.Trim()); + // } + // dic.Add("Codice Chiusura 10", sb.ToString()); + // } + + // if (!string.IsNullOrEmpty(i.firma) && !i.firma.Trim().Equals(string.Empty)) + // { + // dic.Add("Firma", i.firma.Trim()); + // } + + // if (!string.IsNullOrEmpty(i.ser_buono) && !i.ser_buono.Trim().Equals(string.Empty)) + // { + // dic.Add("N° buono", i.ser_buono.Trim()); + // } + // if (!string.IsNullOrEmpty(i.seriale_rapportino) && !i.seriale_rapportino.Trim().Equals(string.Empty)) + // { + // dic.Add("Seriale rapportino", i.seriale_rapportino.Trim()); + // } + // if (!string.IsNullOrEmpty(i.pagamento) && !i.pagamento.Trim().Equals(string.Empty)) + // { + // dic.Add("Pagamento", i.pagamento.Trim()); + // } + // if (!string.IsNullOrEmpty(i.note_pagamento) && !i.note_pagamento.Trim().Equals(string.Empty)) + // { + // dic.Add("Note pagamento", i.note_pagamento.Trim()); + // } + // if (!string.IsNullOrEmpty(i.codice_impianto) && !i.codice_impianto.Trim().Equals(string.Empty)) + // { + // dic.Add("Cod. impianto", i.codice_impianto.Trim()); + // } + // if (!string.IsNullOrEmpty(i.indirizzo) && !i.indirizzo.Trim().Equals(string.Empty)) + // { + // StringBuilder sb = new StringBuilder(); + // string ind = string.Empty; + // string via = !string.IsNullOrEmpty(i.indirizzo_tipo) ? i.indirizzo_tipo.Trim() : string.Empty; + // string indiri = !string.IsNullOrEmpty(i.indirizzo) ? i.indirizzo.Trim() : string.Empty; + // string num = string.Empty; + // if (i.indirizzo_num != null && i.indirizzo_num.Value > 0) + // { + // num = i.indirizzo_num.ToString().Trim(); + // } + // string num2 = !string.IsNullOrEmpty(i.indirizzo_num2) ? i.indirizzo_num2.Trim() : string.Empty; + // string sca = !string.IsNullOrEmpty(i.indirizzo_scala) ? i.indirizzo_scala.Trim() : string.Empty; + + // //ind = string.Concat("{0} {1} num {2} interno {3} scala {4}",via,indiri,num,num2,sca); + // if (!string.IsNullOrEmpty(via)) sb.Append(via); + // if (!string.IsNullOrEmpty(indiri)) sb.Append(" " + indiri); + // if (!string.IsNullOrEmpty(num)) sb.Append(" ," + num); + // if (!string.IsNullOrEmpty(num2)) sb.Append(" Int: " + num2); + // if (!string.IsNullOrEmpty(sca)) sb.Append(" Scala: " + sca); + // dic.Add("Indirizzo imp", sb.ToString()); + + // } + // if (!string.IsNullOrEmpty(i.azienda_tecnico) && !i.azienda_tecnico.Trim().Equals(string.Empty)) + // { + // dic.Add("Azienda", i.azienda_tecnico); + // } + // if (!string.IsNullOrEmpty(i.generato) && !i.generato.Trim().Equals(string.Empty)) + // { + // string st = string.Empty; + // switch (i.generato) + // { + // case "S": + // st = "SI"; + // break; + // default: + // st = "NO"; + // break; + // } + // dic.Add("Rapportino importato", st); + // } + + // if (i.ore_lavoro != null && i.ore_lavoro.Value > 0) + // { + // dic.Add("Ore lavoro", i.ore_lavoro.Value.ToString()); + // } + // if (i.spese_viaggio != null && i.spese_viaggio.Value > 0) + // { + // dic.Add("Spese viaggio", i.spese_viaggio.Value.ToString()); + // } + // if (i.materiale != null && i.materiale.Value > 0) + // { + // dic.Add("Materiale", i.materiale.Value.ToString()); + // } + // if (i.anticipo != null && i.anticipo.Value > 0) + // { + // dic.Add("Anticipo", i.anticipo.Value.ToString()); + // } + // if (i.manodopera != null && i.manodopera.Value > 0) + // { + // dic.Add("Manodopera", i.manodopera.Value.ToString()); + // } + // if (i.diritto_chiamata != null && i.diritto_chiamata.Value > 0) + // { + // dic.Add("Diritto chiamata", i.diritto_chiamata.Value.ToString()); + // } + // if (i.totale != null && i.totale.Value > 0) + // { + // dic.Add("Totale", i.totale.Value.ToString()); + // } + // #endregion + + // break; + // case Clienti.Discovery: + // #region discovery + // //chiamata + // if (!string.IsNullOrEmpty(i.codice_segnalazione) && !i.codice_segnalazione.Trim().Equals(string.Empty)) + // { + // dic.Add("Codice segnalazione", i.codice_segnalazione.Trim()); + // } + // if (!string.IsNullOrEmpty(i.seriale_chiamata) && !i.seriale_chiamata.Trim().Equals(string.Empty)) + // { + // dic.Add("N° Chiamata", i.seriale_chiamata.Trim()); + // } + // //manutenzione + // if (!string.IsNullOrEmpty(i.codice_intervento) && !i.codice_intervento.Trim().Equals(string.Empty)) + // { + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_intervento.Trim()); + // if (!string.IsNullOrEmpty(i.cidescri) && !i.cidescri.Trim().Equals(string.Empty)) + // { + // sb.Append(" - " + i.cidescri.Trim()); + // } + // if (!string.IsNullOrEmpty(i.cidessup) && !i.cidessup.Trim().Equals(string.Empty)) + // { + // sb.Append(" - " + i.cidessup.Trim()); + // } + // dic.Add("Manutenzione", sb.ToString()); + // } + // if (i.data_manutenzione != null) + // { + // dic.Add("Data manutenzione", i.data_manutenzione.Value.ToString()); + // } + + // //dati intervento + // if (!string.IsNullOrEmpty(i.stato_finale) && !i.stato_finale.Trim().Equals(string.Empty)) + // { + // string st = string.Empty; + // switch (i.stato_finale) + // { + // case "1": + // st = "In Funzione"; + // dic.Add("Stato finale", st); + // break; + // case "0": + // st = "Fermo"; + // dic.Add("Stato finale", st); + // break; + // } + // } + // if (!string.IsNullOrEmpty(i.esito_intervento) && !i.esito_intervento.Trim().Equals(string.Empty)) + // { + // string st = string.Empty; + // switch (i.esito_intervento) + // { + // case "1": + // st = "Positivo"; + // break; + // case "P": + // st = "Positivo"; + // break; + // default: + // st = "Negativo"; + // break; + // } + // dic.Add("Esito intervento", st); + // } + // if (!string.IsNullOrEmpty(i.descrizione_intervento) && !i.descrizione_intervento.Trim().Equals(string.Empty)) + // { + // dic.Add("Descrizione intervento", i.descrizione_intervento.Trim()); + // } + // if (!string.IsNullOrEmpty(i.difetti_riscontrati) && !i.difetti_riscontrati.Trim().Equals(string.Empty)) + // { + // dic.Add("Difetti riscontrati", i.difetti_riscontrati.Trim()); + // } + // if (!string.IsNullOrEmpty(i.lavoro_eseguito) && !i.lavoro_eseguito.Trim().Equals(string.Empty)) + // { + // dic.Add("Lavoro eseguito", i.lavoro_eseguito.Trim()); + // } + // if (!string.IsNullOrEmpty(i.note_intervento) && !i.note_intervento.Trim().Equals(string.Empty)) + // { + // dic.Add("Note intervento", i.note_intervento); + // } + // if (!string.IsNullOrEmpty(i.tipo_intervento) && !i.tipo_intervento.Trim().Equals(string.Empty)) + // { + // dic.Add("Tipo intervento", i.tipo_intervento.Trim()); + // } + + // if (!string.IsNullOrEmpty(i.codice_chiusura_1) && !i.codice_chiusura_1.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_1.Trim()); + // if (!string.IsNullOrEmpty(i.cc1)) + // { + // sb.Append(" - " + i.cc1.Trim()); + // } + // sb.Append(i.ccds1); + // if (!string.IsNullOrEmpty(i.ccds1)) + // { + // sb.Append(" - " + i.ccds1.Trim()); + // } + // dic.Add("Codice Chiusura 1", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_2) && !i.codice_chiusura_2.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_2.Trim()); + // if (!string.IsNullOrEmpty(i.cc2)) + // { + // sb.Append(" - " + i.cc2.Trim()); + // } + // sb.Append(i.ccds2); + // if (!string.IsNullOrEmpty(i.ccds2)) + // { + // sb.Append(" - " + i.ccds2.Trim()); + // } + // dic.Add("Codice Chiusura 2", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_3) && !i.codice_chiusura_3.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_3.Trim()); + // if (!string.IsNullOrEmpty(i.cc3)) + // { + // sb.Append(" - " + i.cc3.Trim()); + // } + // sb.Append(i.ccds3); + // if (!string.IsNullOrEmpty(i.ccds3)) + // { + // sb.Append(" - " + i.ccds3.Trim()); + // } + // dic.Add("Codice Chiusura 3", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_4) && !i.codice_chiusura_4.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_4.Trim()); + // if (!string.IsNullOrEmpty(i.cc4)) + // { + // sb.Append(" - " + i.cc4.Trim()); + // } + // sb.Append(i.ccds4); + // if (!string.IsNullOrEmpty(i.ccds4)) + // { + // sb.Append(" - " + i.ccds4.Trim()); + // } + // dic.Add("Codice Chiusura 4", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_5) && !i.codice_chiusura_5.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_5.Trim()); + // if (!string.IsNullOrEmpty(i.cc5)) + // { + // sb.Append(" - " + i.cc5.Trim()); + // } + // sb.Append(i.ccds5); + // if (!string.IsNullOrEmpty(i.ccds5)) + // { + // sb.Append(" - " + i.ccds5.Trim()); + // } + // dic.Add("Codice Chiusura 5", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_6) && !i.codice_chiusura_6.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_6.Trim()); + // if (!string.IsNullOrEmpty(i.cc6)) + // { + // sb.Append(" - " + i.cc6.Trim()); + // } + // sb.Append(i.ccds6); + // if (!string.IsNullOrEmpty(i.ccds6)) + // { + // sb.Append(" - " + i.ccds6.Trim()); + // } + // dic.Add("Codice Chiusura 6", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_7) && !i.codice_chiusura_7.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_7.Trim()); + // if (!string.IsNullOrEmpty(i.cc7)) + // { + // sb.Append(" - " + i.cc7.Trim()); + // } + // sb.Append(i.ccds7); + // if (!string.IsNullOrEmpty(i.ccds7)) + // { + // sb.Append(" - " + i.ccds7.Trim()); + // } + // dic.Add("Codice Chiusura 7", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_8) && !i.codice_chiusura_8.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_8.Trim()); + // if (!string.IsNullOrEmpty(i.cc8)) + // { + // sb.Append(" - " + i.cc8.Trim()); + // } + // sb.Append(i.ccds8); + // if (!string.IsNullOrEmpty(i.ccds8)) + // { + // sb.Append(" - " + i.ccds8.Trim()); + // } + // dic.Add("Codice Chiusura 8", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_9) && !i.codice_chiusura_9.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_9.Trim()); + // if (!string.IsNullOrEmpty(i.cc9)) + // { + // sb.Append(" - " + i.cc9.Trim()); + // } + // sb.Append(i.ccds9); + // if (!string.IsNullOrEmpty(i.ccds9)) + // { + // sb.Append(" - " + i.ccds9.Trim()); + // } + // dic.Add("Codice Chiusura 9", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_10) && !i.codice_chiusura_10.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_10.Trim()); + // if (!string.IsNullOrEmpty(i.cc10)) + // { + // sb.Append(" - " + i.cc10.Trim()); + // } + // sb.Append(i.ccds10); + // if (!string.IsNullOrEmpty(i.ccds10)) + // { + // sb.Append(" - " + i.ccds10.Trim()); + // } + // dic.Add("Codice Chiusura 10", sb.ToString()); + // } + + // if (!string.IsNullOrEmpty(i.firma) && !i.firma.Trim().Equals(string.Empty)) + // { + // dic.Add("Firma", i.firma.Trim()); + // } + + // if (!string.IsNullOrEmpty(i.ser_buono) && !i.ser_buono.Trim().Equals(string.Empty)) + // { + // dic.Add("N° buono", i.ser_buono.Trim()); + // } + // if (!string.IsNullOrEmpty(i.seriale_rapportino) && !i.seriale_rapportino.Trim().Equals(string.Empty)) + // { + // dic.Add("Seriale rapportino", i.seriale_rapportino.Trim()); + // } + // if (!string.IsNullOrEmpty(i.pagamento) && !i.pagamento.Trim().Equals(string.Empty)) + // { + // dic.Add("Pagamento", i.pagamento.Trim()); + // } + // if (!string.IsNullOrEmpty(i.note_pagamento) && !i.note_pagamento.Trim().Equals(string.Empty)) + // { + // dic.Add("Note pagamento", i.note_pagamento.Trim()); + // } + // if (!string.IsNullOrEmpty(i.codice_impianto) && !i.codice_impianto.Trim().Equals(string.Empty)) + // { + // dic.Add("Cod. impianto", i.codice_impianto.Trim()); + // } + // if (!string.IsNullOrEmpty(i.indirizzo) && !i.indirizzo.Trim().Equals(string.Empty)) + // { + // StringBuilder sb = new StringBuilder(); + // string ind = string.Empty; + // string via = !string.IsNullOrEmpty(i.indirizzo_tipo) ? i.indirizzo_tipo.Trim() : string.Empty; + // string indiri = !string.IsNullOrEmpty(i.indirizzo) ? i.indirizzo.Trim() : string.Empty; + // string num = string.Empty; + // if (i.indirizzo_num != null && i.indirizzo_num.Value > 0) + // { + // num = i.indirizzo_num.ToString().Trim(); + // } + // string num2 = !string.IsNullOrEmpty(i.indirizzo_num2) ? i.indirizzo_num2.Trim() : string.Empty; + // string sca = !string.IsNullOrEmpty(i.indirizzo_scala) ? i.indirizzo_scala.Trim() : string.Empty; + + // //ind = string.Concat("{0} {1} num {2} interno {3} scala {4}",via,indiri,num,num2,sca); + // if (!string.IsNullOrEmpty(via)) sb.Append(via); + // if (!string.IsNullOrEmpty(indiri)) sb.Append(" " + indiri); + // if (!string.IsNullOrEmpty(num)) sb.Append(" ," + num); + // if (!string.IsNullOrEmpty(num2)) sb.Append(" Int: " + num2); + // if (!string.IsNullOrEmpty(sca)) sb.Append(" Scala: " + sca); + // dic.Add("Indirizzo imp", sb.ToString()); + + // } + // if (!string.IsNullOrEmpty(i.azienda_tecnico) && !i.azienda_tecnico.Trim().Equals(string.Empty)) + // { + // dic.Add("Azienda", i.azienda_tecnico); + // } + // if (!string.IsNullOrEmpty(i.generato) && !i.generato.Trim().Equals(string.Empty)) + // { + // string st = string.Empty; + // switch (i.generato) + // { + // case "S": + // st = "SI"; + // break; + // default: + // st = "NO"; + // break; + // } + // dic.Add("Rapportino importato", st); + // } + + // if (i.ore_lavoro != null && i.ore_lavoro.Value > 0) + // { + // dic.Add("Ore lavoro", i.ore_lavoro.Value.ToString()); + // } + // if (i.spese_viaggio != null && i.spese_viaggio.Value > 0) + // { + // dic.Add("Spese viaggio", i.spese_viaggio.Value.ToString()); + // } + // if (i.materiale != null && i.materiale.Value > 0) + // { + // dic.Add("Materiale", i.materiale.Value.ToString()); + // } + // if (i.anticipo != null && i.anticipo.Value > 0) + // { + // dic.Add("Anticipo", i.anticipo.Value.ToString()); + // } + // if (i.manodopera != null && i.manodopera.Value > 0) + // { + // dic.Add("Manodopera", i.manodopera.Value.ToString()); + // } + // if (i.diritto_chiamata != null && i.diritto_chiamata.Value > 0) + // { + // dic.Add("Diritto chiamata", i.diritto_chiamata.Value.ToString()); + // } + // if (i.totale != null && i.totale.Value > 0) + // { + // dic.Add("Totale", i.totale.Value.ToString()); + // } + // #endregion + // break; + // case Clienti.Sarom: + // #region sarom + // //chiamata + // if (!string.IsNullOrEmpty(i.codice_segnalazione) && !i.codice_segnalazione.Trim().Equals(string.Empty)) + // { + // dic.Add("Codice segnalazione", i.codice_segnalazione.Trim()); + // } + // if (!string.IsNullOrEmpty(i.seriale_chiamata) && !i.seriale_chiamata.Trim().Equals(string.Empty)) + // { + // dic.Add("N° Chiamata", i.seriale_chiamata.Trim()); + // } + // //manutenzione + // if (!string.IsNullOrEmpty(i.codice_intervento) && !i.codice_intervento.Trim().Equals(string.Empty)) + // { + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_intervento.Trim()); + // if (!string.IsNullOrEmpty(i.cidescri) && !i.cidescri.Trim().Equals(string.Empty)) + // { + // sb.Append(" - " + i.cidescri.Trim()); + // } + // if (!string.IsNullOrEmpty(i.cidessup) && !i.cidessup.Trim().Equals(string.Empty)) + // { + // sb.Append(" - " + i.cidessup.Trim()); + // } + // dic.Add("Manutenzione", sb.ToString()); + // } + // if (i.data_manutenzione != null) + // { + // dic.Add("Data manutenzione", i.data_manutenzione.Value.ToString()); + // } + + // //dati intervento + // if (!string.IsNullOrEmpty(i.stato_finale) && !i.stato_finale.Trim().Equals(string.Empty)) + // { + // string st = string.Empty; + // switch (i.stato_finale) + // { + // case "1": + // st = "In Funzione"; + // dic.Add("Stato finale", st); + // break; + // case "0": + // st = "Fermo"; + // dic.Add("Stato finale", st); + // break; + // } + // } + // if (!string.IsNullOrEmpty(i.esito_intervento) && !i.esito_intervento.Trim().Equals(string.Empty)) + // { + // string st = string.Empty; + // switch (i.esito_intervento) + // { + // case "1": + // st = "Positivo"; + // break; + // case "P": + // st = "Positivo"; + // break; + // default: + // st = "Negativo"; + // break; + // } + // dic.Add("Esito intervento", st); + // } + // if (!string.IsNullOrEmpty(i.descrizione_intervento) && !i.descrizione_intervento.Trim().Equals(string.Empty)) + // { + // dic.Add("Descrizione intervento", i.descrizione_intervento.Trim()); + // } + // if (!string.IsNullOrEmpty(i.difetti_riscontrati) && !i.difetti_riscontrati.Trim().Equals(string.Empty)) + // { + // dic.Add("Difetti riscontrati", i.difetti_riscontrati.Trim()); + // } + // if (!string.IsNullOrEmpty(i.lavoro_eseguito) && !i.lavoro_eseguito.Trim().Equals(string.Empty)) + // { + // dic.Add("Lavoro eseguito", i.lavoro_eseguito.Trim()); + // } + // if (!string.IsNullOrEmpty(i.note_intervento) && !i.note_intervento.Trim().Equals(string.Empty)) + // { + // dic.Add("Note intervento", i.note_intervento); + // } + // if (!string.IsNullOrEmpty(i.tipo_intervento) && !i.tipo_intervento.Trim().Equals(string.Empty)) + // { + // dic.Add("Tipo intervento", i.tipo_intervento.Trim()); + // } + + // if (!string.IsNullOrEmpty(i.codice_chiusura_1) && !i.codice_chiusura_1.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_1.Trim()); + // if (!string.IsNullOrEmpty(i.cc1)) + // { + // sb.Append(" - " + i.cc1.Trim()); + // } + // sb.Append(i.ccds1); + // if (!string.IsNullOrEmpty(i.ccds1)) + // { + // sb.Append(" - " + i.ccds1.Trim()); + // } + // dic.Add("Codice Chiusura 1", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_2) && !i.codice_chiusura_2.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_2.Trim()); + // if (!string.IsNullOrEmpty(i.cc2)) + // { + // sb.Append(" - " + i.cc2.Trim()); + // } + // sb.Append(i.ccds2); + // if (!string.IsNullOrEmpty(i.ccds2)) + // { + // sb.Append(" - " + i.ccds2.Trim()); + // } + // dic.Add("Codice Chiusura 2", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_3) && !i.codice_chiusura_3.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_3.Trim()); + // if (!string.IsNullOrEmpty(i.cc3)) + // { + // sb.Append(" - " + i.cc3.Trim()); + // } + // sb.Append(i.ccds3); + // if (!string.IsNullOrEmpty(i.ccds3)) + // { + // sb.Append(" - " + i.ccds3.Trim()); + // } + // dic.Add("Codice Chiusura 3", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_4) && !i.codice_chiusura_4.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_4.Trim()); + // if (!string.IsNullOrEmpty(i.cc4)) + // { + // sb.Append(" - " + i.cc4.Trim()); + // } + // sb.Append(i.ccds4); + // if (!string.IsNullOrEmpty(i.ccds4)) + // { + // sb.Append(" - " + i.ccds4.Trim()); + // } + // dic.Add("Codice Chiusura 4", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_5) && !i.codice_chiusura_5.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_5.Trim()); + // if (!string.IsNullOrEmpty(i.cc5)) + // { + // sb.Append(" - " + i.cc5.Trim()); + // } + // sb.Append(i.ccds5); + // if (!string.IsNullOrEmpty(i.ccds5)) + // { + // sb.Append(" - " + i.ccds5.Trim()); + // } + // dic.Add("Codice Chiusura 5", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_6) && !i.codice_chiusura_6.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_6.Trim()); + // if (!string.IsNullOrEmpty(i.cc6)) + // { + // sb.Append(" - " + i.cc6.Trim()); + // } + // sb.Append(i.ccds6); + // if (!string.IsNullOrEmpty(i.ccds6)) + // { + // sb.Append(" - " + i.ccds6.Trim()); + // } + // dic.Add("Codice Chiusura 6", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_7) && !i.codice_chiusura_7.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_7.Trim()); + // if (!string.IsNullOrEmpty(i.cc7)) + // { + // sb.Append(" - " + i.cc7.Trim()); + // } + // sb.Append(i.ccds7); + // if (!string.IsNullOrEmpty(i.ccds7)) + // { + // sb.Append(" - " + i.ccds7.Trim()); + // } + // dic.Add("Codice Chiusura 7", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_8) && !i.codice_chiusura_8.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_8.Trim()); + // if (!string.IsNullOrEmpty(i.cc8)) + // { + // sb.Append(" - " + i.cc8.Trim()); + // } + // sb.Append(i.ccds8); + // if (!string.IsNullOrEmpty(i.ccds8)) + // { + // sb.Append(" - " + i.ccds8.Trim()); + // } + // dic.Add("Codice Chiusura 8", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_9) && !i.codice_chiusura_9.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_9.Trim()); + // if (!string.IsNullOrEmpty(i.cc9)) + // { + // sb.Append(" - " + i.cc9.Trim()); + // } + // sb.Append(i.ccds9); + // if (!string.IsNullOrEmpty(i.ccds9)) + // { + // sb.Append(" - " + i.ccds9.Trim()); + // } + // dic.Add("Codice Chiusura 9", sb.ToString()); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_10) && !i.codice_chiusura_10.Trim().Equals(string.Empty)) + // { + // string c = string.Empty; + // StringBuilder sb = new StringBuilder(); + // sb.Append(i.codice_chiusura_10.Trim()); + // if (!string.IsNullOrEmpty(i.cc10)) + // { + // sb.Append(" - " + i.cc10.Trim()); + // } + // sb.Append(i.ccds10); + // if (!string.IsNullOrEmpty(i.ccds10)) + // { + // sb.Append(" - " + i.ccds10.Trim()); + // } + // dic.Add("Codice Chiusura 10", sb.ToString()); + // } + + // if (!string.IsNullOrEmpty(i.firma) && !i.firma.Trim().Equals(string.Empty)) + // { + // dic.Add("Firma", i.firma.Trim()); + // } + + // if (!string.IsNullOrEmpty(i.ser_buono) && !i.ser_buono.Trim().Equals(string.Empty)) + // { + // dic.Add("N° buono", i.ser_buono.Trim()); + // } + // if (!string.IsNullOrEmpty(i.seriale_rapportino) && !i.seriale_rapportino.Trim().Equals(string.Empty)) + // { + // dic.Add("Seriale rapportino", i.seriale_rapportino.Trim()); + // } + // if (!string.IsNullOrEmpty(i.pagamento) && !i.pagamento.Trim().Equals(string.Empty)) + // { + // dic.Add("Pagamento", i.pagamento.Trim()); + // } + // if (!string.IsNullOrEmpty(i.note_pagamento) && !i.note_pagamento.Trim().Equals(string.Empty)) + // { + // dic.Add("Note pagamento", i.note_pagamento.Trim()); + // } + // if (!string.IsNullOrEmpty(i.codice_impianto) && !i.codice_impianto.Trim().Equals(string.Empty)) + // { + // dic.Add("Cod. impianto", i.codice_impianto.Trim()); + // } + // if (!string.IsNullOrEmpty(i.indirizzo) && !i.indirizzo.Trim().Equals(string.Empty)) + // { + // StringBuilder sb = new StringBuilder(); + // string ind = string.Empty; + // string via = !string.IsNullOrEmpty(i.indirizzo_tipo) ? i.indirizzo_tipo.Trim() : string.Empty; + // string indiri = !string.IsNullOrEmpty(i.indirizzo) ? i.indirizzo.Trim() : string.Empty; + // string num = string.Empty; + // if (i.indirizzo_num != null && i.indirizzo_num.Value > 0) + // { + // num = i.indirizzo_num.ToString().Trim(); + // } + // string num2 = !string.IsNullOrEmpty(i.indirizzo_num2) ? i.indirizzo_num2.Trim() : string.Empty; + // string sca = !string.IsNullOrEmpty(i.indirizzo_scala) ? i.indirizzo_scala.Trim() : string.Empty; + + // //ind = string.Concat("{0} {1} num {2} interno {3} scala {4}",via,indiri,num,num2,sca); + // if (!string.IsNullOrEmpty(via)) sb.Append(via); + // if (!string.IsNullOrEmpty(indiri)) sb.Append(" " + indiri); + // if (!string.IsNullOrEmpty(num)) sb.Append(" ," + num); + // if (!string.IsNullOrEmpty(num2)) sb.Append(" Int: " + num2); + // if (!string.IsNullOrEmpty(sca)) sb.Append(" Scala: " + sca); + // dic.Add("Indirizzo imp", sb.ToString()); + + // } + // if (!string.IsNullOrEmpty(i.azienda_tecnico) && !i.azienda_tecnico.Trim().Equals(string.Empty)) + // { + // dic.Add("Azienda", i.azienda_tecnico); + // } + // if (!string.IsNullOrEmpty(i.generato) && !i.generato.Trim().Equals(string.Empty)) + // { + // string st = string.Empty; + // switch (i.generato) + // { + // case "S": + // st = "SI"; + // break; + // default: + // st = "NO"; + // break; + // } + // dic.Add("Rapportino importato", st); + // } + + // if (i.ore_lavoro != null && i.ore_lavoro.Value > 0) + // { + // dic.Add("Ore lavoro", i.ore_lavoro.Value.ToString()); + // } + // if (i.spese_viaggio != null && i.spese_viaggio.Value > 0) + // { + // dic.Add("Spese viaggio", i.spese_viaggio.Value.ToString()); + // } + // if (i.materiale != null && i.materiale.Value > 0) + // { + // dic.Add("Materiale", i.materiale.Value.ToString()); + // } + // if (i.anticipo != null && i.anticipo.Value > 0) + // { + // dic.Add("Anticipo", i.anticipo.Value.ToString()); + // } + // if (i.manodopera != null && i.manodopera.Value > 0) + // { + // dic.Add("Manodopera", i.manodopera.Value.ToString()); + // } + // if (i.diritto_chiamata != null && i.diritto_chiamata.Value > 0) + // { + // dic.Add("Diritto chiamata", i.diritto_chiamata.Value.ToString()); + // } + // if (i.totale != null && i.totale.Value > 0) + // { + // dic.Add("Totale", i.totale.Value.ToString()); + // } + // #endregion + // break; + // default: + // string appo = string.Empty; + // if (!string.IsNullOrEmpty(i.codice_chiusura_1) && !i.codice_chiusura_1.Trim().Equals(string.Empty)) + // { + // appo = string.Empty; + // appo = !string.IsNullOrEmpty(i.cc1) ? " - " + i.cc1 : string.Empty; + // dic.Add("Cod. Chiusura 1", i.codice_chiusura_1.Trim()+appo); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_2) && !i.codice_chiusura_2.Trim().Equals(string.Empty)) + // { + // appo = string.Empty; + // appo = !string.IsNullOrEmpty(i.cc2) ? " - " + i.cc2 : string.Empty; + // dic.Add("Cod. Chiusura 2", i.codice_chiusura_2.Trim() + appo); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_3) && !i.codice_chiusura_3.Trim().Equals(string.Empty)) + // { + // appo = string.Empty; + // appo = !string.IsNullOrEmpty(i.cc3) ? " - " + i.cc3 : string.Empty; + // dic.Add("Cod. Chiusura 3", i.codice_chiusura_3.Trim() + appo); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_4) && !i.codice_chiusura_4.Trim().Equals(string.Empty)) + // { + // appo = string.Empty; + // appo = !string.IsNullOrEmpty(i.cc4) ? " - " + i.cc4 : string.Empty; + // dic.Add("Cod. Chiusura 4", i.codice_chiusura_4.Trim() + appo); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_5) && !i.codice_chiusura_5.Trim().Equals(string.Empty)) + // { + // appo = string.Empty; + // appo = !string.IsNullOrEmpty(i.cc5) ? " - " + i.cc5 : string.Empty; + // dic.Add("Cod. Chiusura 5", i.codice_chiusura_5.Trim() + appo); + // } + + + // if (!string.IsNullOrEmpty(i.codice_chiusura_6) && !i.codice_chiusura_6.Trim().Equals(string.Empty)) + // { + // appo = string.Empty; + // appo = !string.IsNullOrEmpty(i.cc6) ? " - " + i.cc6 : string.Empty; + // dic.Add("Cod. Chiusura 6", i.codice_chiusura_6.Trim() + appo); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_7) && !i.codice_chiusura_7.Trim().Equals(string.Empty)) + // { + // appo = string.Empty; + // appo = !string.IsNullOrEmpty(i.cc7) ? " - " + i.cc7 : string.Empty; + // dic.Add("Cod. Chiusura 7", i.codice_chiusura_7.Trim() + appo); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_8) && !i.codice_chiusura_8.Trim().Equals(string.Empty)) + // { + // appo = string.Empty; + // appo = !string.IsNullOrEmpty(i.cc8) ? " - " + i.cc8 : string.Empty; + // dic.Add("Cod. Chiusura 8", i.codice_chiusura_8.Trim() + appo); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_9) && !i.codice_chiusura_9.Trim().Equals(string.Empty)) + // { + // appo = string.Empty; + // appo = !string.IsNullOrEmpty(i.cc9) ? " - " + i.cc9 : string.Empty; + // dic.Add("Cod. Chiusura 9", i.codice_chiusura_9.Trim() + appo); + // } + // if (!string.IsNullOrEmpty(i.codice_chiusura_10) && !i.codice_chiusura_10.Trim().Equals(string.Empty)) + // { + // appo = string.Empty; + // appo = !string.IsNullOrEmpty(i.cc10) ? " - " + i.cc10 : string.Empty; + // dic.Add("Cod. Chiusura 10", i.codice_chiusura_10.Trim() + appo); + // } + // if (!string.IsNullOrEmpty(i.descrizione_intervento) && !i.descrizione_intervento.Trim().Equals(string.Empty)) + // { + // dic.Add("Descrizione intervento", i.descrizione_intervento.Trim()); + // } + // if (!string.IsNullOrEmpty(i.note_intervento) && !i.note_intervento.Trim().Equals(string.Empty)) + // { + // dic.Add("Note intervento", i.note_intervento.Trim()); + // } + // if (!string.IsNullOrEmpty(i.esito_intervento) && !i.esito_intervento.Trim().Equals(string.Empty)) + // { + // dic.Add("Esito intervento", i.esito_intervento.Trim()); + // } + + // break; + //} + o.dettaglio = dic; + return o; + } + private Impianto_out fillImpianto_out(Impianto i) + { + Impianto_out u = new Impianto_out(); + u.codimp = i.imcodimp; + u.descimp = i.imdescri; + StringBuilder sb = new StringBuilder(); + + string via = !string.IsNullOrEmpty(i.imindiri1) ? i.imindiri1.Trim() : string.Empty; + string indiri = !string.IsNullOrEmpty(i.imindiri2) ? i.imindiri2.Trim() : string.Empty; + string num = string.Empty; + if (i.imindiri3 != null && i.imindiri3.Value > 0) + { + num = i.imindiri3.ToString().Trim(); + } + string num2 = !string.IsNullOrEmpty(i.imindiri4) ? i.imindiri4.Trim() : string.Empty; + string sca = !string.IsNullOrEmpty(i.imindiri5) ? i.imindiri5.Trim() : string.Empty; + + + if (!string.IsNullOrEmpty(via)) sb.Append(via); + if (!string.IsNullOrEmpty(indiri)) sb.Append(" " + indiri); + if (!string.IsNullOrEmpty(num)) sb.Append(" ," + num); + if (!string.IsNullOrEmpty(num2)) sb.Append(" Int: " + num2); + if (!string.IsNullOrEmpty(sca)) sb.Append(" Scala: " + sca); + u.indiri = sb.ToString(); + u.localita = i.imlocali; + u.cap = i.imcodcap; + u.comune = i.imcomune; + u.provin = i.improvin; + + return u; + } + + /// Ricerca Impianti return:ActionResult + [HttpGet("ricerca_impianti")] + public async Task>> ricerca_impianti(string token, string? codimp, string? indirizzo_imp) + { + try + { + if (string.IsNullOrEmpty(codimp) && string.IsNullOrEmpty(indirizzo_imp)) + { + Impianto_out e = new Impianto_out(); + e.err_title = "Errore in ricerca impianti."; + e.err_detail = "Immettere almeno un parametro di ricerca."; + e.err_status_code = StatiRisposta.OperazioneNonAmmessa; + return StatusCode(StatusCodes.Status400BadRequest, e); + } + else + { + string ten = getClaimValueByToken(token, "tenant"); + string ten2 = getClaimValueByToken(token, "tenant2"); + + ten = ten2; + _impianto = _VT_impia.Impia; + + //if (ten.Equals(Clienti.VT)) + //{ + // ten = ten2; + // _impianto = _VT_impia.Impia; + //} + //else + //{ + // _impianto = getImpiantiByTenant(ten); + //} + + var l = await _impianto.Where(t => t.imcodazi != null && t.imcodazi.Equals(ten)).ToListAsync(); + if (!string.IsNullOrEmpty(codimp)) + { + l = l.Where(t => t.imcodimp != null && t.imcodimp.Contains(codimp)).ToList(); + } + if (!string.IsNullOrEmpty(indirizzo_imp)) + { + l = l.Where(t => t.imindiri2 != null && t.imindiri2.ToUpper().Contains(indirizzo_imp.ToUpper())).ToList(); + } + l = l.Take(300).ToList(); + List lis = new List(); + foreach (Impianto i in l) + { + Impianto_out o = new Impianto_out(); + o = fillImpianto_out(i); + lis.Add(o); + } + return StatusCode(StatusCodes.Status200OK, lis); + } + } + catch(Exception ex) + { + Impianto_out e = new Impianto_out(); + e.err_title = "Errore in ricerca impianti."; + e.err_detail = ex.Message; + e.err_status_code = StatiRisposta.ErroreInterno; + return StatusCode(StatusCodes.Status428PreconditionRequired, e); + } + } + + /// Storico interventi return:ActionResult + [HttpGet("storico_interventi")] + public async Task>> storico_interventi(string token, string? codimp, bool rapp_tec=true) + { + try + { + string ten = getClaimValueByToken(token, "tenant"); + string ten2 = getClaimValueByToken(token, "tenant2"); + string tecnico = getClaimValueByToken(token, "tccodice"); + + _sto_rapp = _VT_StoRapp.StoRapp; + ten = ten2; + + //if (ten.Equals(Clienti.VT)) + //{ + // _sto_rapp = _VT_StoRapp.StoRapp; + // ten = ten2; + //} + //else + //{ + // _sto_rapp = getSto_RappByTenant(ten); + //} + var l = await _sto_rapp.Where(t => t.azienda_impianto != null && t.azienda_impianto.Equals(ten)).ToListAsync(); + //var l = await _sto_rapp.Where(t => t.azienda_impianto != null && t.azienda_impianto.Equals(ten) && t.codice_impianto != null && t.codice_impianto.Equals(codimp)).ToListAsync(); + + if (!string.IsNullOrEmpty(codimp)) + { + l = l.Where(t => t.codice_impianto != null && t.codice_impianto.Trim().Equals(codimp.Trim())).ToList(); + } + if(rapp_tec) + { + l = l.Where(t => t.tccodice != null && t.tccodice.Equals(tecnico)).ToList(); + } + + List lis = new List(); + foreach(Sto_Rapp s in l) + { + Sto_Rapp_out o = new Sto_Rapp_out(); + o = fillSto_Rapp_Out(s, ten); + lis.Add(o); + } + return StatusCode(StatusCodes.Status200OK, lis); + } + catch (Exception ex) + { + Sto_Rapp_out e = new Sto_Rapp_out(); + e.err_title = "Errore in storico interventi"; + e.err_detail = ex.Message; + e.err_status_code = StatiRisposta.ErroreInterno; + return StatusCode(StatusCodes.Status500InternalServerError, e); + } + } + #endregion + + #region Anagrafica clienti + /// Anagrafica return:ActionResult + [HttpGet("anagrafica")] + public async Task> anagrafica(string token, string codcli) + { + try + { + string ten = getClaimValueByToken(token, "tenant"); + string tenConf = getClaimValueByToken(token, "tenantConfigurazioni"); + if (string.IsNullOrEmpty(ten)) + { + ten = tenConf; + } + + Anag aa = new Anag(); + + string ten2 = getClaimValueByToken(token, "tenant2"); + _clientiVT = _VT_anag.Anag; + + var t = await _clientiVT.Where( + t => t.antipcon.Equals("C") + && t.andtobso == null + && t.ancodazi.Equals(ten2) + && t.ancodice.Equals(codcli) + ).ToListAsync(); + AnagVT a = t.First(); + aa.antipcon = a.antipcon; + aa.ancodice = a.ancodice; + aa.ancodfis = a.ancodfis; + aa.anpariva = a.anpariva; + aa.annumlis = a.annumlis; + aa.an_email = a.an_email; + aa.an_empec = a.an_empec; + aa.andescri = a.andescri; + aa.anindiri = a.anindiri; + aa.annumcel = a.annumcel; + aa.antelefo = a.antelefo; + aa.annumlis = a.annumlis; + + //switch (ten) + //{ + + // case Clienti.VT: + // //string ten2 = getClaimValueByToken(token, "tenant2"); + // //_clientiVT = _VT_anag.Anag; + + // //var t = await _clientiVT.Where( + // // t => t.antipcon.Equals("C") + // // && t.andtobso == null + // // && t.ancodazi.Equals(ten2) + // // && t.ancodice.Equals(codcli) + // // ).ToListAsync(); + // //AnagVT a = t.First(); + // //aa.antipcon = a.antipcon; + // //aa.ancodice = a.ancodice; + // //aa.ancodfis = a.ancodfis; + // //aa.anpariva = a.anpariva; + // //aa.annumlis = a.annumlis; + // //aa.an_email = a.an_email; + // //aa.an_empec = a.an_empec; + // //aa.andescri = a.andescri; + // //aa.anindiri = a.anindiri; + // //aa.annumcel = a.annumcel; + // //aa.antelefo = a.antelefo; + // //aa.annumlis = a.annumlis; + // break; + // default: + // _clienti = getClientiByTenant(ten); + // var an = await _clienti.Where(t => t.ancodice == codcli).ToListAsync(); + // aa = an.First(); + // break; + //} + + return StatusCode(StatusCodes.Status200OK, aa); + + } + catch (Exception ex) + { + return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); + } + } + #endregion + + #region tabelle di dominio + /// Tabelle di dominio: causali pagamenti, causali rapportino, tipi esito, tipi intervento return:ActionResult + [HttpGet("tabelle_dominio")] + public async Task> tabelle_dominio(string token) + { + try + { + TabelleDominio td = new TabelleDominio(); + + string ten = getClaimValueByToken(token, "tenant"); + + //if(!ten.Equals(Clienti.VT)) + //{ + // _pagam = getPagamentiByTenant(ten); + // var a = await _pagam.ToListAsync(); + // td.cau_pag = a; + + // _cau_rapp = getCausaliRappByTenant(ten); + // var b = await _cau_rapp.ToListAsync(); + // td.cau_rapp = b; + //} + + _codSegnVT = getVTCodiciSegnalaz(ten); + var c = await _codSegnVT.Where(x => x.DataObso == null).ToListAsync(); + //td.statoImpianto = c; + + List si = new List(); + + foreach (var item in c) + { + ComboItem s1 = new ComboItem(); + + s1.chiave = item.cscodice.Trim(); + s1.valore = item.csdescr.Trim(); + si.Add(s1); + } + + td.statoImpianto = si; + + List e = new List(); + ComboItem c1 = new ComboItem(); + c1.chiave = "P"; + c1.valore = "Positivo"; + e.Add(c1); + + ComboItem c2 = new ComboItem(); + c2.chiave = "N"; + c2.valore = "Negativo"; + e.Add(c2); + + td.esito = e; + + + //List si = new List(); + //ComboItem s1 = new ComboItem(); + //s1.chiave = "1"; + //s1.valore = "In Funzione"; + //si.Add(s1); + + //ComboItem s2 = new ComboItem(); + //s2.chiave = "0"; + //s2.valore = "Fermo"; + //si.Add(s2); + + //td.statoImpianto = si; + + return StatusCode(StatusCodes.Status200OK, td); + + } + catch (Exception ex) + { + return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); + } + } + #endregion + + #region timbrature + /// + private async Task fillTimbratura(Timbratura i, string token) + { + Timbratura r = new Timbratura(); + + string ten = getClaimValueByToken(token, "tenant"); + string tecnico = getClaimValueByToken(token, "tccodice"); + if(ten.Equals(Clienti.VT)) + { + string ten2 = getClaimValueByToken(token, "tenant2"); + ten = ten2; + } + + int id=await getNewId(token); + + r.azienda = ten; + r.id = id; + r.ora_ini = i.ora_ini; + r.min_ini = i.min_ini; + r.ora_fin = i.ora_fin; + r.min_fin = i.min_fin; + r.ore_viaggio = i.ore_viaggio; + r.data_timbratura = i.data_timbratura; + + //if (ten.Equals(Clienti.Marrocco) && !string.IsNullOrEmpty(i.commessa)) + //{ + // i.commessa = i.commessa.Substring(0, 15); + //} + r.commessa = i.commessa; + r.tecnico = tecnico; + + TimeSpan ts = new TimeSpan(i.ora_ini, i.min_ini, 0); + DateTime da = Convert.ToDateTime( r.data_timbratura) + ts; + ts = new TimeSpan(i.ora_fin, i.min_fin, 0); + DateTime a = Convert.ToDateTime(r.data_timbratura) + ts; + ts = (a - da); + + if(ts.Minutes>0) + { + decimal decimali = Decimal.Divide(ts.Minutes, 100); + decimal totale = Convert.ToDecimal(ts.Hours) + decimali; + r.tot_ore = totale; + } + else + { + r.tot_ore = ts.Hours; + } + + + r.giorno =(int) Convert.ToDateTime(i.data_timbratura).DayOfWeek; + r.cpccchk = getCpccchk(10); + r.note = i.note; + + return r; + } + private Timbratura_out fillTimbraturaOut(Timbratura i, string token, int id) + { + Timbratura_out r = new Timbratura_out(); + + r.azienda = i.azienda; + r.id = id; + r.ora_ini = i.ora_ini; + r.min_ini = i.min_ini; + r.ora_fin = i.ora_fin; + r.min_fin = i.min_fin; + r.ore_viaggio = i.ore_viaggio; + r.data_timbratura = i.data_timbratura; + r.commessa = i.commessa; + r.tecnico = i.tecnico; + r.note = i.note; + return r; + } + private CommesseAdHoc_out formattaCommessa(Commessa commessa) + { + StringBuilder sb = new StringBuilder(); + string _item = string.Empty; + CommesseAdHoc_out co = new CommesseAdHoc_out(); + + if (!string.IsNullOrEmpty(commessa.imcodimp)) + { + sb.AppendLine("Imp: " + commessa.imcodimp); + + + string via = !string.IsNullOrEmpty(commessa.imindiri1) ? commessa.imindiri1.Trim() : string.Empty; + string indiri = !string.IsNullOrEmpty(commessa.imindiri2) ? commessa.imindiri2.Trim() : string.Empty; + string num = string.Empty; + if (commessa.imindiri3 != null && commessa.imindiri3.Value > 0) + { + num = commessa.imindiri3.ToString().Trim(); + } + string num2 = !string.IsNullOrEmpty(commessa.imindiri4) ? commessa.imindiri4.Trim() : string.Empty; + string sca = !string.IsNullOrEmpty(commessa.imindiri5) ? commessa.imindiri5.Trim() : string.Empty; + + string appo = string.Empty; + appo = via + indiri + num + num2 + sca; + + if (!string.IsNullOrEmpty(via)) appo = appo + via; + if (!string.IsNullOrEmpty(indiri)) appo = appo + " " + indiri; + if (!string.IsNullOrEmpty(num)) appo = appo + " ," + num; + if (!string.IsNullOrEmpty(num2)) appo = appo + " Int: " + num2; + if (!string.IsNullOrEmpty(sca)) appo = appo + " Scala: " + sca; + sb.AppendLine(appo); + + co.itemList = sb.ToString(); + } + sb = null; + + //copio anche gli altri campi della commessa + co.andescri = commessa.andescri; + co.imindiri1 = commessa.imindiri1; + co.imindiri2 = commessa.imindiri2; + co.imindiri3 = commessa.imindiri3; + co.imindiri4 = commessa.imindiri4; + co.imindiri5 = commessa.imindiri5; + co.imcodcap = commessa.imcodcap; + co.imcodimp = commessa.imcodimp; + co.imlocali = commessa.imlocali; + co.improvin = commessa.improvin; + co.lacodcli = commessa.lacodcli; + co.lacodcom = commessa.lacodcom; + co.ladatchi = commessa.ladatchi; + co.ladeslav = commessa.ladeslav; + co.laserial = commessa.laserial; + co.latipcli = commessa.latipcli; + + return co; + } + private CommesseAdHoc_out formattaCommessaMarrocco(Commessa commessa) + { + StringBuilder sb = new StringBuilder(); + string _item = string.Empty; + CommesseAdHoc_out co = new CommesseAdHoc_out(); + + if (!string.IsNullOrEmpty(commessa.imcodimp)) + { + sb.AppendLine("Comm: " + commessa.lacodcom); + + + string via = !string.IsNullOrEmpty(commessa.imindiri1) ? commessa.imindiri1.Trim() : string.Empty; + string indiri = !string.IsNullOrEmpty(commessa.imindiri2) ? commessa.imindiri2.Trim() : string.Empty; + string num = string.Empty; + if (commessa.imindiri3 != null && commessa.imindiri3.Value > 0) + { + num = commessa.imindiri3.ToString().Trim(); + } + string num2 = !string.IsNullOrEmpty(commessa.imindiri4) ? commessa.imindiri4.Trim() : string.Empty; + string sca = !string.IsNullOrEmpty(commessa.imindiri5) ? commessa.imindiri5.Trim() : string.Empty; + + string appo = string.Empty; + //appo = via + indiri + num + num2 + sca; + + if (!string.IsNullOrEmpty(via)) appo = appo + via; + if (!string.IsNullOrEmpty(indiri)) appo = appo + " " + indiri; + if (!string.IsNullOrEmpty(num)) appo = appo + " ," + num; + if (!string.IsNullOrEmpty(num2)) appo = appo + " Int: " + num2; + if (!string.IsNullOrEmpty(sca)) appo = appo + " Scala: " + sca; + sb.AppendLine(appo); + + co.itemList = sb.ToString(); + } + sb = null; + + //copio anche gli altri campi della commessa + co.andescri = commessa.andescri; + co.imindiri1 = commessa.imindiri1; + co.imindiri2 = commessa.imindiri2; + co.imindiri3 = commessa.imindiri3; + co.imindiri4 = commessa.imindiri4; + co.imindiri5 = commessa.imindiri5; + co.imcodcap = commessa.imcodcap; + co.imcodimp = commessa.imcodimp; + co.imlocali = commessa.imlocali; + co.improvin = commessa.improvin; + co.lacodcli = commessa.lacodcli; + co.lacodcom = commessa.lacodcom; + co.ladatchi = commessa.ladatchi; + co.ladeslav = commessa.ladeslav; + co.laserial = commessa.laserial; + co.latipcli = commessa.latipcli; + + return co; + } + private CommesseAdHoc_out formattaCommessaVT(CommesseVT commessa) + { + StringBuilder sb = new StringBuilder(); + string _item = string.Empty; + CommesseAdHoc_out co = new CommesseAdHoc_out(); + + if (!string.IsNullOrEmpty(commessa.imcodimp)) + { + sb.AppendLine("Imp: " + commessa.imcodimp); + + + string via = !string.IsNullOrEmpty(commessa.imindiri1) ? commessa.imindiri1.Trim() : string.Empty; + string indiri = !string.IsNullOrEmpty(commessa.imindiri2) ? commessa.imindiri2.Trim() : string.Empty; + string num = string.Empty; + if (commessa.imindiri3 != null && commessa.imindiri3.Value > 0) + { + num = commessa.imindiri3.ToString().Trim(); + } + string num2 = !string.IsNullOrEmpty(commessa.imindiri4) ? commessa.imindiri4.Trim() : string.Empty; + string sca = !string.IsNullOrEmpty(commessa.imindiri5) ? commessa.imindiri5.Trim() : string.Empty; + + string appo = string.Empty; + appo = via + indiri + num + num2 + sca; + + if (!string.IsNullOrEmpty(via)) appo = appo + via; + if (!string.IsNullOrEmpty(indiri)) appo = appo + " " + indiri; + if (!string.IsNullOrEmpty(num)) appo = appo + " ," + num; + if (!string.IsNullOrEmpty(num2)) appo = appo + " Int: " + num2; + if (!string.IsNullOrEmpty(sca)) appo = appo + " Scala: " + sca; + sb.AppendLine(appo); + + co.itemList = sb.ToString(); + } + sb = null; + + //copio anche gli altri campi della commessa + co.andescri = commessa.andescri; + co.imindiri1 = commessa.imindiri1; + co.imindiri2 = commessa.imindiri2; + co.imindiri3 = commessa.imindiri3; + co.imindiri4 = commessa.imindiri4; + co.imindiri5 = commessa.imindiri5; + co.imcodcap = commessa.imcodcap; + co.imcodimp = commessa.imcodimp; + co.imlocali = commessa.imlocali; + co.improvin = commessa.improvin; + co.lacodcli = commessa.lacodcli; + co.lacodcom = commessa.lacodcom; + co.ladatchi = commessa.ladatchi; + co.ladeslav = commessa.ladeslav; + co.laserial = commessa.laserial; + co.latipcli = commessa.latipcli; + + return co; + } + + /// Commesse return:ActionResult IEnumerable Commessa + [HttpGet("timbrature/commesse")] + public async Task>> commesse(string token) + { + try + { + string ten = getClaimValueByToken(token, "tenant"); + string ten2 = getClaimValueByToken(token, "tenant2"); + string tecnico = getClaimValueByToken(token, "tccodice"); + List ll = new List(); + if (ten.Equals(Clienti.VT)) + { + DbSet? _VT_CommesseAppo; + _VT_CommesseAppo = _VT_Comm.Comm; + var lst = _VT_CommesseAppo.Where(t => t.lacodazi != null && t.lacodazi.Equals(ten2)).ToList(); + + foreach (CommesseVT a in lst) + { + CommesseAdHoc_out c = new CommesseAdHoc_out(); + c = formattaCommessaVT(a); + ll.Add(c); + } + } + //else if(ten.Equals(Clienti.Marrocco)) + //{ + // _comm = getCommesseByTenant(ten); + // var l = await _comm.OrderByDescending(t => t.ladatchi).ToListAsync(); + // List commesse_filtrate = new List(); + // _commDesc = _Marro_commDesc.Commdesc; + // var commesse_tecnico = _commDesc.Where((t => t.latecsup!=null && t.latecsup.Equals(tecnico))).ToList(); + // foreach(CommessaDesc c in commesse_tecnico) + // { + // var co = _comm.Where(t => t.laserial.Equals(c.laserial)).ToList(); + // if(co!=null && co.Count > 0) + // { + // commesse_filtrate.Add(co.First()); + // } + // } + // foreach(Commessa c in commesse_filtrate) + // { + // CommesseAdHoc_out co = new CommesseAdHoc_out(); + // co= formattaCommessa(c); + // ll.Add(co); + // } + //} + //else if (ten.Equals(Clienti.Gitoga)) + //{ + // _comm = getCommesseByTenant(ten); + // var l = await _comm.OrderByDescending(t => t.ladatchi).ToListAsync(); + // List commesse_filtrate = new List(); + // _commDesc = _Gitoga_commDesc.Commdesc; + // var commesse_tecnico = _commDesc.Where((t => t.latecsup != null && t.latecsup.Equals(tecnico))).ToList(); + // foreach (CommessaDesc c in commesse_tecnico) + // { + // var co = _comm.Where(t => t.laserial.Equals(c.laserial)).ToList(); + // if (co != null && co.Count > 0) + // { + // commesse_filtrate.Add(co.First()); + // } + // } + // foreach (Commessa c in commesse_filtrate) + // { + // CommesseAdHoc_out co = new CommesseAdHoc_out(); + // co = formattaCommessaMarrocco(c); + // ll.Add(co); + // } + //} + //else if ( ten.Equals(Clienti.Lifta)) + //{ + // _comm = getCommesseByTenant(ten); + // var l = await _comm.OrderByDescending(t => t.ladatchi).ToListAsync(); + // foreach (Commessa c in l) + // { + // CommesseAdHoc_out co = new CommesseAdHoc_out(); + // co = formattaCommessaMarrocco(c); + // ll.Add(co); + // } + //} + //else + //{ + // _comm = getCommesseByTenant(ten); + // var l = await _comm.OrderByDescending(t => t.ladatchi).ToListAsync(); + + // foreach (Commessa c in l) + // { + // CommesseAdHoc_out co = new CommesseAdHoc_out(); + // co = formattaCommessaMarrocco(c); + // ll.Add(co); + // } + //} + + return StatusCode(StatusCodes.Status200OK, ll); + } + catch (Exception ex) + { + CommesseAdHoc_out err = new CommesseAdHoc_out(); + err.err_title = "Errore in timbrature/commesse"; + err.err_detail = ex.Message; + err.err_status_code = "500"; + return StatusCode(StatusCodes.Status500InternalServerError, err); + } + } + + /// Salva la timbratuta in tabella Timbrature return:ActionResult Timbratura_out + [HttpPost] + [Route("timbrature/salva")] + public async Task> timbrature_salva([FromBody] Timbratura model, string token) + { + Timbratura_out tOut = new Timbratura_out(); + try + { + string ten = getClaimValueByToken(token, "tenant"); + string tecnico = getClaimValueByToken(token, "tccodice"); + string tenConf = getClaimValueByToken(token, "tenantConfigurazioni"); + if (string.IsNullOrEmpty(ten)) + { + ten = tenConf; + } + + if (await checkTimbraturaPresente(ten, model) == 0) + { + Timbratura t = await fillTimbratura(model, token); + + using (var transactionVT = _VT_timbr.Database.BeginTransaction()) + { + await _VT_timbr.Timbr.AddAsync(t); + await _VT_timbr.SaveChangesAsync(); + transactionVT.Commit(); + } + + //switch (ten) + //{ + // case Clienti.Sicilia: + // using (var transaction = _Sicilia_timbr.Database.BeginTransaction()) + // { + // await _Sicilia_timbr.Timbr.AddAsync(t); + // await _Sicilia_timbr.SaveChangesAsync(); + // transaction.Commit(); + // } + // break; + // case Clienti.Sinergo: + // using (var transaction2 = _Sinergo_timbr.Database.BeginTransaction()) + // { + // await _Sinergo_timbr.Timbr.AddAsync(t); + // await _Sinergo_timbr.SaveChangesAsync(); + // transaction2.Commit(); + // } + // break; + // case Clienti.Siet: + // using (var transactionSiet = _Siet_timbr.Database.BeginTransaction()) + // { + // await _Siet_timbr.Timbr.AddAsync(t); + // await _Siet_timbr.SaveChangesAsync(); + // transactionSiet.Commit(); + // } + // break; + // case Clienti.PMS: + // using (var transactionPMS = _PMS_timbr.Database.BeginTransaction()) + // { + // await _PMS_timbr.Timbr.AddAsync(t); + // await _PMS_timbr.SaveChangesAsync(); + // transactionPMS.Commit(); + // } + // break; + // case Clienti.LW: + // using (var transactionlw = _LW_timbr.Database.BeginTransaction()) + // { + // await _LW_timbr.Timbr.AddAsync(t); + // await _LW_timbr.SaveChangesAsync(); + // transactionlw.Commit(); + // } + // break; + // case Clienti.Tedesco: + // using (var transactionTedes = _Tedes_timbr.Database.BeginTransaction()) + // { + // await _Tedes_timbr.Timbr.AddAsync(t); + // await _Tedes_timbr.SaveChangesAsync(); + // transactionTedes.Commit(); + // } + // break; + // case Clienti.VT: + // using (var transactionVT = _VT_timbr.Database.BeginTransaction()) + // { + // await _VT_timbr.Timbr.AddAsync(t); + // await _VT_timbr.SaveChangesAsync(); + // transactionVT.Commit(); + // } + // break; + // case Clienti.Syscom : + // using (var transactionsys = _Sys_timbr.Database.BeginTransaction()) + // { + // await _Sys_timbr.Timbr.AddAsync(t); + // await _Sys_timbr.SaveChangesAsync(); + // transactionsys.Commit(); + // } + // break; + // case Clienti.Marrocco: + // using (var transactionMarro = _Marro_timbr.Database.BeginTransaction()) + // { + // await _Marro_timbr.Timbr.AddAsync(t); + // await _Marro_timbr.SaveChangesAsync(); + // transactionMarro.Commit(); + // } + // break; + // default: + // break; + //} + tOut = fillTimbraturaOut(model, ten, t.id); + tOut.err_status_code = StatiRisposta.Ok; + return StatusCode(StatusCodes.Status200OK, tOut); + } + else + { + return StatusCode(StatusCodes.Status500InternalServerError, "timbratura presente."); + } + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + tOut.err_title = ex.Message; + tOut.err_detail = errmsg; + tOut.err_status_code = StatiRisposta.ErroreInterno; + return StatusCode(StatusCodes.Status500InternalServerError, tOut); + } + //return tOut; + } + #endregion + + #region storico impianto + + private Sto_Imp_out fillSto_Imp_Out(Sto_Imp i, string tenant) + { + Sto_Imp_out o = new Sto_Imp_out(); + + + o.tipo_movimento = !string.IsNullOrEmpty(i.tipo_movimento) ? i.tipo_movimento.Trim() : string.Empty; ; + o.articolo = !string.IsNullOrEmpty(i.articolo) ? i.articolo.Trim() : string.Empty; + o.data_rapportino = i.data_rapportino; + + Dictionary dic = new Dictionary(); + //switch (tenant) + //{ + // case Clienti.Marrocco: + + // break; + // case Clienti.Ferrari: + + // break; + // case Clienti.Sicilia: + // #region sicilia + // if (!string.IsNullOrEmpty(i.codimp) && !i.codimp.Trim().Equals(string.Empty)) + // { + // dic.Add("Codice Impianto", i.codimp.Trim()); + // } + // if (!string.IsNullOrEmpty(i.desc_impianto) && !i.desc_impianto.Trim().Equals(string.Empty)) + // { + // dic.Add("Descrizione impianto", i.desc_impianto.Trim()); + // } + // if (!string.IsNullOrEmpty(i.indirizzo) && !i.indirizzo.Trim().Equals(string.Empty)) + // { + // StringBuilder sb = new StringBuilder(); + // string ind = string.Empty; + // string via = !string.IsNullOrEmpty(i.indirizzo_tipo) ? i.indirizzo_tipo.Trim() : string.Empty; + // string indiri = !string.IsNullOrEmpty(i.indirizzo) ? i.indirizzo.Trim() : string.Empty; + // string num = string.Empty; + // if (i.indirizzo_num != null && i.indirizzo_num.Value > 0) + // { + // num = i.indirizzo_num.ToString().Trim(); + // } + // string num2 = !string.IsNullOrEmpty(i.indirizzo_num2) ? i.indirizzo_num2.Trim() : string.Empty; + // string sca = !string.IsNullOrEmpty(i.indirizzo_scala) ? i.indirizzo_scala.Trim() : string.Empty; + + // //ind = string.Concat("{0} {1} num {2} interno {3} scala {4}",via,indiri,num,num2,sca); + // if (!string.IsNullOrEmpty(via)) sb.Append(via); + // if (!string.IsNullOrEmpty(indiri)) sb.Append(" " + indiri); + // if (!string.IsNullOrEmpty(num)) sb.Append(" ," + num); + // if (!string.IsNullOrEmpty(num2)) sb.Append(" Int: " + num2); + // if (!string.IsNullOrEmpty(sca)) sb.Append(" Scala: " + sca); + // dic.Add("Indirizzo imp", sb.ToString()); + + // } + // if (!string.IsNullOrEmpty(i.codice_tecnico) && !i.codice_tecnico.Trim().Equals(string.Empty)) + // { + // dic.Add("Codice tecnico", i.codice_tecnico.Trim()); + // } + // if (!string.IsNullOrEmpty(i.desc_tecnico) && !i.desc_tecnico.Trim().Equals(string.Empty)) + // { + // dic.Add("Descrizione tecnico", i.desc_tecnico.Trim()); + // } + // if (!string.IsNullOrEmpty(i.seriale_rapportino) && !i.seriale_rapportino.Trim().Equals(string.Empty)) + // { + // dic.Add("Seriale rapportino", i.seriale_rapportino.Trim()); + // } + // if (i.data_rapportino != null) + // { + // dic.Add("Data rapportino", i.data_rapportino.Value.ToString()); + // } + // if (!string.IsNullOrEmpty(i.magazzino) && !i.magazzino.Trim().Equals(string.Empty)) + // { + // dic.Add("Codice magazzino", i.magazzino.Trim()); + // } + + // if (!string.IsNullOrEmpty(i.tipo_movimento) && !i.tipo_movimento.Trim().Equals(string.Empty)) + // { + // string st = string.Empty; + // switch (i.tipo_movimento) + // { + // case "E": + // st = "Eliminato da impianto"; + + // break; + // case "A": + // st = "Aggiunto a impianto"; + + // break; + // case "S": + // st = "Sostituito a impianto"; + + // break; + // } + // dic.Add("Operazione", st); + // } + // if (!string.IsNullOrEmpty(i.articolo) && !i.articolo.Trim().Equals(string.Empty)) + // { + // dic.Add("Codice articolo", i.articolo.Trim()); + // } + // if (!string.IsNullOrEmpty(i.desc_art) && !i.desc_art.Trim().Equals(string.Empty)) + // { + // dic.Add("Descrizione articolo", i.desc_art.Trim()); + // } + // if (!string.IsNullOrEmpty(i.codlotto) && !i.codlotto.Trim().Equals(string.Empty)) + // { + // dic.Add("Codice lotto", i.codlotto.Trim()); + // } + // if (!string.IsNullOrEmpty(i.matricola) && !i.matricola.Trim().Equals(string.Empty)) + // { + // dic.Add("Matricola", i.matricola.Trim()); + // } + + // if (i.quantita != null && i.quantita.Value > 0) + // { + // dic.Add("Qta", i.quantita.Value.ToString()); + // } + // if (i.prezzo != null && i.prezzo.Value > 0) + // { + // dic.Add("Prezzo", i.prezzo.Value.ToString()); + // } + // if (!string.IsNullOrEmpty(i.note) && !i.note.Trim().Equals(string.Empty)) + // { + // dic.Add("Note intervento", i.note.Trim()); + // } + // if (!string.IsNullOrEmpty(i.azienda_impianto) && !i.azienda_impianto.Trim().Equals(string.Empty)) + // { + // dic.Add("Azienda", i.azienda_impianto.Trim()); + // } + + + // #endregion + + // break; + // case Clienti.Discovery: + + // break; + // case Clienti.Sarom: + + // break; + // default: + + // break; + //} + o.dettaglio = dic; + return o; + } + + /// Storico rapportini tecnico return:ActionResult di Sto_Imp_out + [HttpGet("storico_impianto")] + public async Task>> storico_impianto(string token, string? codimp /*,bool rapp_tec = true*/) + { + try + { + string ten = getClaimValueByToken(token, "tenant"); + string tecnico = getClaimValueByToken(token, "tccodice"); + //_sto_imp = getStoricoImpiantoByTenant(ten); + //var l = await _rapportini.Where(t => t.raaziimp != null && t.raaziimp.Equals(ten) && t.racodte1 != null && t.racodte1.Trim().Equals(tecnico.Trim())).ToListAsync(); + var l = await _sto_imp.Where(t => t.azienda_impianto != null && t.azienda_impianto.Equals(ten)).ToListAsync(); + if (!string.IsNullOrEmpty(codimp)) + { + l = l.Where(t => t.codimp != null && t.codimp.Equals(codimp)).ToList(); + } + + + List lis = new List(); + foreach (Sto_Imp s in l) + { + Sto_Imp_out o = new Sto_Imp_out(); + o = fillSto_Imp_Out(s, ten); + lis.Add(o); + } + + return StatusCode(StatusCodes.Status200OK, lis); + } + catch (Exception ex) + { + Sto_Imp_out e = new Sto_Imp_out(); + e.err_title = "Errore in Storico impianto"; + e.err_detail = ex.Message; + e.err_status_code = StatiRisposta.ErroreInterno; + return StatusCode(StatusCodes.Status500InternalServerError, e); + } + } + + #endregion + + #region Rapportini da commessa + + public string _tablecode; + public string _warncode; + + /// Ricerca Commessa return:ActionResult + [HttpGet("ricerca_commessa_impianto")] + public async Task>> ricerca_commessa_impianto(int tipo,string token, string? codimp, string? indirizzo_imp, string? cli, string? comm) + { + Output_Ricerca uscita = new Output_Ricerca(); + //tipo 1: ricerca commessa - tipo2: ricerca impianto + + var st = StatusCodes.Status200OK; + List lis = new List(); + switch (tipo) + { + case 1: + #region ricerca commessa + try + { + //if (string.IsNullOrEmpty(codimp) && string.IsNullOrEmpty(indirizzo_imp) && string.IsNullOrEmpty(cli) && string.IsNullOrEmpty(comm)) + //{ + + // uscita.err_title = "Errore in ricerca Commesse/Impianto."; + // uscita.err_detail = "Immettere almeno un parametro di ricerca."; + // uscita.err_status_code = StatiRisposta.OperazioneNonAmmessa; + // //return StatusCode(StatusCodes.Status400BadRequest, uscita); + // st = StatusCodes.Status400BadRequest; + // lis.Add(uscita); + //} + //else + //{ + string ten = getClaimValueByToken(token, "tenant"); + if (ten.Equals(Clienti.VT)) + { + + string ten2= getClaimValueByToken(token, "tenant2"); + _VT_Commesse = _VT_Comm.Comm; + var l = await _VT_Commesse.Where(t=>t.lacodazi.Equals(ten2)).ToListAsync(); + if (!string.IsNullOrEmpty(codimp)) + { + l = l.Where(t => t.imcodimp != null && t.imcodimp.Contains(codimp)).ToList(); + } + if (!string.IsNullOrEmpty(indirizzo_imp)) + { + l = l.Where(t => t.imindiri2 != null && t.imindiri2.ToUpper().Contains(indirizzo_imp.ToUpper())).ToList(); + } + if (!string.IsNullOrEmpty(cli)) + { + l = l.Where(t => t.andescri != null && t.andescri.ToUpper().Contains(cli.ToUpper())).ToList(); + } + if (!string.IsNullOrEmpty(comm)) + { + l = l.Where(t => t.lacodcom != null && t.lacodcom.ToUpper().Contains(comm.ToUpper())).ToList(); + } + l = l.Take(300).ToList(); + + foreach (CommesseVT i in l) + { + Output_Ricerca o = new Output_Ricerca(); + o = fillOutputRicercaVT(i); + lis.Add(o); + } + st = StatusCodes.Status200OK; + + } + else + { + //string ten = getClaimValueByToken(token, "tenant"); + //_comm = getCommesseByTenant(ten); + var l = await _comm.ToListAsync(); + if (!string.IsNullOrEmpty(codimp)) + { + l = l.Where(t => t.imcodimp != null && t.imcodimp.Contains(codimp)).ToList(); + } + if (!string.IsNullOrEmpty(indirizzo_imp)) + { + l = l.Where(t => t.imindiri2 != null && t.imindiri2.ToUpper().Contains(indirizzo_imp.ToUpper())).ToList(); + } + if (!string.IsNullOrEmpty(cli)) + { + l = l.Where(t => t.andescri != null && t.andescri.ToUpper().Contains(cli.ToUpper())).ToList(); + } + if (!string.IsNullOrEmpty(comm)) + { + l = l.Where(t => t.lacodcom != null && t.lacodcom.ToUpper().Contains(comm.ToUpper())).ToList(); + } + l = l.Take(300).ToList(); + + foreach (Commessa i in l) + { + Output_Ricerca o = new Output_Ricerca(); + o = fillOutputRicerca(i); + lis.Add(o); + } + st = StatusCodes.Status200OK; + //} + + + //return StatusCode(StatusCodes.Status200OK, lis); + } + } + catch (Exception ex) + { + + uscita.err_title = "Errore in ricerca_impianti_chiamata."; + uscita.err_detail = ex.Message; + uscita.err_status_code = StatiRisposta.ErroreInterno; + //return StatusCode(StatusCodes.Status500InternalServerError, uscita); + st = StatusCodes.Status500InternalServerError; + lis.Add(uscita); + + } + #endregion + break; + case 2: + #region ricerca Impianto + try + { + //if (string.IsNullOrEmpty(codimp) && string.IsNullOrEmpty(indirizzo_imp)) + //{ + + // uscita.err_title = "Errore in ricerca_commessa_impianto."; + // uscita.err_detail = "Immettere almeno un parametro di ricerca."; + // uscita.err_status_code = StatiRisposta.OperazioneNonAmmessa; + // //return StatusCode(StatusCodes.Status400BadRequest, uscita); + // st = StatusCodes.Status400BadRequest; + // lis.Add(uscita); + //} + //else + //{ + string ten = getClaimValueByToken(token, "tenant"); + if (ten.Equals(Clienti.VT)) + { + string ten2 = getClaimValueByToken(token, "tenant2"); + var l = await _VT_impia.Impia.Where(t => t.imcodazi != null && t.imcodazi.Equals(ten2)).ToListAsync(); + if (!string.IsNullOrEmpty(codimp)) + { + l = l.Where(t => t.imcodimp != null && t.imcodimp.Contains(codimp)).ToList(); + } + if (!string.IsNullOrEmpty(indirizzo_imp)) + { + l = l.Where(t => t.imindiri2 != null && t.imindiri2.ToUpper().Contains(indirizzo_imp.ToUpper())).ToList(); + } + l = l.Take(300).ToList(); + foreach (Impianto i in l) + { + Output_Ricerca o = new Output_Ricerca(); + o = fillOutputRicercaByImpianto(i); + lis.Add(o); + } + st = StatusCodes.Status200OK; + } + else + { + //_impianto = getImpiantiByTenant(ten); + var l = await _impianto.Where(t => t.imcodazi != null && t.imcodazi.Equals(ten)).ToListAsync(); + if (!string.IsNullOrEmpty(codimp)) + { + l = l.Where(t => t.imcodimp != null && t.imcodimp.Contains(codimp)).ToList(); + } + if (!string.IsNullOrEmpty(indirizzo_imp)) + { + l = l.Where(t => t.imindiri2 != null && t.imindiri2.ToUpper().Contains(indirizzo_imp.ToUpper())).ToList(); + } + l = l.Take(300).ToList(); + foreach (Impianto i in l) + { + Output_Ricerca o = new Output_Ricerca(); + o = fillOutputRicercaByImpianto(i); + lis.Add(o); + } + st = StatusCodes.Status200OK; + } + //} + } + catch (Exception ex) + { + Impianto_out e = new Impianto_out(); + e.err_title = "Errore in ricerca impianti."; + e.err_detail = ex.Message; + e.err_status_code = StatiRisposta.ErroreInterno; + //return StatusCode(StatusCodes.Status428PreconditionRequired, e); + st = StatusCodes.Status500InternalServerError; + lis.Add(uscita); + } + #endregion + break; + default: + uscita.err_title = "Errore in ricerca_commessa_impianto."; + uscita.err_detail = "Tipo Ricerca non corretto"; + uscita.err_status_code = StatiRisposta.OperazioneNonAmmessa; + //return StatusCode(StatusCodes.Status400BadRequest, uscita); + st = StatusCodes.Status400BadRequest; + lis.Add(uscita); + break; + } + + return StatusCode(st, lis); + } + + /// Ricerca Commessa NUOVAreturn:ActionResult + [HttpGet("ricerca_commessa_impianto2")] + public async Task>> ricerca_commessa_impianto2(int tipo, string token, string? codimp, string? indirizzo_imp, string? cli, string? comm) + { + Output_Ricerca uscita = new Output_Ricerca(); + string ten = getClaimValueByToken(token, "tenant"); + string ten2 = getClaimValueByToken(token, "tenant2"); + string tenConf = getClaimValueByToken(token, "tenantConfigurazioni"); + string tecnico = getClaimValueByToken(token, "tccodice"); + if (string.IsNullOrEmpty(ten)) + { + ten = tenConf; + } + + //Console.WriteLine(string.Format("*********** {2} INIZIO Chiamata al metodo ricerca_commessa_impianto2: tipo:{0} file: {1} ", ten, tipo, DateTime.Now.ToString())); + //Radio Commessa, tipo 1 , campi cli e comm + //Radio Cliente, tipo 2, campi cli + //Radio Impianto, tipo 3, campi codimp e indirizzoImp + + + + var st = StatusCodes.Status200OK; + List lis = new List(); + switch (tipo) + { + case 1: + #region ricerca commessa + try + { + + if (ten.Equals(Clienti.VT)) + { + _VT_Commesse = _VT_Comm.Comm; + var l = await _VT_Commesse.Where(t => t.lacodazi.Equals(ten2)).ToListAsync(); + if (!string.IsNullOrEmpty(codimp)) + { + l = l.Where(t => t.imcodimp != null && t.imcodimp.ToUpper().Contains(codimp.ToUpper())).ToList(); + } + if (!string.IsNullOrEmpty(indirizzo_imp)) + { + l = l.Where(t => t.imindiri2 != null && t.imindiri2.ToUpper().Contains(indirizzo_imp.ToUpper())).ToList(); + } + if (!string.IsNullOrEmpty(cli)) + { + l = l.Where(t => t.andescri != null && t.andescri.ToUpper().Contains(cli.ToUpper())).ToList(); + } + if (!string.IsNullOrEmpty(comm)) + { + l = l.Where(t => t.lacodcom != null && t.lacodcom.ToUpper().Contains(comm.ToUpper())).ToList(); + } + l = l.Take(300).ToList(); + + foreach (CommesseVT i in l) + { + Output_Ricerca o = new Output_Ricerca(); + o = fillOutputRicercaVT(i); + lis.Add(o); + } + st = StatusCodes.Status200OK; + + } + //else if(ten.Equals(Clienti.Marrocco)) + //{ + + // // qui devo filtrare per tecnico capoogruppo come faccio nella ricerca commesse del timesheet + // _comm = getCommesseByTenant(ten); + // var l = await _comm.OrderByDescending(t => t.ladatchi).ToListAsync(); + // List commesse_filtrate = new List(); + // _commDesc = _Marro_commDesc.Commdesc; + // var commesse_tecnico = _commDesc.Where((t => t.latecsup != null && t.latecsup.Equals(tecnico))).ToList(); + // foreach (CommessaDesc c in commesse_tecnico) + // { + // var co = _comm.Where(t => t.laserial.Equals(c.laserial)).ToList(); + // if (co != null && co.Count > 0) + // { + // commesse_filtrate.Add(co.First()); + // } + // } + // if(commesse_filtrate.Count()==0) + // { + // commesse_filtrate = l; + // } + // if (!string.IsNullOrEmpty(codimp)) + // { + // commesse_filtrate = commesse_filtrate.Where(t => t.imcodimp != null && t.imcodimp.ToUpper().Contains(codimp.ToUpper())).ToList(); + // } + // if (!string.IsNullOrEmpty(indirizzo_imp)) + // { + // commesse_filtrate = commesse_filtrate.Where(t => t.imindiri2 != null && t.imindiri2.ToUpper().Contains(indirizzo_imp.ToUpper())).ToList(); + // } + // if (!string.IsNullOrEmpty(cli)) + // { + // commesse_filtrate = commesse_filtrate.Where(t => t.andescri != null && t.andescri.ToUpper().Contains(cli.ToUpper())).ToList(); + // } + // if (!string.IsNullOrEmpty(comm)) + // { + // commesse_filtrate = commesse_filtrate.Where(t => t.lacodcom != null && t.lacodcom.ToUpper().Contains(comm.ToUpper())).ToList(); + // } + // commesse_filtrate = commesse_filtrate.Take(300).ToList(); + + // foreach (Commessa i in commesse_filtrate) + // { + // Output_Ricerca o = new Output_Ricerca(); + // o = fillOutputRicerca(i); + // lis.Add(o); + // } + // st = StatusCodes.Status200OK; + //} + else + { + //string ten = getClaimValueByToken(token, "tenant"); + //_comm = getCommesseByTenant(ten); + var l = await _comm.ToListAsync(); + if (!string.IsNullOrEmpty(codimp)) + { + l = l.Where(t => t.imcodimp != null && t.imcodimp.ToUpper().Contains(codimp.ToUpper())).ToList(); + } + if (!string.IsNullOrEmpty(indirizzo_imp)) + { + l = l.Where(t => t.imindiri2 != null && t.imindiri2.ToUpper().Contains(indirizzo_imp.ToUpper())).ToList(); + } + if (!string.IsNullOrEmpty(cli)) + { + l = l.Where(t => t.andescri != null && t.andescri.ToUpper().Contains(cli.ToUpper())).ToList(); + } + if (!string.IsNullOrEmpty(comm)) + { + l = l.Where(t => t.lacodcom != null && t.lacodcom.ToUpper().Contains(comm.ToUpper())).ToList(); + } + l = l.Take(300).ToList(); + + foreach (Commessa i in l) + { + Output_Ricerca o = new Output_Ricerca(); + o = fillOutputRicerca(i); + lis.Add(o); + } + st = StatusCodes.Status200OK; + //} + + + //return StatusCode(StatusCodes.Status200OK, lis); + } + } + catch (Exception ex) + { + + uscita.err_title = "Errore in ricerca_commessa_impianto2."; + uscita.err_detail = ex.Message; + uscita.err_status_code = StatiRisposta.ErroreInterno; + //return StatusCode(StatusCodes.Status500InternalServerError, uscita); + st = StatusCodes.Status500InternalServerError; + lis.Add(uscita); + + } + #endregion + break; + case 3: + #region ricerca IMPIANTO + //Radio Cliente, tipo 2, campi codimp e indirizzoImp + try + { + //string ten = getClaimValueByToken(token, "tenant"); + if (ten.Equals(Clienti.VT)) + { + var l = await _VT_impia.Impia.Where(t => t.imcodazi != null && t.imcodazi.Equals(ten2)).ToListAsync(); + if (!string.IsNullOrEmpty(codimp)) + { + l = l.Where(t => t.imcodimp != null && t.imcodimp.ToUpper().Contains(codimp.ToUpper())).ToList(); + } + if (!string.IsNullOrEmpty(indirizzo_imp)) + { + l = l.Where(t => t.imindiri2 != null && t.imindiri2.ToUpper().Contains(indirizzo_imp.ToUpper())).ToList(); + } + l = l.Take(300).ToList(); + foreach (Impianto i in l) + { + Output_Ricerca o = new Output_Ricerca(); + o = fillOutputRicercaByImpianto(i); + lis.Add(o); + } + st = StatusCodes.Status200OK; + } + else + { + //_impianto = getImpiantiByTenant(ten); + var l = await _impianto.Where(t => t.imcodazi != null && t.imcodazi.Equals(ten)).ToListAsync(); + if (!string.IsNullOrEmpty(codimp)) + { + l = l.Where(t => t.imcodimp != null && t.imcodimp.ToUpper().Contains(codimp.ToUpper())).ToList(); + } + if (!string.IsNullOrEmpty(indirizzo_imp)) + { + l = l.Where(t => t.imindiri2 != null && t.imindiri2.ToUpper().Contains(indirizzo_imp.ToUpper())).ToList(); + } + l = l.Take(300).ToList(); + foreach (Impianto i in l) + { + Output_Ricerca o = new Output_Ricerca(); + o = fillOutputRicercaByImpianto(i); + lis.Add(o); + } + st = StatusCodes.Status200OK; + } + //} + } + catch (Exception ex) + { + Impianto_out e = new Impianto_out(); + e.err_title = "Errore in ricerca impianti2."; + e.err_detail = ex.Message; + e.err_status_code = StatiRisposta.ErroreInterno; + //return StatusCode(StatusCodes.Status428PreconditionRequired, e); + st = StatusCodes.Status500InternalServerError; + lis.Add(uscita); + } + #endregion + break; + case 2: + #region ricerca CLIENTE + try + { + //Radio Cliente, tipo 2, campi cli + if (ten.Equals(Clienti.VT)) + { + var l = await _VT_impia.Impia.Where(t => t.imcodazi != null && t.imcodazi.Equals(ten2)).ToListAsync(); + + if (!string.IsNullOrEmpty(cli)) + { + l = l.Where(t => t.descCliente != null && t.descCliente.ToUpper().Contains(cli.ToUpper())).ToList(); + } + l = l.Take(300).ToList(); + foreach (Impianto i in l) + { + Output_Ricerca o = new Output_Ricerca(); + o = fillOutputRicercaByImpianto(i); + lis.Add(o); + } + st = StatusCodes.Status200OK; + } + else + { + //_impianto = getImpiantiByTenant(ten); + var l = await _impianto.Where(t => t.imcodazi != null && t.imcodazi.Equals(ten)).ToListAsync(); + if (!string.IsNullOrEmpty(cli)) + { + l = l.Where(t => t.descCliente != null && t.descCliente.ToUpper().Contains(cli.ToUpper())).ToList(); + } + l = l.Take(300).ToList(); + foreach (Impianto i in l) + { + Output_Ricerca o = new Output_Ricerca(); + o = fillOutputRicercaByImpianto(i); + lis.Add(o); + } + st = StatusCodes.Status200OK; + } + } + catch (Exception ex) + { + Impianto_out e = new Impianto_out(); + e.err_title = "Errore in ricerca impianti2."; + e.err_detail = ex.Message; + e.err_status_code = StatiRisposta.ErroreInterno; + //return StatusCode(StatusCodes.Status428PreconditionRequired, e); + st = StatusCodes.Status500InternalServerError; + lis.Add(uscita); + } + #endregion + break; + default: + uscita.err_title = "Errore in ricerca_commessa_impianto2."; + uscita.err_detail = "Tipo Ricerca non corretto"; + uscita.err_status_code = StatiRisposta.OperazioneNonAmmessa; + st = StatusCodes.Status400BadRequest; + lis.Add(uscita); + break; + } + + return StatusCode(st, lis); + } + + /// Salva la timbratuta in tabella Timbrature return:ActionResult Timbratura_out + [HttpPost] + [Route("chiamata/inserisci")] + public async Task> Chiamata_Insert(string token, string codimp, string? codice_commessa) + { + Output_Chiamate tOut = new Output_Chiamate(); + tOut.uscita = new Chiamate_out(); + Input i = new Input(); + try + { + string ten = getClaimValueByToken(token, "tenant"); + string tecnico = getClaimValueByToken(token, "tccodice"); + string ten2 = getClaimValueByToken(token, "tenant2"); + string tenConf = getClaimValueByToken(token, "tenantConfigurazioni"); + if (string.IsNullOrEmpty(ten)) + { + ten = tenConf; + } + + Chiamate_out o = new Chiamate_out(); + Prog cpwarnNumChiamata=new Prog(); + Prog cpwarnSeriale = new Prog(); + + Prog2 cpwarnNumChiamataDecimal = new Prog2(); + Prog2 cpwarnSerialeDecimal = new Prog2(); + + string serialeChiamata = string.Empty; + string progChiamata = string.Empty; + string tablecodeProg = string.Empty; + string warncodeProg = string.Empty; + string tablecodeSer = string.Empty; + string warncodeSer = string.Empty; + decimal? serialeLetto = 0; + decimal? progressivoLetto = 0; + string esercizio = Convert.ToString(DateTime.Today.Year); + + //lettura seriali e progressivi + + //string ten2 = getClaimValueByToken(token, "tenant2"); + _VT_prog = _VT_progtable.progr; + var t = await _VT_prog.Where(t => t.azienda.Equals(ten2)).ToListAsync(); + foreach (Progressivo ch in t) + { + string tipoprog = string.Empty; + tipoprog = ch.tipo_prog; + int? val = 0; + val = ch.val_prog; + if (!string.IsNullOrEmpty(tipoprog) && tipoprog.Equals("NUM_CHIAMA")) + { + progChiamata = Convert.ToString(val); + progressivoLetto = val; + } + if (!string.IsNullOrEmpty(tipoprog) && tipoprog.Equals("SER_CHIAMA")) + { + serialeChiamata = Convert.ToString(val); + serialeLetto = val; + } + } + //switch (ten) + //{ + // case Clienti.VT: + // //string ten2 = getClaimValueByToken(token, "tenant2"); + // _VT_prog = _VT_progtable.progr; + // var t = await _VT_prog.Where(t => t.azienda.Equals(ten2)).ToListAsync(); + // foreach (Progressivo ch in t) + // { + // string tipoprog = string.Empty; + // tipoprog = ch.tipo_prog; + // int? val = 0; + // val = ch.val_prog; + // if (!string.IsNullOrEmpty(tipoprog) && tipoprog.Equals("NUM_CHIAMA")) + // { + // progChiamata = Convert.ToString(val); + // progressivoLetto = val; + // } + // if (!string.IsNullOrEmpty(tipoprog) && tipoprog.Equals("SER_CHIAMA")) + // { + // serialeChiamata = Convert.ToString(val); + // serialeLetto = val; + // } + // } + // break; + //} + + //inserisco + //2024-04-23: codice_commessa posto a nullable (quando inserisco una chiamata selezionando solo l'impianto) + //gestisco la ricerca del seriale + string serial_comm = string.Empty; + + if (!string.IsNullOrEmpty(codice_commessa)) + { + serial_comm = await leggiSerialeByCodCommessaVT(ten2, codice_commessa); + } + tOut.uscita = await inserimentoChiamata2(ten, tecnico, codimp, serialeChiamata, progChiamata, serial_comm, ten2, tenConf); + + //switch (ten) + //{ + // case Clienti.VT: + // if (!string.IsNullOrEmpty(codice_commessa)) + // { + // serial_comm = await leggiSerialeByCodCommessaVT(ten2, codice_commessa); + // } + // tOut.uscita = await inserimentoChiamata2(ten, tecnico, codimp, serialeChiamata, progChiamata, serial_comm,ten2, tenConf); + // break; + // default: + // if(!string.IsNullOrEmpty(codice_commessa)) + // { + // serial_comm = await leggiSerialeByCodCommessa(ten, codice_commessa); + // } + + + // //tOut.uscita = await inserimentoChiamata2(ten, tecnico, codimp, serialeChiamata, progChiamata, serial_comm,ten); + // tOut.uscita = await inserimentoChiamata2(tenConf, tecnico, codimp, serialeChiamata, progChiamata, serial_comm, ten, tenConf); + // break; + //} + + //aggiornamento seriali e progressivi + string serialeUpdate = string.Empty; + float numeroUpdate = 0; + + serialeLetto = serialeLetto + 1; + int val2 = Convert.ToInt32(serialeLetto); + await aggiornaprogressivoVT(ten2, "SER_CHIAMA", val2); + serialeUpdate = tOut.uscita.chserial; + + progressivoLetto = progressivoLetto + 1; + val2 = Convert.ToInt32(progressivoLetto); + await aggiornaprogressivoVT(ten2, "NUM_CHIAMA", val2); + + //switch (ten) + //{ + // case Clienti.VT: + // serialeLetto = serialeLetto + 1; + // int val = Convert.ToInt32(serialeLetto); + // await aggiornaprogressivoVT(ten2, "SER_CHIAMA", val); + // serialeUpdate = tOut.uscita.chserial; + + // progressivoLetto = progressivoLetto + 1; + // val = Convert.ToInt32(progressivoLetto); + // await aggiornaprogressivoVT(ten2, "NUM_CHIAMA", val); + + // break; + //} + + i.codice_impianto = tOut.uscita.chcodimp; + i.seriale_chiamata = tOut.uscita.chserial; + i.ora_ini_rapportino = Convert.ToString(tOut.uscita.chora); + i.min_ini_rapportino = Convert.ToString(tOut.uscita.chmin); + + tOut.chiamate_Out = await presaInCarico(i, token); + + _chiamate = getChiamateByTenant(ten); + + var callNew = await _chiamate.Where( + t => t.chserial.Equals(serialeUpdate) + ).FirstAsync(); + + o = fillChiamateOut(callNew, ten); + + tOut.err_status_code = StatiRisposta.Ok; + return StatusCode(StatusCodes.Status200OK, o); + + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + tOut.uscita.err_title = ex.Message; + tOut.uscita.err_detail = errmsg; + tOut.uscita.err_status_code = StatiRisposta.ErroreInterno; + return StatusCode(StatusCodes.Status500InternalServerError, tOut.uscita); + } + //return tOut; + } + + private Output_Ricerca fillOutputRicerca(Commessa i) + { + Output_Ricerca r = new Output_Ricerca(); + + r.codice_commessa = i.lacodcom; + r.desc_commessa = i.lacodcom; + + r.tipo_cliente_comm = i.latipcli; + r.cliente_comm = i.lacodcli; + r.dt_fine_validita = i.ladatchi; + r.codice_impianto = i.imcodimp; + r.imindiri1 = i.imindiri1; + r.imindiri2 = i.imindiri2; + r.imindiri3 = i.imindiri3; + r.imindiri4 = i.imindiri4; + r.imindiri5 = i.imindiri5; + r.desc_cliente_comm = i.andescri; + r.cap_impianto = i.imcodcap; + r.provincia_impianto = i.improvin; + + StringBuilder sb = new StringBuilder(); + string commessa = !string.IsNullOrEmpty(i.lacodcom) ? i.lacodcom.Trim() : string.Empty; + if(!string.IsNullOrEmpty(i.ladeslav)) + { + commessa = commessa + " - " +i.ladeslav.Trim(); + } + + sb.AppendLine("Comm: " + commessa); + + if (!string.IsNullOrEmpty(i.imcodimp)) + { + sb.AppendLine("Imp: " + i.imcodimp); + } + + if (!string.IsNullOrEmpty(i.andescri)) + { + string appoCli = i.andescri; + if(appoCli.Length>25) + { + appoCli = appoCli.Substring(0, 25); + } + sb.AppendLine("Cli " + appoCli); + } + r.itemList = sb.ToString(); + sb.Clear(); + + return r; + } + private Output_Ricerca fillOutputRicercaVT(CommesseVT i) + { + Output_Ricerca r = new Output_Ricerca(); + + r.codice_commessa = i.lacodcom; + r.desc_commessa = i.lacodcom; + + r.tipo_cliente_comm = i.latipcli; + r.cliente_comm = i.lacodcli; + r.dt_fine_validita = i.ladatchi; + r.codice_impianto = i.imcodimp; + r.imindiri1 = i.imindiri1; + r.imindiri2 = i.imindiri2; + r.imindiri3 = i.imindiri3; + r.imindiri4 = i.imindiri4; + r.imindiri5 = i.imindiri5; + r.desc_cliente_comm = i.andescri; + r.cap_impianto = i.imcodcap; + r.provincia_impianto = i.improvin; + + StringBuilder sb = new StringBuilder(); + string commessa = !string.IsNullOrEmpty(i.lacodcom) ? i.lacodcom.Trim() : string.Empty; + if (!string.IsNullOrEmpty(i.ladeslav)) + { + commessa = commessa + " - " + i.ladeslav.Trim(); + } + + sb.AppendLine("Comm: " + commessa); + + if (!string.IsNullOrEmpty(i.imcodimp)) + { + sb.AppendLine("Imp: " + i.imcodimp); + } + + if (!string.IsNullOrEmpty(i.andescri)) + { + string appoCli = i.andescri; + appoCli = appoCli.Substring(0, 25); + sb.AppendLine("Cli " + appoCli); + } + r.itemList = sb.ToString(); + sb.Clear(); + + return r; + } + private Output_Ricerca fillOutputRicercaByImpianto(Impianto i) + { + Output_Ricerca r = new Output_Ricerca(); + + r.codice_impianto = i.imcodimp; + r.descrizione_impianto = i.imdescri; + r.imindiri1 = i.imindiri1; + r.imindiri2 = i.imindiri2; + r.imindiri3 = i.imindiri3; + r.imindiri4 = i.imindiri4; + r.imindiri5 = i.imindiri5; + r.cap_impianto = i.imcodcap; + r.provincia_impianto = i.improvin; + + StringBuilder sb = new StringBuilder(); + + sb.AppendLine("Imp: " + i.imcodimp); + + if (!string.IsNullOrEmpty(i.imdescri)) + { + sb.AppendLine( i.imdescri); + } + string via = !string.IsNullOrEmpty(i.imindiri1) ? i.imindiri1.Trim() : string.Empty; + string indiri = !string.IsNullOrEmpty(i.imindiri2) ? i.imindiri2.Trim() : string.Empty; + string num = string.Empty; + if (i.imindiri3 != null && i.imindiri3.Value > 0) + { + num = i.imindiri3.ToString().Trim(); + } + string num2 = !string.IsNullOrEmpty(i.imindiri4) ? i.imindiri4.Trim() : string.Empty; + string sca = !string.IsNullOrEmpty(i.imindiri5) ? i.imindiri5.Trim() : string.Empty; + + string appo = string.Empty; + appo = via + indiri + num + num2 + sca; + + if (!string.IsNullOrEmpty(via)) appo=appo+via; + if (!string.IsNullOrEmpty(indiri)) appo = appo + " "+indiri; + if (!string.IsNullOrEmpty(num)) appo = appo + " ," + num; + if (!string.IsNullOrEmpty(num2)) appo = appo + " Int: " + num2; + if (!string.IsNullOrEmpty(sca)) appo = appo + " Scala: " + sca; + + + sb.AppendLine(appo); + if (!string.IsNullOrEmpty( i.imrefref)) + { + sb.AppendLine(i.imrefref); + } + r.itemList = sb.ToString(); + sb.Clear(); + + return r; + } + private ChiamateTable fillChiamateTableInput(ChiamateTable i, string codimp, string tecnico, string tenant, string serialeLetto, string progLetto, string seriale_commessa) + { + + DateTime adesso = DateTime.Now; + ChiamateTable o = new ChiamateTable(); + string codiceEsercizio = string.Empty; + codiceEsercizio = Convert.ToString(adesso.Year); + string nuovoSeriale = string.Empty; + nuovoSeriale = getNuovoSerialeChiamata(serialeLetto); + + o.chcodazi = i.chcodazi; + o.chserial = nuovoSeriale; + //o.chtipo = i.chtipo; scrivo tipo A per distinguere le chiamate normali da quelle inserite da app + o.chtipo = "X"; + o.chcodese = codiceEsercizio; + o.chnumero = Convert.ToDecimal(progLetto)+1; + o.chdata = adesso.Date; + o.chora = adesso.Hour; + o.chmin = adesso.Minute; + o.chopins = i.chopins; + o.chopass = i.chopass; + o.chopchi = i.chopchi; + o.chcodimp = codimp; + o.chaziimp = i.chaziimp; + + o.chtchiam = tecnico; + o.chtmanut = i.chtmanut; + o.chstato = "C"; + o.chdtapp = adesso.Date; + o.choraapi = adesso.Hour; + o.chminapi = adesso.Minute; + o.choraapf = adesso.Hour + 1; + o.chminapf = adesso.Minute; + + //TODO il seriale della commessa lo devo avere e lo memorizzo qui + //per ora prendo quello che scrivo sul template; poi quello che mi viene passato dalla ricerca + o.chrifer = seriale_commessa; + o.chtelef = i.chtelef; + + o.chcodseg = i.chcodseg; + o.chstopi = i.chstopi; + o.chnote = i.chnote; + o.chdtass = adesso.Date; + o.chorass = adesso.Hour; + o.chminass = adesso.Minute; + o.chdtchi = i.chdtchi; + o.chorachi = i.chorachi; + o.chminchi = i.chminchi; + o.chdtlin = i.chdtlin; + o.chorali = i.chorali; + o.chminli = i.chminli; + + o.chdtlfi = i.chdtlfi; + o.choralf = i.choralf; + o.chminlf = i.chminlf; + o.chvalfat = i.chvalfat; + o.cpccchk = getCpccchk(10); + o.chnrap1 = i.chnrap1; + o.chsrap1 = i.chsrap1; + o.chnrap2 = i.chnrap2; + o.chsrap2 = i.chsrap2; + o.chmodrac = i.chmodrac; + o.chprgann = i.chprgann; + o.chserchi = i.chserchi; + o.chdesfat = i.chdesfat; + o.chdessup = i.chdessup; + o.chimpofa = i.chimpofa; + o.chserdoc = i.chserdoc; + o.chimpmat = i.chimpmat; + o.chimpman = i.chimpman; + o.chperman = i.chperman; + o.chfleste = i.chfleste; + o.chflstim = i.chflstim; + o.chserext = i.chserext; + o.chrifiutata = i.chrifiutata; + + //o.chincarico = i.chincarico; + //o.chserweb = i.chserweb; + //o.chinlinea = i.chinlinea; + //o.chtelesan = i.chtelesan; + + return o; + } + private async Task fillChiamateTableTaskManagerInput(ChiamateTableTaskManager i, string codimp, string tecnico, string tenant, string serialeLetto, string progLetto, string seriale_commessa) + { + + DateTime adesso = DateTime.Now; + ChiamateTableTaskManager o = new ChiamateTableTaskManager(); + string codiceEsercizio = string.Empty; + codiceEsercizio = Convert.ToString(adesso.Year); + string nuovoSeriale = string.Empty; + nuovoSeriale = getNuovoSerialeChiamata(serialeLetto); + + o.chcodazi = i.chcodazi; + o.chserial = nuovoSeriale; + //o.chtipo = i.chtipo; scrivo tipo A per distinguere le chiamate normali da quelle inserite da app + o.chtipo = "X"; + o.chcodese = codiceEsercizio; + o.chnumero = Convert.ToDecimal(progLetto) + 1; + o.chdata = adesso.Date; + o.chora = adesso.Hour; + o.chmin = adesso.Minute; + o.chopins = i.chopins; + o.chopass = i.chopass; + o.chopchi = i.chopchi; + o.chcodimp = codimp; + o.chaziimp = i.chaziimp; + + o.chtchiam = tecnico; + o.chtmanut = i.chtmanut; + o.chstato = "C"; + o.chdtapp = adesso.Date; + o.choraapi = adesso.Hour; + o.chminapi = adesso.Minute; + o.choraapf = adesso.Hour + 1; + o.chminapf = adesso.Minute; + + //TODO il seriale della commessa lo devo avere e lo memorizzo qui + //per ora prendo quello che scrivo sul template; poi quello che mi viene passato dalla ricerca + o.chrifer = seriale_commessa; + o.chtelef = i.chtelef; + + o.chcodseg = i.chcodseg; + o.chstopi = i.chstopi; + o.chnote = i.chnote; + o.chdtass = adesso.Date; + o.chorass = adesso.Hour; + o.chminass = adesso.Minute; + o.chdtchi = i.chdtchi; + o.chorachi = i.chorachi; + o.chminchi = i.chminchi; + o.chdtlin = i.chdtlin; + o.chorali = i.chorali; + o.chminli = i.chminli; + + o.chdtlfi = i.chdtlfi; + o.choralf = i.choralf; + o.chminlf = i.chminlf; + o.chvalfat = i.chvalfat; + o.cpccchk = getCpccchk(10); + o.chnrap1 = i.chnrap1; + o.chsrap1 = i.chsrap1; + o.chnrap2 = i.chnrap2; + o.chsrap2 = i.chsrap2; + o.chmodrac = i.chmodrac; + o.chprgann = i.chprgann; + o.chserchi = i.chserchi; + o.chdesfat = i.chdesfat; + o.chdessup = i.chdessup; + o.chimpofa = i.chimpofa; + o.chserdoc = i.chserdoc; + o.chimpmat = i.chimpmat; + o.chimpman = i.chimpman; + o.chperman = i.chperman; + o.chfleste = i.chfleste; + o.chflstim = i.chflstim; + o.chserext = i.chserext; + o.chrifiutata = i.chrifiutata; + + //o.chincarico = i.chincarico; + //o.chserweb = i.chserweb; + //o.chinlinea = i.chinlinea; + //o.chtelesan = i.chtelesan; + string _cli = string.Empty; + _cli = await getCodCliByImp(tenant, codimp); + o.cliente = _cli; + return o; + } + private async Task getCodCliByImp(string tenant, string codiceImpianto) + { + string codiceCliente = string.Empty; + //switch (tenant) + //{ + // case Clienti.LW: + // _impianto = _LW_impianti.Impia; + // break; + // case Clienti.Syscom: + // _impianto = _Sys_impianti.Impia; + // break; + // default: + // // code block + // break; + //} + var i = await _impianto.Where(t => t.imcodimp!=null && t.imcodimp.Equals(codiceImpianto)).ToListAsync(); + if(i!=null) + { + codiceCliente = i.First().imultcli; + } + + return codiceCliente; + } + private string getNuovoSerialeChiamata(string lastSerial) + { + //lunghezza 10 fissa + string new_serial = string.Empty; + + int ser = int.Parse(lastSerial); + ser++; + new_serial = ser.ToString(); + new_serial = new_serial.PadLeft(10, '0'); + + return new_serial; + } + private async Task inserimentoChiamata2(string ten, string tecnico, string codimp, string serLetto, string progLetto, string codice_commessa, string ten2,string tenConf) + { + Chiamate_out c = new Chiamate_out(); + + + string serialeTemplate = string.Empty; + + ChiamateTable t = new ChiamateTable(); + ChiamateTableTaskManager tm = new ChiamateTableTaskManager(); + var tt = new List(); + var ttTaskManager = new List(); + if (string.IsNullOrEmpty(ten)) + { + ten = tenConf; + } + if (!ten.Equals(ten2)) + { + ten = ten2; + } + _chiatable = getChiamateTableByTenant(ten); + //_chiatableTaskManager = getChiamateTableTaskManagerByTenant(ten); + + _confLette = await readConf(ten2); + serialeTemplate = _confLette.seriale_template_chi; + tt = await _chiatable.Where(t => t.chcodazi != null && t.chcodazi.Equals(ten2) && t.chserial != null && t.chserial.Equals(serialeTemplate)).ToListAsync(); + + //switch (ten) + //{ + // case Clienti.VT: + // _confLette = await readConf(ten2); + // serialeTemplate = _confLette.seriale_template_chi; + // tt = await _chiatable.Where(t => t.chcodazi != null && t.chcodazi.Equals(ten2) && t.chserial != null && t.chserial.Equals(serialeTemplate)).ToListAsync(); + // break; + // case Clienti.LW: + // case Clienti.Syscom: + + // _confLette = await readConf(tenConf); + // serialeTemplate = _confLette.seriale_template_chi; + // ttTaskManager = await _chiatableTaskManager.Where(t => t.chcodazi != null && t.chcodazi.Equals(ten2) && t.chserial != null && t.chserial.Equals(serialeTemplate)).ToListAsync(); + // break; + // default: + // _confLette = await readConf(tenConf); + // serialeTemplate = _confLette.seriale_template_chi; + // tt = await _chiatable.Where(t => t.chcodazi != null && t.chcodazi.Equals(ten) && t.chserial != null && t.chserial.Equals(serialeTemplate)).ToListAsync(); + // break; + //} + + t = fillChiamateTableInput(tt.FirstOrDefault(), codimp, tecnico, ten, serLetto, progLetto, codice_commessa); + + using (var tranVT = _VT_chiatable.Database.BeginTransaction()) + { + await _VT_chiatable.Chi.AddAsync(t); + await _VT_chiatable.SaveChangesAsync(); + tranVT.Commit(); + } + + //switch (ten) + //{ + // case Clienti.Marrocco: + // case Clienti.Gitoga: + // case Clienti.Lifta: + // //GITOGA e LIFTA sono comunque dentro il db di Marrocco + // t = fillChiamateTableInput(tt.FirstOrDefault(), codimp, tecnico, ten,serLetto,progLetto, codice_commessa); + // using (var tranMarro = _Marro_chiatable.Database.BeginTransaction()) + // { + // await _Marro_chiatable.Chi.AddAsync(t); + // await _Marro_chiatable.SaveChangesAsync(); + // tranMarro.Commit(); + // } + // break; + + // case Clienti.Siet: + // t = fillChiamateTableInput(tt.FirstOrDefault(), codimp, tecnico, ten, serLetto, progLetto, codice_commessa); + // using (var tranSiet = _Siet_chiatable.Database.BeginTransaction()) + // { + // await _Siet_chiatable.Chi.AddAsync(t); + // await _Siet_chiatable.SaveChangesAsync(); + // tranSiet.Commit(); + // } + // break; + // case Clienti.Sicilia: + // t = fillChiamateTableInput(tt.FirstOrDefault(), codimp, tecnico, ten, serLetto, progLetto, codice_commessa); + + // using (var tranSicilia = _Sicilia_chiatable.Database.BeginTransaction()) + // { + // await _Sicilia_chiatable.Chi.AddAsync(t); + // await _Sicilia_chiatable.SaveChangesAsync(); + // tranSicilia.Commit(); + // } + // break; + // case Clienti.PMS: + // t = fillChiamateTableInput(tt.FirstOrDefault(), codimp, tecnico, ten, serLetto, progLetto, codice_commessa); + + // using (var tranPMS = _Pms_chiatable.Database.BeginTransaction()) + // { + // await _Pms_chiatable.Chi.AddAsync(t); + // await _Pms_chiatable.SaveChangesAsync(); + // tranPMS.Commit(); + // } + // break; + // case Clienti.VT: + + // t = fillChiamateTableInput(tt.FirstOrDefault(), codimp, tecnico, ten, serLetto, progLetto, codice_commessa); + + // using (var tranVT = _VT_chiatable.Database.BeginTransaction()) + // { + // await _VT_chiatable.Chi.AddAsync(t); + // await _VT_chiatable.SaveChangesAsync(); + // tranVT.Commit(); + // } + // break; + // case Clienti.Tedesco: + // t = fillChiamateTableInput(tt.FirstOrDefault(), codimp, tecnico, ten, serLetto, progLetto, codice_commessa); + + // using (var tranTedes = _Tedes_chiatable.Database.BeginTransaction()) + // { + // await _Tedes_chiatable.Chi.AddAsync(t); + // await _Tedes_chiatable.SaveChangesAsync(); + // tranTedes.Commit(); + // } + // break; + // case Clienti.LW: + + // tm = await fillChiamateTableTaskManagerInput(ttTaskManager.FirstOrDefault(), codimp, tecnico, ten, serLetto, progLetto, codice_commessa); + + // using (var tranLW = _LW_chiatable.Database.BeginTransaction()) + // { + // await _LW_chiatable.Chi.AddAsync(tm); + // await _LW_chiatable.SaveChangesAsync(); + // tranLW.Commit(); + // } + // break; + // case Clienti.Syscom: + // tm = await fillChiamateTableTaskManagerInput(ttTaskManager.FirstOrDefault(), codimp, tecnico, ten, serLetto, progLetto, codice_commessa); + + // using (var transys = _Sys_chiatable.Database.BeginTransaction()) + // { + // await _Sys_chiatable.Chi.AddAsync(tm); + // await _Sys_chiatable.SaveChangesAsync(); + // transys.Commit(); + // } + // break; + + // default: + + // break; + //} + + _chiamate = getChiamateByTenant(ten); + //switch (ten) + //{ + // case Clienti.LW: + // case Clienti.Syscom: + // var chiamata_newTM = _chiamate.Where(x => x.chserial.Equals(tm.chserial)).FirstOrDefault(); + // c = fillChiamateOut(chiamata_newTM, ten); + // break; + + // default: + // var chiamata_new = _chiamate.Where(x => x.chserial.Equals(t.chserial)).FirstOrDefault(); + // c = fillChiamateOut(chiamata_new, ten); + // break; + //} + + return c; + } + private async Task presaInCarico(Input model, string token) + { + string ten = getClaimValueByToken(token, "tenant"); + string ten2 = getClaimValueByToken(token, "tenant2"); + string tenConf = getClaimValueByToken(token, "tenantConfigurazioni"); + if (string.IsNullOrEmpty(ten)) + { + ten = tenConf; + } + Chiamate_out calltec_out = new Chiamate_out(); + Chiamate calltec = new Chiamate(); + if (await checkChiamataPresa(ten, model.seriale_chiamata, TipoRapportino.PresaInCarico,ten2) == 0) + { + + _confLette = await readConf(tenConf); + string newSerial = string.Empty; + newSerial = await getSeriale(token); + Rapp_New r = await fillRappNewByInput(model, token, newSerial, _confLette); + + //switch (ten) + //{ + // case Clienti.Marrocco: + // using (var transaction = _Marro_rapp.Database.BeginTransaction()) + // { + // await _Marro_rapp.Rapps.AddAsync(r); + // await _Marro_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + // break; + // case Clienti.Ferrari: + // using (var transaction = _Ferra_rapp.Database.BeginTransaction()) + // { + // await _Ferra_rapp.Rapps.AddAsync(r); + // await _Ferra_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + // break; + // case Clienti.Sicilia: + // using (var transaction = _Sicilia_rapp.Database.BeginTransaction()) + // { + // await _Sicilia_rapp.Rapps.AddAsync(r); + // await _Sicilia_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + // break; + // case Clienti.Discovery: + // using (var transaction = _Disco_rapp.Database.BeginTransaction()) + // { + // await _Disco_rapp.Rapps.AddAsync(r); + // await _Disco_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + // break; + // case Clienti.Sarom: + // using (var transaction = _Sarom_rapp.Database.BeginTransaction()) + // { + // await _Sarom_rapp.Rapps.AddAsync(r); + // await _Sarom_rapp.SaveChangesAsync(); + // transaction.Commit(); + // } + // break; + // case Clienti.Gitoga: + // using (var transactionGit = _Gitoga_rapp.Database.BeginTransaction()) + // { + // await _Gitoga_rapp.Rapps.AddAsync(r); + // await _Gitoga_rapp.SaveChangesAsync(); + // transactionGit.Commit(); + // } + // break; + // case Clienti.Lifta: + // using (var transactionLif = _Lifta_rapp.Database.BeginTransaction()) + // { + // await _Lifta_rapp.Rapps.AddAsync(r); + // await _Lifta_rapp.SaveChangesAsync(); + // transactionLif.Commit(); + // } + // break; + // case Clienti.Siet: + // using (var transactionSiet = _Siet_rapp.Database.BeginTransaction()) + // { + // await _Siet_rapp.Rapps.AddAsync(r); + // await _Siet_rapp.SaveChangesAsync(); + // transactionSiet.Commit(); + // } + // break; + // case Clienti.PMS: + // using (var transactionPMS = _Pms_rapp.Database.BeginTransaction()) + // { + // await _Pms_rapp.Rapps.AddAsync(r); + // await _Pms_rapp.SaveChangesAsync(); + // transactionPMS.Commit(); + // } + // break; + // case Clienti.VT: + // using (var transactionvt = _VT_rapptable.Database.BeginTransaction()) + // { + // await _VT_rapptable.Rapps.AddAsync(r); + // await _VT_rapptable.SaveChangesAsync(); + // transactionvt.Commit(); + // } + // break; + // default: + // break; + //} + + using (var transactionvt = _VT_rapptable.Database.BeginTransaction()) + { + await _VT_rapptable.Rapps.AddAsync(r); + await _VT_rapptable.SaveChangesAsync(); + transactionvt.Commit(); + } + + //restituisco la chiamata + calltec = await getChiamataBySerial(model.seriale_chiamata, token); + calltec_out = fillChiamateOut(calltec, ten); + calltec.err_status_code = StatiRisposta.Ok; + + } + else + { + calltec_out.err_title = "Impossibile prendere in carico la chiamata"; + calltec_out.err_detail = "Chiamata precendentemente presa in carico: " + model.seriale_chiamata; + calltec_out.err_status_code = StatiRisposta.OperazioneNonAmmessa; + } + return calltec_out; + } + private async Task aggiornaSeriale(string tenant, string nuovoSeriale) + { + ChiamataSeriale_out cso = new ChiamataSeriale_out(); + + string cpcccchk = getCpccchk(10); + //switch (tenant) + //{ + // case Clienti.Marrocco: + // using (var transaction = _Marro_chiaser.Database.BeginTransaction()) + // { + // ChiamataSeriale entitasViewModel = _chiamateser.Where(p => p.piditta.Equals(tenant)).FirstOrDefault(); + // entitasViewModel.pinumero = nuovoSeriale; + // entitasViewModel.cpccchk = cpcccchk; + // _Marro_chiaser.Entry(entitasViewModel).State = EntityState.Modified; + // await _Marro_chiaser.SaveChangesAsync(); + // transaction.Commit(); + // } + // break; + // case Clienti.Gitoga: + // using (var transaction = _Gitoga_chiaser.Database.BeginTransaction()) + // { + // ChiamataSeriale entitasViewModel = _chiamateser.Where(p => p.piditta.Equals(tenant)).FirstOrDefault(); + // entitasViewModel.pinumero = nuovoSeriale; + // entitasViewModel.cpccchk = cpcccchk; + // _Gitoga_chiaser.Entry(entitasViewModel).State = EntityState.Modified; + // await _Gitoga_chiaser.SaveChangesAsync(); + // transaction.Commit(); + // } + // break; + // case Clienti.Lifta: + // using (var transaction = _Lifta_chiaser.Database.BeginTransaction()) + // { + // ChiamataSeriale entitasViewModel = _chiamateser.Where(p => p.piditta.Equals(tenant)).FirstOrDefault(); + // entitasViewModel.pinumero = nuovoSeriale; + // entitasViewModel.cpccchk = cpcccchk; + // _Lifta_chiaser.Entry(entitasViewModel).State = EntityState.Modified; + // await _Lifta_chiaser.SaveChangesAsync(); + // transaction.Commit(); + // } + // break; + // case Clienti.Siet: + // using (var transactionSiet = _Siet_chiaser.Database.BeginTransaction()) + // { + // ChiamataSeriale entitasViewModel = _chiamateser.Where(p => p.piditta.Equals(tenant)).FirstOrDefault(); + // entitasViewModel.pinumero = nuovoSeriale; + // entitasViewModel.cpccchk = cpcccchk; + // _Siet_chiaser.Entry(entitasViewModel).State = EntityState.Modified; + // await _Siet_chiaser.SaveChangesAsync(); + // transactionSiet.Commit(); + // } + // break; + // case Clienti.Sicilia: + // using (var transactionSicilia = _Sicilia_chiaser.Database.BeginTransaction()) + // { + // ChiamataSeriale entitasViewModel = _chiamateser.Where(p => p.piditta.Equals(tenant)).FirstOrDefault(); + // entitasViewModel.pinumero = nuovoSeriale; + // entitasViewModel.cpccchk = cpcccchk; + // _Sicilia_chiaser.Entry(entitasViewModel).State = EntityState.Modified; + // await _Sicilia_chiaser.SaveChangesAsync(); + // transactionSicilia.Commit(); + // } + // break; + + //default: + // break; + //} + return cso; + } + private async Task aggiornaprogressivo(string tenant, float nuovoProg,string tablecode,string warncode) + { + Prog_out cso = new Prog_out(); + + string cpcccchk = getCpccchk(10); + //switch (tenant) + //{ + // case Clienti.Marrocco: + // case Clienti.Gitoga: + // case Clienti.Lifta: + // using (var transaction = _Marro_chiaprog.Database.BeginTransaction()) + // { + // Prog entitasViewModel = _chiamateprogr.Where(p => p.tablecode.Equals(tablecode)&& p.warncode.Equals(warncode)).FirstOrDefault(); + // entitasViewModel.autonum = nuovoProg; + // entitasViewModel.cpccchk = cpcccchk; + + // _Marro_chiaprog.Entry(entitasViewModel).State = EntityState.Modified; + // await _Marro_chiaprog.SaveChangesAsync(); + // transaction.Commit(); + // } + // break; + // case Clienti.Siet: + // using (var transactionSiet = _Siet_chiaprog.Database.BeginTransaction()) + // { + // Prog entitasViewModel = _chiamateprogr.Where(p => p.tablecode.Equals(tablecode) && p.warncode.Equals(warncode)).FirstOrDefault(); + // entitasViewModel.autonum = nuovoProg; + // entitasViewModel.cpccchk = cpcccchk; + + // _Siet_chiaprog.Entry(entitasViewModel).State = EntityState.Modified; + // await _Siet_chiaprog.SaveChangesAsync(); + // transactionSiet.Commit(); + // } + // break; + // case Clienti.Sicilia: + // using (var transactionSicilia = _Sicilia_cpwarn.Database.BeginTransaction()) + // { + // _cpwarns = getCpwarnByTenant(tenant); + // Prog2 entitasViewModel = _cpwarns.Where(p => p.tablecode.Equals(tablecode) && p.warncode.Equals(warncode)).FirstOrDefault(); + // entitasViewModel.autonum = Convert.ToDecimal( nuovoProg); + // entitasViewModel.cpccchk = cpcccchk; + + // _Sicilia_cpwarn.Entry(entitasViewModel).State = EntityState.Modified; + // await _Sicilia_cpwarn.SaveChangesAsync(); + // transactionSicilia.Commit(); + // } + // break; + + // default: + // break; + //} + return cso; + } + private async Task aggiornaprogressivoDecimal(string tenant, decimal? nuovoProg, string tablecode, string warncode) + { + Prog_out cso = new Prog_out(); + + string cpcccchk = getCpccchk(10); + //switch (tenant) + //{ + // case Clienti.Sicilia: + // using (var transactionSicilia = _Sicilia_cpwarn.Database.BeginTransaction()) + // { + // _cpwarns = getCpwarnByTenant(tenant); + // Prog2 entitasViewModel = _cpwarns.Where(p => p.tablecode.Equals(tablecode) && p.warncode.Equals(warncode)).FirstOrDefault(); + // entitasViewModel.autonum = nuovoProg; + // entitasViewModel.cpccchk = cpcccchk; + + // _Sicilia_cpwarn.Entry(entitasViewModel).State = EntityState.Modified; + // await _Sicilia_cpwarn.SaveChangesAsync(); + // transactionSicilia.Commit(); + // } + // break; + // case Clienti.PMS: + // using (var transactionPMS = _PMS_cpwarn.Database.BeginTransaction()) + // { + // _cpwarns = getCpwarnByTenant(tenant); + // Prog2 entitasViewModel = _cpwarns.Where(p => p.tablecode.Equals(tablecode) && p.warncode.Equals(warncode)).FirstOrDefault(); + // entitasViewModel.autonum = nuovoProg; + // entitasViewModel.cpccchk = cpcccchk; + + // _PMS_cpwarn.Entry(entitasViewModel).State = EntityState.Modified; + // await _PMS_cpwarn.SaveChangesAsync(); + // transactionPMS.Commit(); + // } + // break; + // case Clienti.Syscom: + // using (var transactionSys = _Sys_cpwarn.Database.BeginTransaction()) + // { + // _cpwarns = getCpwarnByTenant(tenant); + // Prog2 entitasViewModel = _cpwarns.Where(p => p.tablecode.Equals(tablecode) && p.warncode.Equals(warncode)).FirstOrDefault(); + // entitasViewModel.autonum = nuovoProg; + // entitasViewModel.cpccchk = cpcccchk; + + // _Sys_cpwarn.Entry(entitasViewModel).State = EntityState.Modified; + // await _Sys_cpwarn.SaveChangesAsync(); + // transactionSys.Commit(); + // } + // break; + // case Clienti.LW: + // using (var transactionLW = _LW_cpwarn.Database.BeginTransaction()) + // { + // _cpwarns = getCpwarnByTenant(tenant); + // Prog2 entitasViewModel = _cpwarns.Where(p => p.tablecode.Equals(tablecode) && p.warncode.Equals(warncode)).FirstOrDefault(); + // entitasViewModel.autonum = nuovoProg; + // entitasViewModel.cpccchk = cpcccchk; + + // _LW_cpwarn.Entry(entitasViewModel).State = EntityState.Modified; + // await _LW_cpwarn.SaveChangesAsync(); + // transactionLW.Commit(); + // } + // break; + // default: + // break; + //} + return cso; + } + private async Task aggiornaprogressivoVT(string tenant, string tipoProg, int valore) + { + Progressivo_out cso = new Progressivo_out(); + + string cpcccchk = getCpccchk(10); + Progressivo model = new Progressivo(); + //model.tipo_prog = tipoProg; + //model.azienda = tenant; + //model.val_prog = valore; + var p =await _VT_progtable.progr.Where(t => t.azienda.Equals(tenant) && t.tipo_prog.Equals(tipoProg)).ToListAsync(); + model = p.FirstOrDefault(); + model.val_prog = valore; + try + { + + using (var transaction = _VT_progtable.Database.BeginTransaction()) + { + _VT_progtable.Entry(model).State = EntityState.Modified; + await _VT_progtable.SaveChangesAsync(); + transaction.Commit(); + } + + cso.azienda = model.azienda; + cso.tipo_prog = model.tipo_prog; + cso.val_prog = model.val_prog; + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + cso.err_detail = errmsg; + + } + return cso; + } + private async Task leggiCpwarnSeriale(string tenant, string tablecode) + { + //autorun float + //_chiamateprogr = getChiamateProgressiviByTenant(tenant); + var cpwarn = await _chiamateprogr.Where(p => p.tablecode != null && p.tablecode.Contains(tablecode) && p.tablecode.Contains(tenant)).FirstAsync(); + return cpwarn; + } + private async Task leggiCpwarnProg(string tenant, string tablecode, string codiceEsercizio) + { + //autorun float + //_chiamateprogr = getChiamateProgressiviByTenant(tenant); + var cpwarn = await _chiamateprogr.Where(p => p.tablecode != null && p.tablecode.Contains(tablecode) && p.tablecode.Contains(codiceEsercizio) && p.tablecode.Contains(tenant)).FirstAsync(); + return cpwarn; + } + private async Task leggiCpwarnProgDecimal(string tenant, string tablecode, string codiceEsercizio) + { + string _ten = tenant; + var str = tenant; + str = Regex.Replace(str, @" ", ""); + //autorun decimal + //_cpwarns = getCpwarnByTenant(tenant); + var cpwarn = await _cpwarns.Where(p => p.tablecode != null && p.tablecode.Contains(tablecode) && p.tablecode.Contains(codiceEsercizio) && p.tablecode.Contains(tenant.TrimEnd())).FirstAsync(); + return cpwarn; + } + private async Task leggiCpwarnSerialeDecimal(string tenant, string tablecode) + { + //autorun decimal + //_cpwarns = getCpwarnByTenant(tenant); + var cpwarn = await _cpwarns.Where(p => p.tablecode != null && p.tablecode.Contains(tablecode) && p.tablecode.Contains(tenant.TrimEnd())).FirstAsync(); + return cpwarn; + } + private async Task leggiSerialeByCodCommessa(string tenant, string codice_commessa) + { + string serial = string.Empty; + //_comm = getCommesseByTenant(tenant); + var ser = await _comm.Where(p => p.lacodcom!=null && p.lacodcom.Equals(codice_commessa)).FirstAsync(); + serial = ser.laserial; + return serial; + } + private async Task leggiSerialeByCodCommessaVT(string tenant, string codice_commessa) + { + string serial = string.Empty; + _VT_Commesse = _VT_Comm.Comm; + + //var t = await _VT_Commesse.Where(t => t.lacodazi.Equals(tenant)).ToListAsync(); + var ser = await _VT_Commesse.Where(p => p.lacodcom != null && p.lacodcom.Equals(codice_commessa) && p.lacodazi.Equals(tenant)).FirstAsync(); + serial = ser.laserial; + return serial; + } + #endregion + + #region VIRTUAL TASK + /// Login iniziale return:ActionResult + [HttpPost("loginTechnicalVT")] + public async Task> loginTechnicalVT([FromBody] LoginModel model) + { + LoginOut o = new LoginOut(); + try + { + if (string.IsNullOrEmpty(model.Username) || string.IsNullOrEmpty(model.Password)) + { + o.err_detail = "Username e Password non possono essere vuoti."; + o.err_title = "Username e Password non possono essere vuoti."; + o.err_status_code = StatiRisposta.OperazioneNonAmmessa; + return StatusCode(StatusCodes.Status200OK, o); + } + else + { + _tecnici = _VT_tecnici.Tecnici; + + //var tecnico = await _tecnici.Where(t => t.tcuser.Trim() == model.Username.Trim() && t.tcpwd.Trim() == model.Password.Trim() && t.tccodazi == model.Tenant).Take(1).ToListAsync(); + //var tecnico = await _tecnici.Where(t => t.tcuser == model.Username && t.tcpwd == model.Password && t.tccodazi == model.Tenant).Take(1).ToListAsync(); + var tecnico = await _tecnici.Where(t => t.tcuser == model.Username && t.tcpwd == model.Password && t.tccodute==1).Take(1).ToListAsync(); + if (tecnico == null || (tecnico != null && tecnico.Count == 0)) + { + o.err_detail = "Username o Password non trovati."; + o.err_title = "Username o Password non trovati."; + o.err_status_code = StatiRisposta.OperazioneNonAmmessa; + return StatusCode(StatusCodes.Status404NotFound, o); + } + else + { + var authClaims = new List + { + new Claim(ClaimTypes.Name, model.Username), + new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()), + new Claim("tenant", model.Tenant), + new Claim("tenant2", tecnico.First().tccodazi), + new Claim("tccodice", tecnico.First().tccodice), + new Claim("superAdmin", !string.IsNullOrEmpty (tecnico.First().tcsuper)?tecnico.First().tcsuper:"N"), + }; + var authSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["JWT:Secret"])); + var token = new JwtSecurityToken( + issuer: _configuration["JWT:ValidIssuer"], + audience: _configuration["JWT:ValidAudience"], + expires: DateTime.Now.AddMonths(3), + claims: authClaims, + signingCredentials: new SigningCredentials(authSigningKey, SecurityAlgorithms.HmacSha256) + ); + string tok = new JwtSecurityTokenHandler().WriteToken(token); + _token = tok; + + + o.Tok = tok; + o.Tcdescri = tecnico.First().Tcdescri; + o.Tccodice = tecnico.First().tccodice; + o.Tcsuper = tecnico.First().tcsuper; + o.Tenant = tecnico.First().tccodazi; + //o.tciden = tecnico.First().tciden; + + Conf cc = new Conf(); + //le configurazioni devono essere lette per tenant 2 non per VIRTU + //_confLette = await readConf(model.Tenant); + _confLette = await readConf(tecnico.First().tccodazi); + + cc.abilita_naviga = _confLette.abilita_naviga; + cc.abilita_telefona = _confLette.abilita_telefona; + cc.abilita_chiamate = _confLette.abilita_chiamate; + cc.abilita_barcode = _confLette.abilita_barcode; + + cc.abilita_manutenzioni = _confLette.abilita_manutenzioni; + cc.chiamate_accetta = _confLette.chiamate_accetta; + cc.chiamate_accetta_barcode = _confLette.chiamate_accetta_barcode; + cc.chiamate_accetta_offline = _confLette.chiamate_accetta_offline; + cc.chiamate_rifiuta = _confLette.chiamate_rifiuta; + cc.chiamate_rifiuta_barcode = _confLette.chiamate_rifiuta_barcode; + cc.chiamate_rifiuta_offline = _confLette.chiamate_rifiuta_offline; + cc.chiamate_chiudi_barcode = _confLette.chiamate_chiudi_barcode; + cc.chiamate_firma_barcode = _confLette.chiamate_firma_barcode; + cc.chiamate_chiudi_salva_barcode = _confLette.chiamate_chiudi_salva_barcode; + cc.chiamate_chiudi_salva_offline = _confLette.chiamate_chiudi_salva_offline; + + cc.manutenzioni_accetta = _confLette.manutenzioni_accetta; + cc.manutenzioni_rifiuta = _confLette.manutenzioni_rifiuta; + cc.manutenzioni_accetta_barcode = _confLette.manutenzioni_accetta_barcode; + cc.manutenzioni_accetta_offline = _confLette.manutenzioni_accetta_offline; + cc.manutenzioni_chiudi_barcode = _confLette.manutenzioni_chiudi_barcode; + cc.manutenzioni_firma_barcode = _confLette.manutenzioni_firma_barcode; + cc.manutenzioni_chiudi_salva_barcode = _confLette.manutenzioni_chiudi_salva_barcode; + cc.manutenzioni_chiudi_salva_offline = _confLette.manutenzioni_chiudi_salva_offline; + + cc.dpi_checkbox = _confLette.dpi_checkbox; + + cc.anagrafica = _confLette.anagrafica; + cc.stato_finale = _confLette.stato_finale; + cc.descrizione_intervento = _confLette.descrizione_intervento; + cc.composizione_impianto = _confLette.composizione_impianto; + cc.note_intervento = _confLette.note_intervento; + cc.esito_intervento = _confLette.esito_intervento; + cc.ora_inizio_fine = _confLette.ora_inizio_fine; + cc.materiali = _confLette.materiali; + cc.diritto_chiamata = _confLette.diritto_chiamata; + cc.manodopera = _confLette.manodopera; + cc.spese_viaggio = _confLette.spese_viaggio; + cc.tipo_pagamento = _confLette.tipo_pagamento; + cc.note_pagamento = _confLette.note_pagamento; + cc.causale = _confLette.causale; + + cc.time_sheet = _confLette.time_sheet; + cc.time_sheet_offline = _confLette.time_sheet_offline; + cc.costo_orario = _confLette.costo_orario; + cc.ftp_port = _confLette.ftp_port; + cc.manutenzioni_rifiuta_barcode = _confLette.manutenzioni_rifiuta_barcode; + cc.storico = _confLette.storico; + cc.storico_tecnico = _confLette.storico_tecnico; + cc.storico_interventi = _confLette.storico_interventi; + cc.storico_impianto = _confLette.storico_impianto; + cc.ricerca_impianti = _confLette.ricerca_impianti; + + cc.ora_inizio_fine_automatica = _confLette.ora_inizio_fine_automatica; + cc.stampa_orario = _confLette.stampa_orario; + cc.intestazione_stampa = _confLette.intestazione_stampa; + cc.seriale_template_chi = _confLette.seriale_template_chi; + cc.abilita_inserimento_chiamate = _confLette.abilita_inserimento_chiamate; + + o.Config = cc; + + //cerco le aziende collegate + List l = new List(); + string ten = model.Tenant; + bool bCercaAzcoll = false; + //switch (ten) + //{ + // case Clienti.Discovery: + // bCercaAzcoll = true; + // break; + //} + if (bCercaAzcoll) + { + //_azi_coll = getAziendeRifByTenant(ten); + var a = await _azi_coll.Where(t => t.piazihoc != null && t.piazihoc.Equals(ten) && t.picodtec != null && t.picodtec.Trim().Equals(o.Tccodice.Trim())).ToListAsync(); + if (a.Any()) + { + + foreach (AziendaRif appo in a) + { + string logo = !string.IsNullOrEmpty(appo.pilogurl) ? appo.pilogurl.Trim() : string.Empty; + //var uriBuilder = new UriBuilder(Request.Scheme, Request.Host.Host, Request.Host.Port ?? -1); + //logo = uriBuilder + logo; + appo.pilogurl = logo; + l.Add(appo); + } + + } + } + o.aziende_coll = l; + } + return StatusCode(StatusCodes.Status200OK, o); + } + } + catch (Exception ex) + { + string err = "Errore: " + ex.Message; + o.err_detail = err; + o.err_title = err; + o.err_status_code = StatiRisposta.ErroreInterno; + return StatusCode(StatusCodes.Status500InternalServerError, o); + } + + } + + /// VIRTUAL TASK: Tecnici per azienda + [HttpGet("tecniciList")] + public async Task>> tecniciList(string token) + { + try + { + List ilist = new List(); + string ten = getClaimValueByToken(token, "tenant2"); + string tecnico = getClaimValueByToken(token, "tccodice"); + _tecTable = _VT_tectable.Tectable; + + + var t = await _tecTable.Where( + t => t.tccodazi.Equals(ten) + && t.tcuser != null + ).ToListAsync(); + + foreach (TecniciTable ch in t) + { + ilist.Add(ch); + } + return StatusCode(StatusCodes.Status200OK, ilist); + } + catch (Exception ex) + { + string err = "Errore: " + ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, err); + } + } + /// VIRTUAL TASK: Tecnici per azienda + [HttpGet("tecniciListAll")] + public async Task>> tecniciListAll(string usr,string pwd) + { + try + { + List ilist = new List(); + _tecTable = _VT_tectable.Tectable; + var t = await _tecTable.Where( + t => t.tcpwd.Equals(pwd) + && t.tcuser.Equals(usr) + ).ToListAsync(); + + foreach (TecniciTable ch in t) + { + ilist.Add(ch); + } + return StatusCode(StatusCodes.Status200OK, ilist); + } + catch (Exception ex) + { + string err = "Errore: " + ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, err); + } + } + /// VIRTUAL TASK: crea un tecnico return:ActionResult + [HttpPost] + [Route("tecnici/add")] + public async Task> addtecnico([FromBody] TecniciTable model, string token) + { + string ten = getClaimValueByToken(token, "tenant2"); + model.tccodazi = ten; + try + { + using (var transaction = _VT_tectable.Database.BeginTransaction()) + { + await _VT_tectable.Tectable.AddAsync(model); + await _VT_tectable.SaveChangesAsync(); + transaction.Commit(); + } + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + + /// VIRTUAL TASK: cancella un tecnico return:ActionResult + [HttpPost] + [Route("tecnici/del")] + public async Task> deltecnico(string codice, string token) + { + string ten = getClaimValueByToken(token, "tenant2"); + _tecTable = _VT_tectable.Tectable; + var t = await _tecTable.Where(t => t.tccodice == codice && t.tccodazi == ten).ToListAsync(); + + TecniciTable model = t.First(); + model.tcdatobs = DateTime.Now; + try + { + using (var transaction = _VT_tectable.Database.BeginTransaction()) + { + _VT_tectable.Entry(model).State = EntityState.Modified; + await _VT_tectable.SaveChangesAsync(); + transaction.Commit(); + } + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + + /// VIRTUAL TASK: modifica un tecnico return:ActionResult + [HttpPost] + [Route("tecnici/mod")] + public async Task> modtecnico([FromBody] TecniciTable model, string token) + { + string ten = getClaimValueByToken(token, "tenant2"); + model.tccodazi = ten; + try + { + using (var transaction = _VT_tectable.Database.BeginTransaction()) + { + _VT_tectable.Entry(model).State = EntityState.Modified; + await _VT_tectable.SaveChangesAsync(); + transaction.Commit(); + } + + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + + + /// VIRTUAL TASK: Codici di chiusura + [HttpGet("chiusureVtList")] + public async Task>> chiusureVtList(string token) + { + try + { + List ilist = new List(); + string ten = getClaimValueByToken(token, "tenant2"); + string tecnico = getClaimValueByToken(token, "tccodice"); + + _chiuTable = _VT_chiutable.Chiutable; + + var t = await _chiuTable.Where(t => t.cccodazi.Equals(ten) && t.codtobso==null).ToListAsync(); + + foreach (ChiusureTable ch in t) + { + ilist.Add(ch); + } + return StatusCode(StatusCodes.Status200OK, ilist); + } + catch (Exception ex) + { + string err = "Errore: " + ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, err); + } + } + + /// VIRTUAL TASK: crea un codice chiusura return:ActionResult + [HttpPost] + [Route("chiusure/add")] + public async Task> addchiusura([FromBody] ChiusureTable model, string token) + { + string ten = getClaimValueByToken(token, "tenant2"); + model.cccodazi = ten; + try + { + using (var transaction = _VT_chiutable.Database.BeginTransaction()) + { + await _VT_chiutable.Chiutable.AddAsync(model); + await _VT_chiutable.SaveChangesAsync(); + transaction.Commit(); + } + + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + + /// VIRTUAL TASK: cancella un codice chiusura return:ActionResult + [HttpPost] + [Route("chiusure/del")] + public async Task> delchiusura(string codice, string token) + { + string ten = getClaimValueByToken(token, "tenant2"); + _chiuTable = _VT_chiutable.Chiutable; + var cod = await _chiuTable.Where(t => t.cccodice == codice && t.cccodazi == ten ).ToListAsync(); + + ChiusureTable model = cod.First(); + model.codtobso = DateTime.Now; + try + { + //using (var transaction = _VT_chiutable.Database.BeginTransaction()) + //{ + // _VT_chiutable.Entry(model).State = EntityState.Deleted; + // await _VT_chiutable.SaveChangesAsync(); + // transaction.Commit(); + //} + using (var transaction = _VT_chiutable.Database.BeginTransaction()) + { + _VT_chiutable.Entry(model).State = EntityState.Modified; + await _VT_chiutable.SaveChangesAsync(); + transaction.Commit(); + } + + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + + /// VIRTUAL TASK: modifica un codice chiusura return:ActionResult + [HttpPost] + [Route("chiusure/mod")] + public async Task> modchiusura([FromBody] ChiusureTable model, string token) + { + string ten = getClaimValueByToken(token, "tenant2"); + model.cccodazi = ten; + try + { + using (var transaction = _VT_chiutable.Database.BeginTransaction()) + { + _VT_chiutable.Entry(model).State = EntityState.Modified; + await _VT_chiutable.SaveChangesAsync(); + transaction.Commit(); + } + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + + /// VIRTUAL TASK: anagrafiche clienti per azienda + [HttpGet("anagraficheList")] + public async Task>> anagraficheList(string token) + { + try + { + List ilist = new List(); + string ten = getClaimValueByToken(token, "tenant2"); + string tecnico = getClaimValueByToken(token, "tccodice"); + _clientiVT = _VT_anag.Anag; + + var t = await _clientiVT.Where( + t => t.antipcon.Equals("C") + && t.andtobso == null + && t.ancodazi.Equals(ten) + ).ToListAsync(); + + foreach (AnagVT ch in t) + { + ilist.Add(ch); + } + return StatusCode(StatusCodes.Status200OK, ilist); + } + catch (Exception ex) + { + string err = "Errore: " + ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, err); + } + } + + /// VIRTUAL TASK: crea una anagrafica return:ActionResult + [HttpPost] + [Route("anagrafiche/add")] + public async Task> addAnagrafica([FromBody] AnagTable model, string token) + { + string ten = getClaimValueByToken(token, "tenant2"); + + model.annumlis = null; + model.andtobso = null; + model.ancodazi = ten; + try + { + using (var transaction = _VT_anagtable.Database.BeginTransaction()) + { + await _VT_anagtable.Anagtable.AddAsync(model); + await _VT_anagtable.SaveChangesAsync(); + transaction.Commit(); + } + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + /// VIRTUAL TASK: crea una anagrafica return:ActionResult + [HttpPost] + [Route("anagrafiche/addCommImp")] + public async Task> addAnagraficaCommessaImpianto([FromBody] AnagCommImp model, string token) + { + string ten = getClaimValueByToken(token, "tenant2"); + + model.cli.annumlis = null; + model.cli.andtobso = null; + model.cli.ancodazi = ten; + model.cli.antipcon = "C"; + model.imp.imcodazi = ten; + string ten2 = getClaimValueByToken(token, "tenant2"); + model.comm.latipcli = "C"; + model.comm.lacodazi = ten2; + + + try + { + + var strategy = _VT_anagtable.Database.CreateExecutionStrategy(); + await strategy.ExecuteAsync(async () => + { + + using var scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled); + await _VT_anagtable.Anagtable.AddAsync(model.cli); + await _VT_impiatable.Impia.AddAsync(model.imp); + await _VT_CommTable.CommTable.AddAsync(model.comm); + + await _VT_anagtable.SaveChangesAsync(); + await _VT_impiatable.SaveChangesAsync(); + await _VT_CommTable.SaveChangesAsync(); + + scope.Complete(); + }); + + + //await _VT_anagtable.Anagtable.AddAsync(model.cli); + //await _VT_anagtable.SaveChangesAsync(); + + ////step 1: INSERISCO IMPIANTO + //_VT_impiatable.Database.UseTransaction(transaction.GetDbTransaction()); + //await _VT_impiatable.Impia.AddAsync(model.imp); + //await _VT_impiatable.SaveChangesAsync(); + + ////step 2: inserimento commessa + //_VT_CommTable.Database.UseTransaction(transaction.GetDbTransaction()); + //await _VT_CommTable.CommTable.AddAsync(model.comm); + //await _VT_CommTable.SaveChangesAsync(); + + //transaction.Commit(); + + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + /// VIRTUAL TASK: modifica una anagrafica return:ActionResult + [HttpPost] + [Route("anagrafiche/mod")] + public async Task> modAnagrafica([FromBody] AnagTable model, string token) + { + string ten = getClaimValueByToken(token, "tenant2"); + model.ancodazi = ten; + try + { + using (var transaction = _VT_anagtable.Database.BeginTransaction()) + { + _VT_anagtable.Entry(model).State = EntityState.Modified; + await _VT_anagtable.SaveChangesAsync(); + transaction.Commit(); + } + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + + /// VIRTUAL TASK: cancella una anagrafica (valorizza data obsolescenza) return:ActionResult + [HttpPost] + [Route("anagrafiche/del")] + public async Task> delAnagrafica([FromBody] AnagTable model, string token) + { + string ten = getClaimValueByToken(token, "tenant2"); + model.ancodazi = ten; + model.andtobso = DateTime.Now; + try + { + using (var transaction = _VT_anagtable.Database.BeginTransaction()) + { + _VT_anagtable.Entry(model).State = EntityState.Modified; + await _VT_anagtable.SaveChangesAsync(); + transaction.Commit(); + } + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + + /// VIRTUAL TASK: rapp_new per azienda + [HttpGet("rappnewList")] + public async Task>> rappnewList(string token) + { + try + { + List ilist = new List(); + string ten = getClaimValueByToken(token, "tenant2"); + string tecnico = getClaimValueByToken(token, "tccodice"); + _rapp_new_view = _VT_rapp.Rapps; + + var t = await _rapp_new_view.Where(t => t.azienda_chiamata.Equals(ten)).Take(100).ToListAsync(); + + foreach (Rapp_New_View ch in t) + { + ilist.Add(ch); + } + return StatusCode(StatusCodes.Status200OK, ilist); + } + catch (Exception ex) + { + string err = "Errore: " + ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, err); + } + } + + /// VIRTUAL TASK: crea una rappnew return:ActionResult + [HttpPost] + [Route("rappnew/add")] + public async Task> addRappnew([FromBody] Rapp_New model, string token) + { + string ten = getClaimValueByToken(token, "tenant2"); + model.azienda_chiamata = ten; + model.azienda_impianto = ten; + model.azienda_tecnico = ten; + try + { + using (var transaction = _VT_rapptable.Database.BeginTransaction()) + { + await _VT_rapptable.Rapps.AddAsync(model); + await _VT_rapptable.SaveChangesAsync(); + transaction.Commit(); + } + + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + + /// VIRTUAL TASK: modifica una anagrafica return:ActionResult + [HttpPost] + [Route("rappnew/mod")] + public async Task> modRappnew([FromBody] Rapp_New model, string token) + { + string ten = getClaimValueByToken(token, "tenant2"); + model.azienda_chiamata = ten; + model.azienda_impianto = ten; + model.azienda_tecnico = ten; + try + { + using (var transaction = _VT_rapptable.Database.BeginTransaction()) + { + _VT_rapptable.Entry(model).State = EntityState.Modified; + await _VT_rapptable.SaveChangesAsync(); + transaction.Commit(); + } + + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + + /// VIRTUAL TASK: cancella una rapp_new return:ActionResult + [HttpPost] + [Route("rappnew/del")] + public async Task> delRappnew(string serialeRapportino, string token) + { + string ten = getClaimValueByToken(token, "tenant2"); + _rapp_new = _VT_rapptable.Rapps; + var t = await _rapp_new.Where(t => t.seriale_rapportino.Equals(serialeRapportino) && t.azienda_chiamata.Equals(ten)).ToListAsync(); + + Rapp_New model = t.First(); + try + { + //using (var transaction = _Marro_rapp.Database.BeginTransaction()) + //{ + // _Marro_rapp.Entry(model).State = EntityState.Deleted; + // await _Marro_rapp.SaveChangesAsync(); + // transaction.Commit(); + //} + + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + + /// VIRTUAL TASK: impianti per azienda + [HttpGet("impiantiList")] + public async Task>> impiantiList(string token) + { + try + { + List ilist = new List(); + string ten = getClaimValueByToken(token, "tenant2"); + string tecnico = getClaimValueByToken(token, "tccodice"); + _impianto = _VT_impia.Impia; + + var t = await _impianto.Where(t => t.imcodazi.Equals(ten)).ToListAsync(); + + foreach (Impianto ch in t) + { + ilist.Add(ch); + } + return StatusCode(StatusCodes.Status200OK, ilist); + } + catch (Exception ex) + { + string err = "Errore: " + ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, err); + } + } + + /// VIRTUAL TASK: impianti per azienda + [HttpGet("impiantiListMngr")] + public async Task>> impiantiListMngr(string token) + { + try + { + List ilist = new List(); + string ten = getClaimValueByToken(token, "tenant2"); + string tecnico = getClaimValueByToken(token, "tccodice"); + _impianto = _VT_impiaMngr.Impia; + + var t = await _impianto.Where(t => t.imcodazi.Equals(ten)).ToListAsync(); + + foreach (Impianto ch in t) + { + ilist.Add(ch); + } + return StatusCode(StatusCodes.Status200OK, ilist); + } + catch (Exception ex) + { + string err = "Errore: " + ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, err); + } + } + + /// VIRTUAL TASK: crea un impianto return:ActionResult + [HttpPost] + [Route("impianti/add")] + public async Task> addImpianto([FromBody] ImpiantoTable model, string token) + { + string ten = getClaimValueByToken(token, "tenant2"); + model.imcodazi = ten; + + try + { + using (var transaction = _VT_impiatable.Database.BeginTransaction()) + { + await _VT_impiatable.Impia.AddAsync(model); + await _VT_impiatable.SaveChangesAsync(); + transaction.Commit(); + } + + + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + //co_out.err_title = ex.Message; + //co_out.err_detail = errmsg; + //co_out.err_status_code = StatiRisposta.ErroreInterno; + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + //return co_out; + } + + /// VIRTUAL TASK: modifica un impianto return:ActionResult + [HttpPost] + [Route("impianto/mod")] + public async Task> modImpianto([FromBody] ImpiantoTable model, string token) + { + string ten = getClaimValueByToken(token, "tenant2"); + model.imcodazi = ten; + + try + { + using (var transaction = _VT_impiatable.Database.BeginTransaction()) + { + _VT_impiatable.Entry(model).State = EntityState.Modified; + await _VT_impiatable.SaveChangesAsync(); + transaction.Commit(); + } + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + + /// VIRTUAL TASK: cancella un impianto return:ActionResult + [HttpPost] + [Route("impianto/del")] + public async Task> delImpianto(string imcodimp, string token) + { + string ten = getClaimValueByToken(token, "tenant2"); + _impiaTable = _VT_impiatable.Impia; + var t = await _impiaTable.Where(t => t.imcodimp.Equals(imcodimp) && t.imcodazi.Equals(ten)).ToListAsync(); + + ImpiantoTable model = t.First(); + model.imfinatt = DateTime.Now; + try + { + using (var transaction = _VT_impiatable.Database.BeginTransaction()) + { + _VT_impiatable.Entry(model).State = EntityState.Modified; + await _VT_impiatable.SaveChangesAsync(); + transaction.Commit(); + } + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + + /// VIRTUAL TASK: chiamate per azienda + [HttpGet("chiamateList")] + public async Task>> chiamateList(string token) + { + try + { + List ilist = new List(); + string ten = getClaimValueByToken(token, "tenant2"); + string tecnico = getClaimValueByToken(token, "tccodice"); + _chiamate = _VT_chia.Chiamate; + + var t = await _chiamate.Where(t => t.chcodazi.Equals(ten)).ToListAsync(); + + foreach (Chiamate ch in t) + { + ilist.Add(ch); + } + return StatusCode(StatusCodes.Status200OK, ilist); + } + catch (Exception ex) + { + string err = "Errore: " + ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, err); + } + } + + /// VIRTUAL TASK: chiamate per azienda + [HttpGet("chiamateListMngr")] + public async Task>> chiamateListMngr(string token) + { + try + { + List ilist = new List(); + string ten = getClaimValueByToken(token, "tenant2"); + string tecnico = getClaimValueByToken(token, "tccodice"); + _chiamate = _VT_chiaMngr.Chiamate; + + var t = await _chiamate.Where(t => t.chcodazi.Equals(ten)).ToListAsync(); + + foreach (Chiamate ch in t) + { + ilist.Add(ch); + } + return StatusCode(StatusCodes.Status200OK, ilist); + } + catch (Exception ex) + { + string err = "Errore: " + ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, err); + } + } + + /// VIRTUAL TASK: crea una chiamata return:ActionResult + [HttpPost] + [Route("chiamata/add")] + public async Task> addChiamata([FromBody] ChiamateTable model, string token) + { + string ten = getClaimValueByToken(token, "tenant2"); + model.chcodazi = ten; + try + { + using (var transaction = _VT_chiatable.Database.BeginTransaction()) + { + await _VT_chiatable.Chi.AddAsync(model); + await _VT_chiatable.SaveChangesAsync(); + transaction.Commit(); + } + + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + + /// VIRTUAL TASK: modifica una chiamata return:ActionResult + [HttpPost] + [Route("chiamata/mod")] + public async Task> modChiamata([FromBody] ChiamateTable model, string token) + { + string ten = getClaimValueByToken(token, "tenant2"); + model.chcodazi = ten; + + try + { + using (var transaction = _VT_chiatable.Database.BeginTransaction()) + { + _VT_chiatable.Entry(model).State = EntityState.Modified; + await _VT_chiatable.SaveChangesAsync(); + transaction.Commit(); + } + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + //co_out.err_title = ex.Message; + //co_out.err_detail = errmsg; + //co_out.err_status_code = StatiRisposta.ErroreInterno; + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + //return co_out; + } + + /// VIRTUAL TASK: cancella una chiamata return:ActionResult + [HttpPost] + [Route("chiamata/del")] + public async Task> delChiamata(string chserial, string token) + { + string ten = getClaimValueByToken(token, "tenant2"); + _chiatable = _VT_chiatable.Chi; + var t = await _chiatable.Where(t => t.chserial.Equals(chserial) && t.chcodazi.Equals(ten)).ToListAsync(); + + ChiamateTable model = t.First(); + try + { + using (var transaction = _VT_chiatable.Database.BeginTransaction()) + { + _VT_chiatable.Entry(model).State = EntityState.Deleted; + await _VT_chiatable.SaveChangesAsync(); + transaction.Commit(); + } + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + + /// VIRTUAL TASK: progressivi per azienda + [HttpGet("progressiviList")] + public async Task>> progressiviList(string token) + { + try + { + List ilist = new List(); + string ten = getClaimValueByToken(token, "tenant2"); + string tecnico = getClaimValueByToken(token, "tccodice"); + _VT_prog = _VT_progtable.progr; + + var t = await _VT_prog.Where(t => t.azienda.Equals(ten)).ToListAsync(); + + foreach (Progressivo ch in t) + { + ilist.Add(ch); + } + return StatusCode(StatusCodes.Status200OK, ilist); + } + catch (Exception ex) + { + string err = "Errore: " + ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, err); + } + } + + /// VIRTUAL TASK: modifica un progressivo return:ActionResult + [HttpPost] + [Route("progressivo/mod")] + public async Task> modProgressivo([FromBody] Progressivo model, string token) + { + string ten = getClaimValueByToken(token, "tenant2"); + model.azienda = ten; + try + { + using (var transaction = _VT_progtable.Database.BeginTransaction()) + { + _VT_progtable.Entry(model).State = EntityState.Modified; + await _VT_progtable.SaveChangesAsync(); + transaction.Commit(); + } + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + + /// VIRTUAL TASK: dati azienda + [HttpGet("aziendeList")] + public async Task>> aziendeList(string token) + { + try + { + List ilist = new List(); + string ten = getClaimValueByToken(token, "tenant2"); + string tecnico = getClaimValueByToken(token, "tccodice"); + _azi_coll = _VT_azi.Azi; + + var t = await _azi_coll.Where(t => t.pirifazi.Equals(ten)).ToListAsync(); + + foreach (AziendaRif ch in t) + { + ilist.Add(ch); + } + return StatusCode(StatusCodes.Status200OK, ilist); + } + catch (Exception ex) + { + string err = "Errore: " + ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, err); + } + } + + /// VIRTUAL TASK: crea una azienda return:ActionResult + [HttpPost] + [Route("azienda/add")] + public async Task> addAzienda([FromBody] AziendaRif model, string token) + { + string ten = getClaimValueByToken(token, "tenant"); + string ten2 = getClaimValueByToken(token, "tenant2"); + model.piazihoc = ten; + model.pirifazi = ten2; + _confLette = await readConf(ten2); + try + { + using (var transaction = _VT_azi.Database.BeginTransaction()) + { + await _VT_azi.Azi.AddAsync(model); + await _VT_azi.SaveChangesAsync(); + transaction.Commit(); + } + + + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + + /// VIRTUAL TASK: modifica un progressivo return:ActionResult + [HttpPost] + [Route("azienda/mod")] + public async Task> modAzienda([FromBody] AziendaRif model, string token) + { + string ten = getClaimValueByToken(token, "tenant"); + string ten2 = getClaimValueByToken(token, "tenant2"); + model.piazihoc = ten; + model.pirifazi = ten2; + try + { + using (var transaction = _VT_azi.Database.BeginTransaction()) + { + _VT_azi.Entry(model).State = EntityState.Modified; + await _VT_azi.SaveChangesAsync(); + transaction.Commit(); + } + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + + /// VIRTUAL TASK: cancella una azienda return:ActionResult + [HttpPost] + [Route("azienda/del")] + public async Task> delAzienda(string picodtec, string token) + { + string ten = getClaimValueByToken(token, "tenant"); + string ten2 = getClaimValueByToken(token, "tenant2"); + + _azi_coll = _VT_azi.Azi; + var t = await _azi_coll.Where(t => t.piazihoc.Equals(ten) && t.pirifazi.Equals(ten2) && t.picodtec.Equals(picodtec)).ToListAsync(); + + AziendaRif model = t.First(); + try + { + using (var transaction = _VT_azi.Database.BeginTransaction()) + { + _VT_azi.Entry(model).State = EntityState.Deleted; + await _VT_azi.SaveChangesAsync(); + transaction.Commit(); + } + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + + + /// VIRTUAL TASK: registrazioni + [HttpGet("registrazioniList")] + public async Task>> registrazioniList() + { + try + { + List ilist = new List(); + //string ten = getClaimValueByToken(token, "tenant2"); + //string tecnico = getClaimValueByToken(token, "tccodice"); + _VT_regi = _VT_reg.Reg; + + //var t = await _azi_coll.Where(t => t.pirifazi.Equals(ten)).ToListAsync(); + + foreach (Registrazione ch in _VT_regi) + { + ilist.Add(ch); + } + return StatusCode(StatusCodes.Status200OK, ilist); + } + catch (Exception ex) + { + string err = "Errore: " + ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, err); + } + } + + /// VIRTUAL TASK: crea una registrazione return:ActionResult + [HttpPost] + [Route("registrazioni/add")] + public async Task> addRegistrazione([FromBody] Registrazione model) + { + try + { + using (var transaction = _VT_reg.Database.BeginTransaction()) + { + await _VT_reg.Reg.AddAsync(model); + await _VT_reg.SaveChangesAsync(); + transaction.Commit(); + } + + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + + /// VIRTUAL TASK: modifica una registrazione return:ActionResult + [HttpPost] + [Route("registrazioni/mod")] + public async Task> modregistrazione([FromBody] Registrazione model) + { + //string ten = getClaimValueByToken(token, "tenant"); + //string ten2 = getClaimValueByToken(token, "tenant2"); + //model.piazihoc = ten; + //model.pirifazi = ten2; + try + { + using (var transaction = _VT_reg.Database.BeginTransaction()) + { + _VT_reg.Entry(model).State = EntityState.Modified; + await _VT_reg.SaveChangesAsync(); + transaction.Commit(); + } + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + + /// VIRTUAL TASK: cancella una registrazione return:ActionResult + [HttpPost] + [Route("registrazioni/del")] + public async Task> delRegistrazione(int Id) + { + //string ten = getClaimValueByToken(token, "tenant"); + //string ten2 = getClaimValueByToken(token, "tenant2"); + + _VT_regi = _VT_reg.Reg; + var t = await _VT_regi.Where(t => t.Id==Id ).ToListAsync(); + + Registrazione model = t.First(); + try + { + using (var transaction = _VT_reg.Database.BeginTransaction()) + { + _VT_reg.Entry(model).State = EntityState.Deleted; + await _VT_reg.SaveChangesAsync(); + transaction.Commit(); + } + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + + /// VIRTUAL TASK: registrazioni + [HttpGet("AziendePresentiList")] + public async Task>> AziendePresentiList() + { + try + { + List ilist = new List(); + //string ten = getClaimValueByToken(token, "tenant2"); + //string tecnico = getClaimValueByToken(token, "tccodice"); + _VT_AziPresenti = _VT_AziPres.Aziende; + + //var t = await _azi_coll.Where(t => t.pirifazi.Equals(ten)).ToListAsync(); + + foreach (AziendaPres ch in _VT_AziPresenti) + { + ilist.Add(ch); + } + return StatusCode(StatusCodes.Status200OK, ilist); + } + catch (Exception ex) + { + string err = "Errore: " + ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, err); + } + } + + + /// VIRTUAL TASK: commesse + [HttpGet("commesseList")] + public async Task>> commesseList(string token) + { + try + { + List ilist = new List(); + string ten = getClaimValueByToken(token, "tenant2"); + //string tecnico = getClaimValueByToken(token, "tccodice"); + _VT_Commesse = _VT_Comm.Comm; + + var t = await _VT_Commesse.Where(t => t.lacodazi.Equals(ten)).ToListAsync(); + + foreach (CommesseVT ch in t) + { + ilist.Add(ch); + } + return StatusCode(StatusCodes.Status200OK, ilist); + } + catch (Exception ex) + { + string err = "Errore: " + ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, err); + } + } + + /// VIRTUAL TASK: crea una commessa return:ActionResult + [HttpPost] + [Route("commesseVT/add")] + public async Task> addCommessaVT([FromBody] CommesseVT_Table model, string token) + { + string ten = getClaimValueByToken(token, "tenant"); + string ten2 = getClaimValueByToken(token, "tenant2"); + model.latipcli = "C"; + model.lacodazi = ten2; + try + { + using (var transaction = _VT_CommTable.Database.BeginTransaction()) + { + await _VT_CommTable.CommTable.AddAsync(model); + await _VT_CommTable.SaveChangesAsync(); + transaction.Commit(); + } + + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + + /// VIRTUAL TASK: modifica una commessa return:ActionResult + [HttpPost] + [Route("commesseVT/mod")] + public async Task> modCommessaVT([FromBody] CommesseVT_Table model, string token) + { + string ten = getClaimValueByToken(token, "tenant"); + string ten2 = getClaimValueByToken(token, "tenant2"); + + try + { + using (var transaction = _VT_CommTable.Database.BeginTransaction()) + { + _VT_CommTable.Entry(model).State = EntityState.Modified; + await _VT_CommTable.SaveChangesAsync(); + transaction.Commit(); + } + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + + /// VIRTUAL TASK: cancella una commessa (valorizza data obsolescenza) return:ActionResult + [HttpPost] + [Route("commesseVT/del")] + public async Task> delCommessaVT([FromBody] CommesseVT_Table model, string token) + { + string ten = getClaimValueByToken(token, "tenant2"); + + model.ladatchi = DateTime.Now; + try + { + using (var transaction = _VT_CommTable.Database.BeginTransaction()) + { + _VT_CommTable.Entry(model).State = EntityState.Modified; + await _VT_CommTable.SaveChangesAsync(); + transaction.Commit(); + } + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + + + /// VIRTUAL TASK: dati Azienda + [HttpGet("datiaziendaList")] + public async Task>> datiaziendaList(string token) + { + try + { + List ilist = new List(); + string ten = getClaimValueByToken(token, "tenant2"); + //string tecnico = getClaimValueByToken(token, "tccodice"); + _VT_DatiAzi =_VT_DatiAzienda.Dati; + + var t = await _VT_DatiAzi.Where(t => t.azienda.Equals(ten)).ToListAsync(); + + foreach (DatiAzienda ch in t) + { + ilist.Add(ch); + } + return StatusCode(StatusCodes.Status200OK, ilist); + } + catch (Exception ex) + { + string err = "Errore: " + ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, err); + } + } + + /// VIRTUAL TASK: crea dati azienda return:ActionResult + [HttpPost] + [Route("datiazienda/add")] + public async Task> addDatiAzienda([FromBody] DatiAzienda model, string token) + { + string ten = getClaimValueByToken(token, "tenant"); + string ten2 = getClaimValueByToken(token, "tenant2"); + _confLette = await readConf(ten2); + //model.latipcli = "C"; + //model.lacodazi = ten2; + try + { + using (var transaction = _VT_DatiAzienda.Database.BeginTransaction()) + { + await _VT_DatiAzienda.Dati.AddAsync(model); + await _VT_DatiAzienda.SaveChangesAsync(); + transaction.Commit(); + } + //devo fare la copia del logo e metterlo nella cartella del server a partire dal logo scritto in tabella + model = await readImgAndSave(model.azienda, model.tecnico, _confLette.path_buoni); + + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + + /// VIRTUAL TASK: modifica una commessa return:ActionResult + [HttpPost] + [Route("datiazienda/mod")] + public async Task> modDatiAzienda([FromBody] DatiAzienda model, string token) + { + string ten = getClaimValueByToken(token, "tenant"); + string ten2 = getClaimValueByToken(token, "tenant2"); + + try + { + using (var transaction = _VT_DatiAzienda.Database.BeginTransaction()) + { + _VT_DatiAzienda.Entry(model).State = EntityState.Modified; + await _VT_DatiAzienda.SaveChangesAsync(); + transaction.Commit(); + } + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + + /// VIRTUAL TASK: cancella una dati azienda return:ActionResult + [HttpPost] + [Route("datiazienda/del")] + public async Task> delDatiAzienda(string azienda, string tecnico) + { + //string ten = getClaimValueByToken(token, "tenant"); + //string ten2 = getClaimValueByToken(token, "tenant2"); + + _VT_DatiAzi = _VT_DatiAzienda.Dati; + var t = await _VT_DatiAzi.Where(t => t.azienda.Equals(azienda) && t.tecnico.Equals(tecnico)).ToListAsync(); + + DatiAzienda model = t.First(); + try + { + using (var transaction = _VT_DatiAzienda.Database.BeginTransaction()) + { + _VT_DatiAzienda.Entry(model).State = EntityState.Deleted; + await _VT_DatiAzienda.SaveChangesAsync(); + transaction.Commit(); + } + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + + /// VIRTUAL TASK: cancella una dati azienda return:ActionResult + [HttpPost] + [Route("datiazienda/saveFile")] + public async Task> saveFileDatiAzienda(string azienda, string tecnico, string pathSrv) + { + DatiAzienda model=new DatiAzienda(); + try + { + model = await readImgAndSave(azienda,tecnico,pathSrv); + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + + /// VIRTUAL TASK: legge e salva su server return:ActionResult + private async Task readImgAndSave(string azienda, string tecnico, string pathSrv) + { + _VT_DatiAzi = _VT_DatiAzienda.Dati; + var t = await _VT_DatiAzi.Where(t => t.azienda.Equals(azienda) && t.tecnico.Equals(tecnico)).ToListAsync(); + + DatiAzienda model = t.First(); + + string path = string.Empty; + string nomeFile = string.Empty; + nomeFile = getNomeFile(model.url_logo); + + path = pathSrv; + path = path +@"\"+azienda+ @"\" + nomeFile; + SaveByteArrayToFileWithBinaryWriter(model.logo, path); + return model; + } + + /// VIRTUAL TASK: salvataggio su disco + public static void SaveByteArrayToFileWithBinaryWriter(byte[] data, string filePath) + { + using var writer = new BinaryWriter(System.IO.File.OpenWrite(filePath)); + writer.Write(data); + //System.IO.File.WriteAllBytes("Foo.txt", data); + } + + /// VIRTUAL TASK: ricava il nome del file a partire dal path web + public static string getNomeFile(string path) + { + string nome = string.Empty; + string[] words = path.Split('/'); + int l = words.Length; + nome = words[l - 1]; + return nome; + } + + /// VIRTUAL TASK: dati Azienda + [HttpGet("rapportiniList")] + public async Task>> rapportiniList(string token) + { + try + { + List ilist = new List(); + string ten = getClaimValueByToken(token, "tenant2"); + //string tecnico = getClaimValueByToken(token, "tccodice"); + _VT_rapport = _VT_Rapportini.Rapportini; + + var t = await _VT_rapport.Where(t => t.azienda_impianto.Equals(ten)).ToListAsync(); + + foreach (Rapportino ch in t) + { + ilist.Add(ch); + } + return StatusCode(StatusCodes.Status200OK, ilist); + } + catch (Exception ex) + { + string err = "Errore: " + ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, err); + } + } + + /// VIRTUAL TASK: inserisce buono + [HttpGet("buoni/add")] + public async Task> addBuoni([FromBody] Buoni model, string token) + { + string ten = getClaimValueByToken(token, "tenant"); + string ten2 = getClaimValueByToken(token, "tenant2"); + model.dt_ins = DateTime.Now; + //model.lacodazi = ten2; + try + { + using (var transaction = _VT_Buoni.Database.BeginTransaction()) + { + await _VT_Buoni.buoni.AddAsync(model); + await _VT_Buoni.SaveChangesAsync(); + transaction.Commit(); + } + + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + + /// VIRTUAL TASK: Timbrature da App + [HttpGet("timbratureList")] + public async Task>> timbratureList(string token) + { + try + { + List ilist = new List(); + string ten = getClaimValueByToken(token, "tenant2"); + string tecnico = getClaimValueByToken(token, "tccodice"); + _timbr = _VT_timbr.Timbr; + + + var t = await _timbr.Where( + t => t.azienda.Equals(ten) + ).ToListAsync(); + + foreach (Timbratura ch in t) + { + ilist.Add(ch); + } + return StatusCode(StatusCodes.Status200OK, ilist); + } + catch (Exception ex) + { + string err = "Errore: " + ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, err); + } + } + + /// VIRTUAL TASK: lista articoli per azienda + [HttpGet("articoliList")] + public async Task>> ArticoliList(string token) + { + try + { + List alist = new List(); + string ten = getClaimValueByToken(token, "tenant2"); + string tecnico = getClaimValueByToken(token, "tccodice"); + _articoliTable = _VT_articoliTable.Articoli; + + var art = await _articoliTable.Where(x => x.Azienda.Equals(ten)).ToListAsync(); + + foreach (Articoli a in art) + { + alist.Add(a); + } + return StatusCode(StatusCodes.Status200OK, alist); + } + catch (Exception ex) + { + string err = "Errore: " + ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, err); ; + } + } + + /// VIRTUAL TASK : crea nuovo articolo return: ActionResult + [HttpPost] + [Route("articolo/add")] + public async Task> addArticolo([FromBody] Articoli model, string token) + { + string ten = getClaimValueByToken(token, "tenant2"); + model.Azienda = ten; + try + { + using (var transaction = _VT_articoliTable.Database.BeginTransaction()) + { + await _VT_articoliTable.Articoli.AddAsync(model); + await _VT_articoliTable.SaveChangesAsync(); + transaction.Commit(); + } + return StatusCode(StatusCodes.Status200OK, model); + + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); ; + } + } + + /// VIRTUAL TASK : modifica articolo return: ActionResult + [HttpPost] + [Route("articolo/mod")] + public async Task> modArticolo([FromBody] Articoli model, string token) + { + string ten = getClaimValueByToken(token, "tenant2"); + model.Azienda = ten; + + try + { + using (var transaction = _VT_articoliTable.Database.BeginTransaction()) + { + _VT_articoliTable.Entry(model).State = EntityState.Modified; + await _VT_articoliTable.SaveChangesAsync(); + transaction.Commit(); + } + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + + /// VIRTUAL TASK: cancella un articolo return:ActionResult + [HttpPost] + [Route("articolo/del")] + public async Task> delArticolo(string artcodice, string token) + { + string ten = getClaimValueByToken(token, "tenant2"); + _articoliTable = _VT_articoliTable.Articoli; + var art = await _articoliTable.Where(a => a.SlCodice.Equals(artcodice) && a.Azienda.Equals(ten)).ToListAsync(); + + Articoli model = art.First(); + model.DataObso = DateTime.Now; + + try + { + using (var transaction = _VT_articoliTable.Database.BeginTransaction()) + { + _VT_articoliTable.Entry(model).State = EntityState.Modified; + await _VT_articoliTable.SaveChangesAsync(); + transaction.Commit(); + } + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + + /// VIRTUAL TASK: lista mag_new per azienda + [HttpGet("VTMagNewList")] + public async Task>> VTMagNewList(string token) + { + try + { + List mnlist = new List(); + string ten = getClaimValueByToken(token, "tenant2"); + string tecnico = getClaimValueByToken(token, "tccodice"); + _magNewVT = _VT_MagNew.MagNewVt; + + var listaMn = await _magNewVT.Where(x => x.Azienda.Equals(ten)).ToListAsync(); + foreach (Vt_Mag_New mg in listaMn) + { + mnlist.Add(mg); + } + return StatusCode(StatusCodes.Status200OK, mnlist); + } + catch (Exception ex) + { + string err = "Errore: " + ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, err); ; + } + } + + /// VIRTUAL TASK: lista Magazzini per azienda + [HttpGet("magazziniVTList")] + public async Task>> MagazziniVTList(string token) + { + try + { + List maglist = new List(); + string ten = getClaimValueByToken(token, "tenant2"); + string tecnico = getClaimValueByToken(token, "tccodice"); + _magazziniVT = _VT_Magazzini.Magazzini; + + var magazziniList = await _magazziniVT.Where(x => x.Azienda.Equals(ten)).ToListAsync(); + foreach (MagazziniVT magaz in magazziniList) + { + maglist.Add(magaz); + } + return StatusCode(StatusCodes.Status200OK, maglist); + } + catch (Exception ex) + { + string err = "Errore: " + ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, err); ; + } + } + + /// VIRTUAL TASK : crea nuovo magazzino return: ActionResult + [HttpPost] + [Route("magazziniVT/add")] + public async Task> addMagazzinoVT([FromBody] MagazziniVT model, string token) + { + string ten = getClaimValueByToken(token, "tenant2"); + model.Azienda = ten; + try + { + using (var transaction = _VT_Magazzini.Database.BeginTransaction()) + { + await _VT_Magazzini.Magazzini.AddAsync(model); + await _VT_Magazzini.SaveChangesAsync(); + transaction.Commit(); + } + return StatusCode(StatusCodes.Status200OK, model); + + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); ; + } + } + + /// VIRTUAL TASK : modifica magazzino return: ActionResult + [HttpPost] + [Route("magazziniVT/mod")] + public async Task> modMagazzino([FromBody] MagazziniVT model, string token) + { + string ten = getClaimValueByToken(token, "tenant2"); + model.Azienda = ten; + + try + { + using (var transaction = _VT_Magazzini.Database.BeginTransaction()) + { + _VT_Magazzini.Entry(model).State = EntityState.Modified; + await _VT_Magazzini.SaveChangesAsync(); + transaction.Commit(); + } + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + + /// VIRTUAL TASK: cancella un magazzino return:ActionResult + [HttpPost] + [Route("magazziniVT/del")] + public async Task> delMagazzino(string magCodice, string token) + { + string ten = getClaimValueByToken(token, "tenant2"); + _magazziniVT = _VT_Magazzini.Magazzini; + var art = await _magazziniVT.Where(a => a.Mgcodmag.Equals(magCodice) && a.Azienda.Equals(ten)).ToListAsync(); + + MagazziniVT model = art.First(); + model.DataObso = DateTime.Now; + + try + { + using (var transaction = _VT_Magazzini.Database.BeginTransaction()) + { + _VT_Magazzini.Entry(model).State = EntityState.Modified; + await _VT_Magazzini.SaveChangesAsync(); + transaction.Commit(); + } + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + + /// VIRTUAL TASK: lista Codici segnalazioni per azienda + [HttpGet("CodiciSegnalazioniVTList")] + public async Task>> CodSegnVTList(string token) + { + try + { + List codSegnlist = new List(); + string ten = getClaimValueByToken(token, "tenant2"); + string tecnico = getClaimValueByToken(token, "tccodice"); + _codSegnVT = _VT_CodSegn.CodSegn; + + var codiciSegnList = await _codSegnVT.Where(x => x.cscodazi.Equals(ten)).ToListAsync(); + foreach (CodiceSegnalazione codS in codiciSegnList) + { + codSegnlist.Add(codS); + } + return StatusCode(StatusCodes.Status200OK, codSegnlist); + } + catch (Exception ex) + { + string err = "Errore: " + ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, err); ; + } + } + + /// VIRTUAL TASK : crea nuovo codice segnalazione return: ActionResult + [HttpPost] + [Route("CodiciSegnalazioniVT/add")] + public async Task> addCodSegnVT([FromBody] CodiceSegnalazione model, string token) + { + string ten = getClaimValueByToken(token, "tenant2"); + model.cscodazi = ten; + try + { + using (var transaction = _VT_CodSegn.Database.BeginTransaction()) + { + await _VT_CodSegn.CodSegn.AddAsync(model); + await _VT_CodSegn.SaveChangesAsync(); + transaction.Commit(); + } + return StatusCode(StatusCodes.Status200OK, model); + + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); ; + } + } + + /// VIRTUAL TASK : modifica codice segnalazione return: ActionResult + [HttpPost] + [Route("CodiciSegnalazioniVT/mod")] + public async Task> modCodSegnVT([FromBody] CodiceSegnalazione model, string token) + { + string ten = getClaimValueByToken(token, "tenant2"); + model.cscodazi = ten; + try + { + using (var transaction = _VT_CodSegn.Database.BeginTransaction()) + { + _VT_CodSegn.Entry(model).State = EntityState.Modified; + await _VT_CodSegn.SaveChangesAsync(); + transaction.Commit(); + } + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + + /// VIRTUAL TASK: cancella un codice segnalazione return:ActionResult + [HttpPost] + [Route("CodiciSegnalazioniVT/del")] + public async Task> delCodSegn(string codSegn, string token) + { + string ten = getClaimValueByToken(token, "tenant2"); + _codSegnVT = _VT_CodSegn.CodSegn; + var art = await _codSegnVT.Where(a => a.cscodice.Equals(codSegn) && a.cscodazi.Equals(ten)).ToListAsync(); + + CodiceSegnalazione model = art.First(); + model.DataObso = DateTime.Now; + + try + { + using (var transaction = _VT_CodSegn.Database.BeginTransaction()) + { + _VT_CodSegn.Entry(model).State = EntityState.Modified; + await _VT_CodSegn.SaveChangesAsync(); + transaction.Commit(); + } + return StatusCode(StatusCodes.Status200OK, model); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + return StatusCode(StatusCodes.Status500InternalServerError, errmsg); + } + } + + #endregion + + #region Logging + /// Upload return:ActionResult + [HttpPost] + [Route("log/scrivi")] + public async Task scriviLog( string token, string mex) + { + string ten = getClaimValueByToken(token, "tenant"); + string ten2 = getClaimValueByToken(token, "tenant2"); + string tenConf = getClaimValueByToken(token, "tenantConfigurazioni"); + string tecnico = getClaimValueByToken(token, "tccodice"); + + if (string.IsNullOrEmpty(ten)) + { + ten = tenConf; + } + string dataLog = DateTime.Now.ToString(); + + try + { + string ver = Request.Headers["X-App-Version"]; + var re = Request; + var headers = re.Headers; + StringValues x = default(StringValues); + if (headers.ContainsKey("X-App-Version")) + { + var m = headers.TryGetValue("X-App-Version", out x); + } + + Console.WriteLine(string.Format("*********** {0} LOG: tenant:{1} tenant2: {2} tenantConf: {3} tecnico:{4}", dataLog,ten, ten2, tenConf, tecnico)); + if (!string.IsNullOrEmpty(ver)) + { + Console.WriteLine(string.Format("versione app: {0} ", ver)); + } + Console.WriteLine(string.Format("{0} ", mex)); + Console.WriteLine(string.Format("*********** {0} FINE LOG: tenant:{1} tenant2: {2} tenantConf: {3} tecnico:{4}", dataLog,ten, ten2, tenConf, tecnico)); + return Ok(new { count = 1, mex.Length }); + } + catch (Exception ex) + { + StringBuilder sb = new StringBuilder(); + string errMsg = string.Empty; + if (ex.Message != null) + { + sb.AppendLine(ex.Message); + } + if (ex.InnerException != null) + { + sb.AppendLine(ex.InnerException.Message); + } + errMsg = sb.ToString(); + + + Console.WriteLine(string.Format("*********** {0} ERRORE LOG: tenant:{1} tenant2: {2} tenantConf: {3} tecnico:{4}", dataLog, ten, ten2, tenConf, tecnico)); + Console.WriteLine(string.Format("{0} ", errMsg)); + Console.WriteLine(string.Format("*********** {0} Fine ERRORE LOG: tenant:{1} tenant2: {2} tenantConf: {3} tecnico:{4}", dataLog, ten, ten2, tenConf, tecnico)); + return StatusCode(StatusCodes.Status500InternalServerError, "Error: " + errMsg); + } + } + #endregion + } +} diff --git a/ApiPolo/Interfaces/ITenantDbContext.cs b/ApiPolo/Interfaces/ITenantDbContext.cs new file mode 100644 index 0000000..c4025ab --- /dev/null +++ b/ApiPolo/Interfaces/ITenantDbContext.cs @@ -0,0 +1,32 @@ +using Microsoft.EntityFrameworkCore; +using ApiPolo.Models; + +namespace ApiPolo.Interfaces +{ + public interface ITenantDbContext + { + DbSet? Causali { get; set; } + DbSet? Commesse { get; set; } + DbSet? Chiusure { get; set; } + DbSet? Azi { get; set; } + DbSet? ccci { get; set; } + DbSet? ccciWiev { get; set; } + DbSet? Chiamate { get; set; } + DbSet? Clienti { get; set; } + DbSet? Componen { get; set; } + DbSet? Impia { get; set; } + DbSet? Mag { get; set; } + DbSet? Magaz { get; set; } + DbSet? Manutenzioni { get; set; } + DbSet? Pagamenti { get; set; } + DbSet? Prese { get; set; } + DbSet? Rapps { get; set; } + DbSet? rapp { get; set; } + DbSet? Sost { get; set; } + DbSet? Saldi { get; set; } + DbSet? StoRapp { get; set; } + DbSet? Tecnici { get; set; } + DbSet? Timbr { get; set; } + DbSet? StoImp { get; set; } + } +} diff --git a/ApiPolo/Interfaces/ITenantDbContextFactory.cs b/ApiPolo/Interfaces/ITenantDbContextFactory.cs new file mode 100644 index 0000000..f5054e1 --- /dev/null +++ b/ApiPolo/Interfaces/ITenantDbContextFactory.cs @@ -0,0 +1,9 @@ +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Interfaces +{ + public interface ITenantDbContextFactory + { + ITenantDbContext GetDbContext(string tenant); + } +} diff --git a/ApiPolo/Interfaces/TenantDbContextFactory.cs b/ApiPolo/Interfaces/TenantDbContextFactory.cs new file mode 100644 index 0000000..7b7dbc7 --- /dev/null +++ b/ApiPolo/Interfaces/TenantDbContextFactory.cs @@ -0,0 +1,28 @@ +//using ApiPolo.Data; +using ApiPolo.Interfaces; +using static ApiPolo.Controllers.PoloController; + +public class TenantDbContextFactory : ITenantDbContextFactory +{ + private readonly IServiceProvider _serviceProvider; + + public TenantDbContextFactory(IServiceProvider serviceProvider) + { + _serviceProvider = serviceProvider; + } + + public ITenantDbContext GetDbContext(string tenant) + { + // Create a scope to resolve DbContext + var scope = _serviceProvider.CreateScope(); + + return tenant switch + { + //Clienti.Maras => scope.ServiceProvider.GetRequiredService(), + //Clienti.Marrocco => scope.ServiceProvider.GetRequiredService(), + //// Add other tenants as needed + //// Clienti.AnotherTenant => scope.ServiceProvider.GetRequiredService(), + //_ => throw new KeyNotFoundException($"No DbContext found for tenant: {tenant}") + }; + } +} diff --git a/ApiPolo/Models/Anag.cs b/ApiPolo/Models/Anag.cs new file mode 100644 index 0000000..508e42a --- /dev/null +++ b/ApiPolo/Models/Anag.cs @@ -0,0 +1,46 @@ +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models +{ + /// + /// Contiene i campi di SALDIART + /// + [Keyless] + public class Anag + { + /// tipo + public string? antipcon { get; set; } + + /// codice + public string? ancodice { get; set; } + + /// email + public string? an_email { get; set; } + + /// codice fiscale + public string? ancodfis { get; set; } + + /// partita iva + public string? anpariva { get; set; } + + /// indirizzo + public string? anindiri { get; set; } + + /// telefono + public string? antelefo { get; set; } + + /// cellulare + public string? annumcel { get; set; } + + /// pec + public string? an_empec { get; set; } + + /// descrizione + public string? andescri { get; set; } + + /// listino cliente + public string? annumlis { get; set; } + + + } +} diff --git a/ApiPolo/Models/AnagCommImp.cs b/ApiPolo/Models/AnagCommImp.cs new file mode 100644 index 0000000..8d0aed4 --- /dev/null +++ b/ApiPolo/Models/AnagCommImp.cs @@ -0,0 +1,15 @@ +namespace ApiPolo.Models +{ + /// + public class AnagCommImp + { + /// + public AnagTable? cli { get; set; } + + /// + public CommesseVT_Table? comm { get; set; } + + /// + public ImpiantoTable? imp { get; set; } + } +} diff --git a/ApiPolo/Models/AnagTable.cs b/ApiPolo/Models/AnagTable.cs new file mode 100644 index 0000000..1dd6389 --- /dev/null +++ b/ApiPolo/Models/AnagTable.cs @@ -0,0 +1,50 @@ +using System.ComponentModel.DataAnnotations; + +namespace ApiPolo.Models +{ + /// + public class AnagTable + { + /// tipo + [Key] + public string? antipcon { get; set; } + + /// codice + [Key] + public string? ancodice { get; set; } + + /// codice azienda + [Key] + public string? ancodazi { get; set; } + + /// email + public string? an_email { get; set; } + + /// codice fiscale + public string? ancodfis { get; set; } + + /// partita iva + public string? anpariva { get; set; } + + /// indirizzo + public string? anindiri { get; set; } + + /// telefono + public string? antelefo { get; set; } + + /// cellulare + public string? annumcel { get; set; } + + /// pec + public string? an_empec { get; set; } + + /// descrizione + public string? andescri { get; set; } + + /// listino cliente + public string? annumlis { get; set; } + + /// cliente eliminato + public DateTime? andtobso { get; set; } + } +} diff --git a/ApiPolo/Models/AnagVT.cs b/ApiPolo/Models/AnagVT.cs new file mode 100644 index 0000000..126f41b --- /dev/null +++ b/ApiPolo/Models/AnagVT.cs @@ -0,0 +1,50 @@ +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models +{ + /// + /// Contiene i campi di API_CLIENTI + /// + [Keyless] + public class AnagVT + { + /// tipo + public string? antipcon { get; set; } + + /// codice + public string? ancodice { get; set; } + + /// email + public string? an_email { get; set; } + + /// codice fiscale + public string? ancodfis { get; set; } + + /// partita iva + public string? anpariva { get; set; } + + /// indirizzo + public string? anindiri { get; set; } + + /// telefono + public string? antelefo { get; set; } + + /// cellulare + public string? annumcel { get; set; } + + /// pec + public string? an_empec { get; set; } + + /// descrizione + public string? andescri { get; set; } + + /// listino cliente + public string? annumlis { get; set; } + + /// cliente eliminato + public DateTime? andtobso { get; set; } + + /// azienda (tenant2) + public string? ancodazi { get; set; } + } +} diff --git a/ApiPolo/Models/Articoli.cs b/ApiPolo/Models/Articoli.cs new file mode 100644 index 0000000..6c5f212 --- /dev/null +++ b/ApiPolo/Models/Articoli.cs @@ -0,0 +1,37 @@ +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +namespace ApiPolo.Models +{ + public class Articoli + { + [Key] + public string Azienda { get; set; } + [Key] + public string SlCodice { get; set; } + public string? ArDesArt { get; set; } + public string? SlCodMag { get; set; } + [Column(TypeName = "decimal(13,3)")] + public decimal? SlQtAper { get; set; } + public string? AmCodice { get; set; } + public string? LoCodice { get; set; } + public string? LiCodLis { get; set; } + public string? LiCodArt { get; set; } + public DateTime? LiDatAtt { get; set; } + [Column(TypeName = "decimal(12,3)")] + public decimal? LiQuanti { get; set; } + [Column(TypeName = "decimal(18,5)")] + public decimal? LiPrezzo { get; set; } + [Column(TypeName = "decimal(6,2)")] + public decimal? LiScont1 { get; set; } + [Column(TypeName = "decimal(6,2)")] + public decimal? LiScont2 { get; set; } + [Column(TypeName = "decimal(6,2)")] + public decimal? LiScont3 { get; set; } + [Column(TypeName = "decimal(6,2)")] + public decimal? LiScont4 { get; set; } + public string? Gest_Matr { get; set; } + public string? Gest_Lotti { get; set; } + public string? Desc_sup { get; set; } + public DateTime? DataObso { get; set; } + } +} diff --git a/ApiPolo/Models/AziendaPres.cs b/ApiPolo/Models/AziendaPres.cs new file mode 100644 index 0000000..706dc61 --- /dev/null +++ b/ApiPolo/Models/AziendaPres.cs @@ -0,0 +1,16 @@ +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models +{ + /// + /// Azienda prsente + /// + [Keyless] + public class AziendaPres + { + /// + /// Azienda tecnico + /// + public string? tccodazi { get; set; } + } +} diff --git a/ApiPolo/Models/AziendaRif.cs b/ApiPolo/Models/AziendaRif.cs new file mode 100644 index 0000000..0c4b8a4 --- /dev/null +++ b/ApiPolo/Models/AziendaRif.cs @@ -0,0 +1,29 @@ +using System.ComponentModel.DataAnnotations; + +namespace ApiPolo.Models +{ + /// Azienda collegata all'azienda principale + public class AziendaRif + { + /// azienda + [Key] + public string? piazihoc { get; set; } + + /// tecnico + [Key] + public string? picodtec { get; set; } + + /// tecnico + [Key] + public string? pirifazi { get; set; } + + /// Nome azienda collegata + public string? pinomede { get; set; } + + /// url logo + public string? pilogurl { get; set; } + + /// Testo rapportino + public string? pitextin { get; set; } + } +} diff --git a/ApiPolo/Models/Buoni.cs b/ApiPolo/Models/Buoni.cs new file mode 100644 index 0000000..327e57a --- /dev/null +++ b/ApiPolo/Models/Buoni.cs @@ -0,0 +1,22 @@ +using System.ComponentModel.DataAnnotations; + +namespace ApiPolo.Models +{ + /// buoni rapportini + public class Buoni + { + /// azienda + [Key] + public string? azienda { get; set; } + + /// seriale buono + [Key] + public string? ser_buono { get; set; } + + /// immagine + public byte[]? immagine { get; set; } + + /// data inserimento + public DateTime? dt_ins { get; set; } + } +} diff --git a/ApiPolo/Models/BuoniLW.cs b/ApiPolo/Models/BuoniLW.cs new file mode 100644 index 0000000..6f030a0 --- /dev/null +++ b/ApiPolo/Models/BuoniLW.cs @@ -0,0 +1,22 @@ +using System.ComponentModel.DataAnnotations; + +namespace ApiPolo.Models +{ + /// Buono per Lift web + public class BuoniLW + { + /// azienda + [Key] + public string? azienda { get; set; } + + /// seriale buono + [Key] + public string? ser_buono { get; set; } + + /// immagine + public string? immagine { get; set; } + + /// data inserimento + public DateTime? dt_ins { get; set; } + } +} diff --git a/ApiPolo/Models/CC_CI.cs b/ApiPolo/Models/CC_CI.cs new file mode 100644 index 0000000..30c22b7 --- /dev/null +++ b/ApiPolo/Models/CC_CI.cs @@ -0,0 +1,20 @@ +using System.ComponentModel.DataAnnotations; + +namespace ApiPolo.Models +{ + /// + public class CC_CI + { + /// codice azienda + [Key] + public string? picodazi { get; set; } + + /// codice di chiusura + [Key] + public string? picodchi { get; set; } + + /// codice intervento + [Key] + public string? picodint { get; set; } + } +} diff --git a/ApiPolo/Models/CC_CIWiev.cs b/ApiPolo/Models/CC_CIWiev.cs new file mode 100644 index 0000000..7e139e1 --- /dev/null +++ b/ApiPolo/Models/CC_CIWiev.cs @@ -0,0 +1,24 @@ +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models +{ + /// Oggetto Vista abbinamento codice chiusura-codice intervento + [Keyless] + public class CC_CIWiev + { + /// Azienda + public string? picodazi { get; set; } + + /// codice di chiusura PIASSCHIU + public string? picodchi { get; set; } + + /// codice intervento PIASSCHIU + public string? picodint { get; set; } + + /// codice intervento CODINTE + public string? cicodice { get; set; } + + /// descrizione intervento CODINTE + public string? cidescri { get; set; } + } +} diff --git a/ApiPolo/Models/Caus_Rapp.cs b/ApiPolo/Models/Caus_Rapp.cs new file mode 100644 index 0000000..bd43a4c --- /dev/null +++ b/ApiPolo/Models/Caus_Rapp.cs @@ -0,0 +1,20 @@ +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models +{ + /// + /// Causali rapportino + /// + [Keyless] + public class Caus_Rapp + { + /// codice causale + public string? crcodice { get; set; } + + /// descrizione causale + public string? crdescri { get; set; } + + /// flag fatturazione + public string? crrifatt { get; set; } + } +} diff --git a/ApiPolo/Models/ChiamataSeriale.cs b/ApiPolo/Models/ChiamataSeriale.cs new file mode 100644 index 0000000..68abbf7 --- /dev/null +++ b/ApiPolo/Models/ChiamataSeriale.cs @@ -0,0 +1,18 @@ +using System.ComponentModel.DataAnnotations; + +namespace ApiPolo.Models +{ + /// + public class ChiamataSeriale + { + /// + [Key] + public string? piditta { get; set; } + + /// + public string? pinumero { get; set; } + + /// + public string? cpccchk { get; set; } + } +} diff --git a/ApiPolo/Models/ChiamataSeriale_out.cs b/ApiPolo/Models/ChiamataSeriale_out.cs new file mode 100644 index 0000000..cf73afe --- /dev/null +++ b/ApiPolo/Models/ChiamataSeriale_out.cs @@ -0,0 +1,24 @@ +namespace ApiPolo.Models +{ + /// + public class ChiamataSeriale_out + { + /// + public string? piditta { get; set; } + + /// + public string? pinumero { get; set; } + + /// + public string? cpccchk { get; set; } + + /// errore titolo + public string? err_title { get; set; } + + /// errore dettaglio + public string? err_detail { get; set; } + + /// errore status code (200, 500) + public string? err_status_code { get; set; } + } +} diff --git a/ApiPolo/Models/Chiamate.cs b/ApiPolo/Models/Chiamate.cs new file mode 100644 index 0000000..ec25d48 --- /dev/null +++ b/ApiPolo/Models/Chiamate.cs @@ -0,0 +1,410 @@ +using Microsoft.EntityFrameworkCore; +using System.ComponentModel.DataAnnotations.Schema; + +namespace ApiPolo.Models +{ + /// ViSTA Chiamate + [Keyless] + public class Chiamate + { + /// Azienda + public string? chcodazi { get; set; } + + /// + /// Seriale Chiamata + /// + public string? chserial { get; set; } + + /// + /// Stato chiamata + /// + public string? chstato { get; set; } + + /// + /// Codice Chiamatista assegnato + /// + public string? chtchiam { get; set; } + + /// + /// Data appuntamento chiamata + /// + public DateTime? chdtapp { get; set; } + + /// + /// Ora appuntamento inizio + /// + public int? choraaPI { get; set; } + + /// + /// Minuti appuntamento inizio + /// + public int? chminapi { get; set; } + + /// + /// Note appuntamento + /// + public string? chnote { get; set; } + + /// + /// Codice Impianto chiamata + /// + public string? chcodimp { get; set; } + + /// + /// Descrizione codice segnalazione + /// + public string? csdescr { get; set; } + + /// + /// Telefono cliente + /// + public string? antelefo { get; set; } + + /// + /// descrizione cliente + /// + public string? andescri { get; set; } + + /// + /// Indirizzo impianto tipo + /// + /// Via,Piazza, + public string? imindiri1 { get; set; } + + /// + /// Indirizzo impianto nome + /// + public string? imindiri2 { get; set; } + + /// + /// Indirizzo impianto numero + /// + public int? imindiri3 { get; set; } + + /// + /// Indirizzo impianto sottonumero + /// + public string? imindiri4 { get; set; } + + /// + /// Indirizzo impianto Scala + /// + public string? imindiri5 { get; set; } + + /// + /// Indirizzo impianto località + /// + public string? imlocali { get; set; } + + /// + /// Indirizzo impianto Cap + /// + public string? imcodcap { get; set; } + + /// + /// Indirizzo impianto comune + /// + public string? imcomune { get; set; } + + /// + /// Indirizzo impianto provincia + /// + public string? improvin { get; set; } + + /// + /// Indirizzo impianto nazione + /// + public string? imcodnaz { get; set; } + + /// + /// MANPROG: matricola impianto + /// + public string? immatric { get; set; } + + /// + /// MANPROG: numero impianto + /// + public string? imnumimp { get; set; } + + /// + /// MANPROG: ubicazione impianto + /// + public string? imubicaz { get; set; } + + /// + /// Tecnico descrizione + /// + public string? tcdescri { get; set; } + + /// + /// Tecnico codice + /// + public string? tccodice { get; set; } + + /*campi di RAPP_NEW*/ + + + /// + /// RAPP_NEW: seriale rapp_new preso in carico + /// + public string? ser_rapp_ic { get; set; } + + /// + /// RAPP_NEW: tipo rapp_new preso in carico (valore vuoto) + /// + public string? tipo_rapp_ic { get; set; } + + /// + /// RAPP_NEW: preso in carico (S o NULL) + /// + public string? ic { get; set; } + + /// + /// RAPP_NEW: seriale rapp_new rifiutata + /// + public string? ser_rapp_rif { get; set; } + + /// + /// RAPP_NEW: tipo rapp rifiutata (valore vuoto) + /// + public string? tipo_rapp_rif { get; set; } + + /// + /// RAPP_NEW: rifiutato (S o null) + /// + public string? rif { get; set; } + + /// + /// RAPP_NEW: seriale chiamata chiusa + /// + public string? ser_rapp_chiu { get; set; } + + /// + /// RAPP_NEW: tipo chiamata chiusa (3 o null) + /// + public string? tipo_rapp_chiu { get; set; } + + /// + /// RAPP_NEW: seriale buono chiamata chiusa + /// + public string? ser_buono_chiu { get; set; } + + /// + /// errore titolo + /// + public string? err_title { get; set; } + + /// + /// errore dettaglio + /// + public string? err_detail { get; set; } + + /// + /// errore status code (200, 500) + /// + public string? err_status_code { get; set; } + + + //ALTRI + /// Esercizio + public string? chcodese { get; set; } + + /// Tipo + public string? chtipo { get; set; } + + /// numero chiamata + [Column(TypeName = "decimal(10, 0)")] + public decimal? chnumero { get; set; } + + /// Data inserimento chiamata + public DateTime? chdata { get; set; } + + /// Ora inserimento chiamata + public int? chora { get; set; } + + /// Minuti inserimento chiamata + public int? chmin { get; set; } + + /// operatore assegnazione + public int? chopass { get; set; } + + /// operatore di chiusura + public int? chopchi { get; set; } + + /// azienda impianto + public string? chaziimp { get; set; } + + /// ora appuntamento fine + public int? choraapf { get; set; } + + /// minuto appuntamento fine + public int? chminapf { get; set; } + + /// Riferimento chiamata + public string? chrifer { get; set; } + + /// telefono riferimento + public string? chtelef { get; set; } + + /// tcodice segnalazione + public string? chcodseg { get; set; } + + + + + /// Fermo impianto S/N + public string? chstopi { get; set; } + + /// Data assegnazione chiamata + public DateTime? chdtass { get; set; } + + /// Ora assegnazione chiamata + public int? chorass { get; set; } + + /// Min assegnazione chiamata + public int? chminass { get; set; } + + /// Data chiusura chiamata + public DateTime? chdtchi { get; set; } + + /// Ora chiusura chiamata + public int? chorachi { get; set; } + + /// Min chiusura chiamata + public int? chminchi { get; set; } + + /// Data inizio intervento + public DateTime? chdtlin { get; set; } + + /// Ora inizio intervento + public int? chorali { get; set; } + + /// Min inizio intervento + public int? chminli { get; set; } + + /// Data fine intervento + public DateTime? chdtlfi { get; set; } + + /// Ora fine intervento + public int? choralf { get; set; } + + /// Min fine intervento + public int? chminlf { get; set; } + + /// Numero 1 rapportino futuro + public int? chnrap1 { get; set; } + + /// Serie 1 rapportino futuro + public string? chsrap1 { get; set; } + + /// Numero 2 rapportino futuro + public int? chnrap2 { get; set; } + + /// Modalità raccolta chiamata + public string? chmodrac { get; set; } + + /// Numero chiamata per impianto per anno + public int? chprgann { get; set; } + + + /// Importo manodopera + [Column(TypeName = "decimal(18, 4)")] + public decimal? chimpman { get; set; } + + /// Percentuale manodopera + [Column(TypeName = "decimal(6, 2)")] + public decimal? chperman { get; set; } + + /// Stampa manodopera + public string? chflstim { get; set; } + + /// Chiusura da remoto + public string? chfleste { get; set; } + + /// Riferimento seriale importazione + public string? chserext { get; set; } + + /// Descrizione + public string? imdescri { get; set; } + + /// Tipo impianto + public string? imtipoim { get; set; } + + /// Ultimo amministratore + public string? imultamm { get; set; } + + /// Descrizione Ult. Amministratore + public string? imultdam { get; set; } + + /// Telefono Ult. Amministratore + public string? imulttam { get; set; } + + /// Zona manutenzione + public string? imzonman { get; set; } + + /// Pubblico/privato + public string? imflpupr { get; set; } + + /// Zona chiamate + public string? imzonchi { get; set; } + + /// Zona supervisione + public string? imzonsup { get; set; } + + /// Data inizio manutenzione + public DateTime? imdainma { get; set; } + + /// Data fine manutenzione + public DateTime? imdafima { get; set; } + + /// Data costruzione + public DateTime? imdatcos { get; set; } + + /// Numero telesoccorso + public string? imteleso { get; set; } + + /// Email cliente + public string? an_email { get; set; } + + /// Ultimo cliente + public string? imultcli { get; set; } + + /// codice cliente + public string? ancodice { get; set; } + + /// tipo anagrafica + public string? antipcon { get; set; } + + /// costo chiamata + [Column(TypeName = "decimal(18, 4)")] + public decimal? chiamata { get; set; } + + /// spese viaggio + [Column(TypeName = "decimal(18, 4)")] + public decimal? spe_viaggio { get; set; } + + /// costo orario ordinario + [Column(TypeName = "decimal(18, 4)")] + public decimal? costo_ordinario { get; set; } + + /// costo orario notturno + [Column(TypeName = "decimal(18, 4)")] + public decimal? costo_notturno { get; set; } + + /// costo orario straordinario + [Column(TypeName = "decimal(18, 4)")] + public decimal? costo_straordinario { get; set; } + + /// costo orario festivo + [Column(TypeName = "decimal(18, 4)")] + public decimal? costo_festivo { get; set; } + + /// Azienda di riferimento associata all'impianto (gestione loghi differenti) + public string? imazirif { get; set; } + + /// riferimento impianto (va su rapportino) + public string? imrefref { get; set; } + + + } +} diff --git a/ApiPolo/Models/ChiamateTable.cs b/ApiPolo/Models/ChiamateTable.cs new file mode 100644 index 0000000..9071426 --- /dev/null +++ b/ApiPolo/Models/ChiamateTable.cs @@ -0,0 +1,211 @@ +using System.ComponentModel.DataAnnotations; + +namespace ApiPolo.Models +{ + /// Tabella CHIAMATE (insert da app) + public class ChiamateTable + { + /// + [Key] + public string? chcodazi { get; set; } + + /// + [Key] + public string? chserial { get; set; } + + /// + public string? chcodese { get; set; } + + /// + public string? chtipo { get; set; } + + /// + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(10, 0)")] + public decimal? chnumero { get; set; } + + /// + public DateTime? chdata { get; set; } + + /// + public int? chora { get; set; } + + /// + public int? chmin { get; set; } + + /// + public int? chopins { get; set; } + + /// + public int? chopass { get; set; } + + /// + public int? chopchi { get; set; } + + /// + public string? chcodimp { get; set; } + + /// + public string? chaziimp { get; set; } + + + + /// + public string? chtchiam { get; set; } + + /// + public string? chtmanut { get; set; } + + /// + public string? chstato { get; set; } + + /// + public DateTime? chdtapp { get; set; } + + /// + public int? choraapi { get; set; } + + /// + public int? chminapi { get; set; } + + /// + public int? choraapf { get; set; } + + /// + public int? chminapf { get; set; } + + /// + public string? chrifer { get; set; } + + /// + public string? chtelef { get; set; } + + + + /// + public string? chcodseg { get; set; } + + /// + public string? chstopi { get; set; } + + /// + public string? chnote { get; set; } + + /// + public DateTime? chdtass { get; set; } + + /// + public int? chorass { get; set; } + + /// + public int? chminass { get; set; } + + /// + public DateTime? chdtchi { get; set; } + + /// + public int? chorachi { get; set; } + + /// + public int? chminchi { get; set; } + + /// + public DateTime? chdtlin { get; set; } + + /// + public int? chorali { get; set; } + + /// + public int? chminli { get; set; } + + + + /// + public DateTime? chdtlfi { get; set; } + + /// + public int? choralf { get; set; } + + /// + public int? chminlf { get; set; } + + /// + public string? chvalfat { get; set; } + + /// + public string? cpccchk { get; set; } + + /// + public int? chnrap1 { get; set; } + + /// + public string? chsrap1 { get; set; } + + /// + public int? chnrap2 { get; set; } + + /// + public string? chsrap2 { get; set; } + + /// + public string? chmodrac { get; set; } + + /// + public int? chprgann { get; set; } + + /// + public string? chserchi { get; set; } + + /// + public string? chdesfat { get; set; } + + /// + public string? chdessup { get; set; } + + /// + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? chimpofa { get; set; } + + /// + public string? chserdoc { get; set; } + + /// + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? chimpmat { get; set; } + + /// + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? chimpman { get; set; } + + /// + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(6, 2)")] + public decimal? chperman { get; set; } + + /// + public string? chflstim { get; set; } + + /// + public string? chfleste { get; set; } + + /// + public string? chserext { get; set; } + + /// + public string? chrifiutata { get; set; } + + ///// + //public string? chincarico { get; set; } + + ///// + //public string? chserweb { get; set; } + + ///// + //public string? chinlinea { get; set; } + + ///// + //public string? chpreinc { get; set; } + + ///// + //public string? chtelesan { get; set; } + + } +} diff --git a/ApiPolo/Models/ChiamateTableOut.cs b/ApiPolo/Models/ChiamateTableOut.cs new file mode 100644 index 0000000..b49b857 --- /dev/null +++ b/ApiPolo/Models/ChiamateTableOut.cs @@ -0,0 +1,212 @@ + + +namespace ApiPolo.Models +{ + /// Tabella CHIAMATE (insert da app) - Output + public class ChiamateTableOut + { + /// + public string? chcodazi { get; set; } + + /// + public string? chserial { get; set; } + + /// + public string? chcodese { get; set; } + + /// + public string? chtipo { get; set; } + + /// + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(10, 0)")] + public decimal? chnumero { get; set; } + + /// + public DateTime? chdata { get; set; } + + /// + public int? chora { get; set; } + + /// + public int? chmin { get; set; } + + /// + public int? chopins { get; set; } + + /// + public int? chopass { get; set; } + + /// + public int? chopchi { get; set; } + + /// + public string? chcodimp { get; set; } + + /// + public string? chaziimp { get; set; } + + /// + public string? chtchiam { get; set; } + + /// + public string? chtmanut { get; set; } + + /// + public string? chstato { get; set; } + + /// + public DateTime? chdtapp { get; set; } + + /// + public int? choraapi { get; set; } + + /// + public int? chminapi { get; set; } + + /// + public int? choraapf { get; set; } + + /// + public int? chminapf { get; set; } + + /// + public string? chrifer { get; set; } + + /// + public string? chtelef { get; set; } + + /// + public string? chcodseg { get; set; } + + /// + public string? chstopi { get; set; } + + /// + public string? chnote { get; set; } + + /// + public DateTime? chdtass { get; set; } + + /// + public int? chorass { get; set; } + + /// + public int? chminass { get; set; } + + /// + public DateTime? chdtchi { get; set; } + + /// + public int? chorachi { get; set; } + + /// + public int? chminchi { get; set; } + + /// + public DateTime? chdtlin { get; set; } + + /// + public int? chorali { get; set; } + + /// + public int? chminli { get; set; } + + /// + public DateTime? chdtlfi { get; set; } + + /// + public int? choralf { get; set; } + + /// + public int? chminlf { get; set; } + + /// + public string? chvalfat { get; set; } + + /// + public string? cpccchk { get; set; } + + /// + public int? chnrap1 { get; set; } + + /// + public string? chsrap1 { get; set; } + + /// + public int? chnrap2 { get; set; } + + /// + public string? chsrap2 { get; set; } + + /// + public string? chmodrac { get; set; } + + /// + public int? chprgann { get; set; } + + /// + public string? chserchi { get; set; } + + /// + public string? chdesfat { get; set; } + + /// + public string? chdessup { get; set; } + + /// + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? chimpofa { get; set; } + + /// + public string? chserdoc { get; set; } + + /// + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? chimpmat { get; set; } + + /// + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? chimpman { get; set; } + + /// + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(6, 2)")] + public decimal? chperman { get; set; } + + /// + public string? chflstim { get; set; } + + /// + public string? chfleste { get; set; } + + /// + public string? chserext { get; set; } + + /// + public string? chrifiutata { get; set; } + + /// + public string? chincarico { get; set; } + + /// + public string? chserweb { get; set; } + + /// + public string? chinlinea { get; set; } + + /// + public string? chpreinc { get; set; } + + /// + public string? chtelesan { get; set; } + + /// errore titolo + public string? err_title { get; set; } + + /// errore dettaglio + public string? err_detail { get; set; } + + /// errore status code (200, 500) + public string? err_status_code { get; set; } + + } +} diff --git a/ApiPolo/Models/ChiamateTableTaskManager.cs b/ApiPolo/Models/ChiamateTableTaskManager.cs new file mode 100644 index 0000000..1a25372 --- /dev/null +++ b/ApiPolo/Models/ChiamateTableTaskManager.cs @@ -0,0 +1,212 @@ +using System.ComponentModel.DataAnnotations; + +namespace ApiPolo.Models +{ + /// Tabella CHIAMATE (insert da app) per le installazioni di TaskManager + public class ChiamateTableTaskManager + { + /// + [Key] + public string? chcodazi { get; set; } + + /// + [Key] + public string? chserial { get; set; } + + /// + public string? chcodese { get; set; } + + /// + public string? chtipo { get; set; } + + /// + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(10, 0)")] + public decimal? chnumero { get; set; } + + /// + public DateTime? chdata { get; set; } + + /// + public int? chora { get; set; } + + /// + public int? chmin { get; set; } + + /// + public int? chopins { get; set; } + + /// + public int? chopass { get; set; } + + /// + public int? chopchi { get; set; } + + /// + public string? chcodimp { get; set; } + + /// + public string? chaziimp { get; set; } + + + + /// + public string? chtchiam { get; set; } + + /// + public string? chtmanut { get; set; } + + /// + public string? chstato { get; set; } + + /// + public DateTime? chdtapp { get; set; } + + /// + public int? choraapi { get; set; } + + /// + public int? chminapi { get; set; } + + /// + public int? choraapf { get; set; } + + /// + public int? chminapf { get; set; } + + /// + public string? chrifer { get; set; } + + /// + public string? chtelef { get; set; } + + + + /// + public string? chcodseg { get; set; } + + /// + public string? chstopi { get; set; } + + /// + public string? chnote { get; set; } + + /// + public DateTime? chdtass { get; set; } + + /// + public int? chorass { get; set; } + + /// + public int? chminass { get; set; } + + /// + public DateTime? chdtchi { get; set; } + + /// + public int? chorachi { get; set; } + + /// + public int? chminchi { get; set; } + + /// + public DateTime? chdtlin { get; set; } + + /// + public int? chorali { get; set; } + + /// + public int? chminli { get; set; } + + + + /// + public DateTime? chdtlfi { get; set; } + + /// + public int? choralf { get; set; } + + /// + public int? chminlf { get; set; } + + /// + public string? chvalfat { get; set; } + + /// + public string? cpccchk { get; set; } + + /// + public int? chnrap1 { get; set; } + + /// + public string? chsrap1 { get; set; } + + /// + public int? chnrap2 { get; set; } + + /// + public string? chsrap2 { get; set; } + + /// + public string? chmodrac { get; set; } + + /// + public int? chprgann { get; set; } + + /// + public string? chserchi { get; set; } + + /// + public string? chdesfat { get; set; } + + /// + public string? chdessup { get; set; } + + /// + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? chimpofa { get; set; } + + /// + public string? chserdoc { get; set; } + + /// + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? chimpmat { get; set; } + + /// + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? chimpman { get; set; } + + /// + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(6, 2)")] + public decimal? chperman { get; set; } + + /// + public string? chflstim { get; set; } + + /// + public string? chfleste { get; set; } + + /// + public string? chserext { get; set; } + + /// + public string? chrifiutata { get; set; } + + ///// + //public string? chincarico { get; set; } + + ///// + //public string? chserweb { get; set; } + + ///// + //public string? chinlinea { get; set; } + + ///// + //public string? chpreinc { get; set; } + + /// campo cliente su tabella chiamate di TaskManager + public string? cliente { get; set; } + + + } +} diff --git a/ApiPolo/Models/Chiamate_out.cs b/ApiPolo/Models/Chiamate_out.cs new file mode 100644 index 0000000..61db271 --- /dev/null +++ b/ApiPolo/Models/Chiamate_out.cs @@ -0,0 +1,305 @@ +using Microsoft.EntityFrameworkCore; +using System.ComponentModel.DataAnnotations.Schema; + +namespace ApiPolo.Models +{ + /// ViSTA Chiamate + [Keyless] + public class Chiamate_out + { + /// Azienda + public string? chcodazi { get; set; } + + /// + /// Seriale Chiamata + /// + public string? chserial { get; set; } + + /// + /// Stato chiamata + /// + public string? chstato { get; set; } + + /// + /// Codice Chiamatista assegnato + /// + public string? chtchiam { get; set; } + + /// + /// Data appuntamento chiamata + /// + public DateTime? chdtapp { get; set; } + + /// + /// Ora appuntamento inizio + /// + public int? choraaPI { get; set; } + + /// + /// Minuti appuntamento inizio + /// + public int? chminapi { get; set; } + + /// + /// Note appuntamento + /// + public string? chnote { get; set; } + + /// + /// Codice Impianto chiamata + /// + public string? chcodimp { get; set; } + + /// + /// Descrizione codice segnalazione + /// + public string? csdescr { get; set; } + + /// + /// Telefono cliente + /// + public string? antelefo { get; set; } + + /// + /// descrizione cliente + /// + public string? andescri { get; set; } + + /// + /// Indirizzo impianto tipo + /// + /// Via,Piazza, + public string? imindiri1 { get; set; } + + /// + /// Indirizzo impianto nome + /// + public string? imindiri2 { get; set; } + + /// + /// Indirizzo impianto numero + /// + public int? imindiri3 { get; set; } + + /// + /// Indirizzo impianto sottonumero + /// + public string? imindiri4 { get; set; } + + /// + /// Indirizzo impianto Scala + /// + public string? imindiri5 { get; set; } + + /// + /// Indirizzo impianto località + /// + public string? imlocali { get; set; } + + /// + /// Indirizzo impianto Cap + /// + public string? imcodcap { get; set; } + + /// + /// Indirizzo impianto comune + /// + public string? imcomune { get; set; } + + /// + /// Indirizzo impianto provincia + /// + public string? improvin { get; set; } + + /// + /// Indirizzo impianto nazione + /// + public string? imcodnaz { get; set; } + + /// + /// matricola impianto + /// + public string? immatric { get; set; } + + /// + /// numero impianto + /// + public string? imnumimp { get; set; } + + /// + /// ubicazione impianto + /// + public string? imubicaz { get; set; } + + /// + /// Tecnico descrizione + /// + public string? tcdescri { get; set; } + + /// + /// Tecnico codice + /// + public string? tccodice { get; set; } + + /*campi di RAPP_NEW*/ + + + /// + /// RAPP_NEW: seriale rapp_new preso in carico + /// + public string? ser_rapp_ic { get; set; } + + /// + /// RAPP_NEW: tipo rapp_new preso in carico (valore vuoto) + /// + public string? tipo_rapp_ic { get; set; } + + /// + /// RAPP_NEW: preso in carico (S o NULL) + /// + public string? ic { get; set; } + + /// + /// RAPP_NEW: seriale rapp_new rifiutata + /// + public string? ser_rapp_rif { get; set; } + + /// + /// RAPP_NEW: tipo rapp rifiutata (valore vuoto) + /// + public string? tipo_rapp_rif { get; set; } + + /// + /// RAPP_NEW: rifiutato (S o null) + /// + public string? rif { get; set; } + + /// + /// RAPP_NEW: seriale chiamata chiusa + /// + public string? ser_rapp_chiu { get; set; } + + /// + /// RAPP_NEW: tipo chiamata chiusa (3 o null) + /// + public string? tipo_rapp_chiu { get; set; } + + /// + /// RAPP_NEW: seriale buono chiamata chiusa + /// + public string? ser_buono_chiu { get; set; } + + /// + /// errore titolo + /// + public string? err_title { get; set; } + + /// + /// errore dettaglio + /// + public string? err_detail { get; set; } + + /// + /// errore status code (200, 500) + /// + public string? err_status_code { get; set; } + + /// + /// altri dati chiamata + /// + + + /// Esercizio + public string? chcodese { get; set; } + + /// Tipo + public string? chtipo { get; set; } + + /// numero chiamata + [Column(TypeName = "decimal(10, 0)")] + public decimal? chnumero { get; set; } + + /// Data inserimento chiamata + public DateTime? chdata { get; set; } + + /// Ora inserimento chiamata + public int? chora { get; set; } + + /// Minuti inserimento chiamata + public int? chmin { get; set; } + + /// operatore assegnazione + public int? chopass { get; set; } + + /// operatore di chiusura + public int? chopchi { get; set; } + + /// azienda impianto + public string? chaziimp { get; set; } + + /// ora appuntamento fine + public int? choraapf { get; set; } + + /// minuto appuntamento fine + public int? chminapf { get; set; } + + /// Riferimento chiamata + public string? chrifer { get; set; } + + /// telefono riferimento + public string? chtelef { get; set; } + + /// tcodice segnalazione + public string? chcodseg { get; set; } + + /// altri campi + public Dictionary? altri { get; set; } + + /// Codice cliente + public string? ancodice { get; set; } + + /// costo chiamata + [Column(TypeName = "decimal(18, 4)")] + public decimal? chiamata { get; set; } + + /// spese viaggio + [Column(TypeName = "decimal(18, 4)")] + public decimal? spe_viaggio { get; set; } + + /// costo orario ordinario + [Column(TypeName = "decimal(18, 4)")] + public decimal? costo_ordinario { get; set; } + + /// costo orario notturno + [Column(TypeName = "decimal(18, 4)")] + public decimal? costo_notturno { get; set; } + + /// costo orario straordinario + [Column(TypeName = "decimal(18, 4)")] + public decimal? costo_straordinario { get; set; } + + /// costo orario festivo + [Column(TypeName = "decimal(18, 4)")] + public decimal? costo_festivo { get; set; } + + /// Azienda di riferimento associata all'impianto (gestione loghi differenti) + public string? imazirif { get; set; } + + /// riferimento impianto (va su rapportino) + public string? imrefref { get; set; } + + /// indirizzo stampa (html) su buono + public string? indirizzo_stampa { get; set; } + + /// impianto per lista (html) + public string? impianto_list { get; set; } + + /// riferimento impianto (html) su buono + public string? riferimento_impianto { get; set; } + + + + } +} + + diff --git a/ApiPolo/Models/Chiusure.cs b/ApiPolo/Models/Chiusure.cs new file mode 100644 index 0000000..505ef9c --- /dev/null +++ b/ApiPolo/Models/Chiusure.cs @@ -0,0 +1,35 @@ +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models +{ + /// Chiusure + [Keyless] + public class Chiusure + { + /// codice chiusura + public string? cccodice { get; set; } + + /// descrizione + public string? ccdescr { get; set; } + + /// ccrapabi + public int ccrapabi { get; set; } + + /// obbligatoria + public int ccrapobb { get; set; } + + /// ccchiint + public string? ccchiint { get; set; } + + /// azienda + public string? cccodazi { get; set; } + + /// Descrizione supplementare da mettere sul rapportino + public string? ccdessup { get; set; } + + /// Contiena la lista di tipologie di manutenzione associate a quel codice + public List? tipologieMan { get; set; } + + } + +} diff --git a/ApiPolo/Models/ChiusureTable.cs b/ApiPolo/Models/ChiusureTable.cs new file mode 100644 index 0000000..96d496a --- /dev/null +++ b/ApiPolo/Models/ChiusureTable.cs @@ -0,0 +1,80 @@ +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace ApiPolo.Models +{ + /// + /// (Virtual Task) Contiene i campi di CCHIUSA + /// + public class ChiusureTable + { + /// + [Key] + public string? cccodazi { get; set; } + + /// + [Key] + public string? cccodice { get; set; } + + /// + public string? ccdescr { get; set; } + + /// + public string? ccflfatt { get; set; } + + /// + public string? ccflrep { get; set; } + + /// + public string? ccdessup { get; set; } + + /// + public string? cctipcod { get; set; } + + /// + public string? ccgruppo { get; set; } + + /// + [Column(TypeName = "decimal(18, 4)")] + public decimal? ccimpint { get; set; } + + /// + [Column(TypeName = "decimal(18, 4)")] + public decimal? ccimpman { get; set; } + + /// + public string? ccserint { get; set; } + + /// + public string? ccserman { get; set; } + + /// + [Column(TypeName = "decimal(4, 1)")] + public decimal? ccnumore { get; set; } + + /// + [Column(TypeName = "decimal(6, 2)")] + public decimal? ccperman { get; set; } + + /// + [Column(TypeName = "decimal(4, 1)")] + public decimal? corecom { get; set; } + + /// + public DateTime? codtobso { get; set; } + + /// + public int? ccrapabi { get; set; } + + /// + public int? ccrapobb { get; set; } + + /// + public string? ccriapre { get; set; } + + /// + public string? ccchiint { get; set; } + + } +} diff --git a/ApiPolo/Models/CodiceSegnalazione.cs b/ApiPolo/Models/CodiceSegnalazione.cs new file mode 100644 index 0000000..abc1d5d --- /dev/null +++ b/ApiPolo/Models/CodiceSegnalazione.cs @@ -0,0 +1,21 @@ +using System.ComponentModel.DataAnnotations; + +namespace Api_VT.Models +{ + public class CodiceSegnalazione + { + /// codice segnalazione + [Key] + public string? cscodice { get; set; } + /// descrizione + public string? csdescr { get; set; } + public string? csferimp { get; set; } + /// azienda + [Key] + public string? cscodazi { get; set; } + /// tipo segnalazione + public string? cstipseg { get; set; } + + public DateTime? DataObso { get; set; } + } +} diff --git a/ApiPolo/Models/Commessa.cs b/ApiPolo/Models/Commessa.cs new file mode 100644 index 0000000..8cd2bfb --- /dev/null +++ b/ApiPolo/Models/Commessa.cs @@ -0,0 +1,59 @@ +using Microsoft.EntityFrameworkCore; +using System.ComponentModel.DataAnnotations.Schema; + +namespace ApiPolo.Models +{ + /// ViSTA API_COMMESSE + [Keyless] + public class Commessa + { + /// seriale Commessa + public string? laserial { get; set; } + + /// Codice Commessa + public string? lacodcom { get; set; } + + /// Fase Commessa + public string? ladeslav { get; set; } + + /// data fine validita Commessa + public DateTime? ladatchi { get; set; } + + /// tipo + public string? latipcli { get; set; } + + /// codice cliente + public string? lacodcli { get; set; } + + /// descrizione cliente + public string? andescri { get; set; } + + /// impianto + public string? imcodimp { get; set; } + + /// tipo ind + public string? imindiri1 { get; set; } + + /// indirizzo + public string? imindiri2 { get; set; } + + /// numero + public int? imindiri3 { get; set; } + + /// lettera + public string? imindiri4 { get; set; } + + /// scala + public string? imindiri5 { get; set; } + + /// localita + public string? imlocali { get; set; } + + /// CAP + public string? imcodcap { get; set; } + + /// provincia + public string? improvin { get; set; } + + } +} diff --git a/ApiPolo/Models/CommessaDesc.cs b/ApiPolo/Models/CommessaDesc.cs new file mode 100644 index 0000000..9729b75 --- /dev/null +++ b/ApiPolo/Models/CommessaDesc.cs @@ -0,0 +1,24 @@ +using System.ComponentModel.DataAnnotations; + +namespace ApiPolo.Models +{ + /// Descrizione commessa per SIET + public class CommessaDesc + { + /// seriale Commessa + [Key] + public string? laserial { get; set; } + + /// tipo lavorazione + public string? latiplav { get; set; } + + /// centro di costo - ticket + public string? lacodcen { get; set; } + + /// Codice commessa + public string? lacodcom { get; set; } + + /// Codice tecnico associato alla commessa + public string? latecsup { get; set; } + } +} diff --git a/ApiPolo/Models/Commessa_out.cs b/ApiPolo/Models/Commessa_out.cs new file mode 100644 index 0000000..23e0eb1 --- /dev/null +++ b/ApiPolo/Models/Commessa_out.cs @@ -0,0 +1,66 @@ +namespace ApiPolo.Models +{ + /// ViSTA API_COMMESSE + public class Commessa_out + { + /// Codice Commessa + public string? cncodcan { get; set; } + + /// Descrizione Commessa + public string? cndescan { get; set; } + + /// data fine validita Commessa + public DateTime? cndatfin { get; set; } + + /// tipo + public string? cntipcon { get; set; } + + /// codice cliente + public string? cncodcon { get; set; } + + /// descrizione cliente + public string? andescri { get; set; } + + /// impianto + public string? imcodimp { get; set; } + + /// tipo ind + public string? imindiri1 { get; set; } + + /// indirizzo + public string? imindiri2 { get; set; } + + /// numero + public int? imindiri3 { get; set; } + + /// lettera + public string? imindiri4 { get; set; } + + /// scala + public string? imindiri5 { get; set; } + + /// localita + public string? imlocali { get; set; } + + /// CAP + public string? imcodcap { get; set; } + + /// provincia + public string? improvin { get; set; } + + + + + /// elemento lista formato html + public string? itemList { get; set; } + + /// Error title + public string? err_title { get; set; } + + /// Error deatail + public string? err_detail { get; set; } + + /// Error code + public string? err_status_code { get; set; } + } +} diff --git a/ApiPolo/Models/CommesseAdHoc_out.cs b/ApiPolo/Models/CommesseAdHoc_out.cs new file mode 100644 index 0000000..7cb55c6 --- /dev/null +++ b/ApiPolo/Models/CommesseAdHoc_out.cs @@ -0,0 +1,67 @@ +namespace ApiPolo.Models +{ + /// Oggetto uscita Commessa Lift + public class CommesseAdHoc_out + { + /// seriale Commessa + public string? laserial { get; set; } + + /// Codice Commessa + public string? lacodcom { get; set; } + + /// Fase Commessa + public string? ladeslav { get; set; } + + /// data fine validita Commessa + public DateTime? ladatchi { get; set; } + + /// tipo + public string? latipcli { get; set; } + + /// codice cliente + public string? lacodcli { get; set; } + + /// descrizione cliente + public string? andescri { get; set; } + + /// impianto + public string? imcodimp { get; set; } + + /// tipo ind + public string? imindiri1 { get; set; } + + /// indirizzo + public string? imindiri2 { get; set; } + + /// numero + public int? imindiri3 { get; set; } + + /// lettera + public string? imindiri4 { get; set; } + + /// scala + public string? imindiri5 { get; set; } + + /// localita + public string? imlocali { get; set; } + + /// CAP + public string? imcodcap { get; set; } + + /// provincia + public string? improvin { get; set; } + + + /// elemento lista formato html + public string? itemList { get; set; } + + /// Error title + public string? err_title { get; set; } + + /// Error deatail + public string? err_detail { get; set; } + + /// Error code + public string? err_status_code { get; set; } + } +} diff --git a/ApiPolo/Models/CommesseVT.cs b/ApiPolo/Models/CommesseVT.cs new file mode 100644 index 0000000..8b46b41 --- /dev/null +++ b/ApiPolo/Models/CommesseVT.cs @@ -0,0 +1,66 @@ +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models +{ + /// ViSTA API_COMMESSE - VT + [Keyless] + public class CommesseVT + { + /// seriale Commessa + public string? laserial { get; set; } + + /// Azienda + public string? lacodazi { get; set; } + + /// Codice Commessa + public string? lacodcom { get; set; } + + /// Fase Commessa + public string? ladeslav { get; set; } + + /// data fine validita Commessa + public DateTime? ladatchi { get; set; } + + /// tipo + public string? latipcli { get; set; } + + /// codice cliente + public string? lacodcli { get; set; } + + /// descrizione cliente + public string? andescri { get; set; } + + /// impianto + public string? imcodimp { get; set; } + + /// tipo ind + public string? imindiri1 { get; set; } + + /// indirizzo + public string? imindiri2 { get; set; } + + /// numero + public int? imindiri3 { get; set; } + + /// lettera + public string? imindiri4 { get; set; } + + /// scala + public string? imindiri5 { get; set; } + + /// localita + public string? imlocali { get; set; } + + /// CAP + public string? imcodcap { get; set; } + + /// provincia + public string? improvin { get; set; } + + /// codice impianto - commesse + public string? lacodimp { get; set; } + + /// flag commessa generica cliente + public string? lacomgen { get; set; } + } +} diff --git a/ApiPolo/Models/CommesseVT_Table.cs b/ApiPolo/Models/CommesseVT_Table.cs new file mode 100644 index 0000000..df17a9a --- /dev/null +++ b/ApiPolo/Models/CommesseVT_Table.cs @@ -0,0 +1,37 @@ +using System.ComponentModel.DataAnnotations; + +namespace ApiPolo.Models +{ + /// seriale Commessa + public class CommesseVT_Table + { + /// seriale Commessa + [Key] + public string? laserial { get; set; } + + /// Azienda + [Key] + public string? lacodazi { get; set; } + + /// Codice Commessa + public string? lacodcom { get; set; } + + /// Fase Commessa + public string? ladeslav { get; set; } + + /// data fine validita Commessa + public DateTime? ladatchi { get; set; } + + /// tipo + public string? latipcli { get; set; } + + /// codice cliente + public string? lacodcli { get; set; } + + /// codice impianto + public string? lacodimp { get; set; } + + /// flag commessa generica cliente + public string? lacomgen { get; set; } + } +} diff --git a/ApiPolo/Models/Compo_Impia.cs b/ApiPolo/Models/Compo_Impia.cs new file mode 100644 index 0000000..829c903 --- /dev/null +++ b/ApiPolo/Models/Compo_Impia.cs @@ -0,0 +1,63 @@ +using Microsoft.EntityFrameworkCore; +using System.ComponentModel.DataAnnotations.Schema; + + +namespace ApiPolo.Models +{ + /// + /// Contiene i campi di xxxMICOMIMP (componenti impianto) + /// + [Keyless] + public class Compo_Impia + { + /// + /// codice impianto + /// + public string? cocodimp { get; set; } + + /// + /// codice impianto + /// + public string? cocodazi { get; set; } + + /// + /// indice riga + /// + public int? cprownum { get; set; } + + /// + /// quantità + /// + [Column(TypeName = "decimal(10, 6)")] + public decimal? coqtaart { get; set; } + + /// + /// codice articolo + /// + public string? cocodart { get; set; } + + /// + /// note + /// + public string? co__note { get; set; } + + /// + /// lotto articolo + /// + public string? lotto { get; set; } + + /// + /// matricola articolo + /// + public string? matricola { get; set; } + + /// + /// descrizione articolo + /// + /// + public string? ardesart { get; set; } + + /// descrizione per ogni articolo (se abilitata da configurazioni) + public string? desc_sup { get; set; } + } +} diff --git a/ApiPolo/Models/Compo_Impia_Table.cs b/ApiPolo/Models/Compo_Impia_Table.cs new file mode 100644 index 0000000..87bfec3 --- /dev/null +++ b/ApiPolo/Models/Compo_Impia_Table.cs @@ -0,0 +1,55 @@ +using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations; + +namespace ApiPolo.Models +{ + /// + /// Classe componenti per scrittura db + /// + public class Compo_Impia_Table + { + /// + /// codice impianto + /// + [Key] + public string? cocodimp { get; set; } + + /// + /// codice impianto + /// + [Key] + public string? cocodazi { get; set; } + + /// + /// indice riga + /// + [Key] + public int? cprownum { get; set; } + + /// + /// codice articolo + /// + [Column(TypeName = "decimal(10, 6)")] + public decimal? coqtaart { get; set; } + + /// + /// codice articolo + /// + public string? cocodart { get; set; } + + /// + /// note + /// + public string? co__note { get; set; } + + /// + /// lotto articolo + /// + public string? pilotto { get; set; } + + /// + /// matricola articolo + /// + public string? pimatric { get; set; } + } +} diff --git a/ApiPolo/Models/Compo_Impia_out.cs b/ApiPolo/Models/Compo_Impia_out.cs new file mode 100644 index 0000000..12c5b0b --- /dev/null +++ b/ApiPolo/Models/Compo_Impia_out.cs @@ -0,0 +1,69 @@ +using Microsoft.EntityFrameworkCore; +using System.ComponentModel.DataAnnotations.Schema; + +namespace ApiPolo.Models +{ + /// + /// Contiene i campi di xxxMICOMIMP (componenti impianto) oggetto di output + /// + [Keyless] + public class Compo_Impia_out + { + /// + /// codice impianto + /// + public string? cocodimp { get; set; } + + /// + /// codice impianto + /// + public string? cocodazi { get; set; } + + /// + /// indice riga + /// + public int? cprownum { get; set; } + + /// + /// codice articolo + /// + [Column(TypeName = "decimal(10, 6)")] + public decimal? coqtaart { get; set; } + + /// + /// codice articolo + /// + public string? cocodart { get; set; } + + /// + /// note + /// + public string? co__note { get; set; } + + /// + /// lotto articolo + /// + public string? lotto { get; set; } + + /// + /// matricola articolo + /// + public string? matricola { get; set; } + + /// + /// errore titolo + /// + public string? err_title { get; set; } + + /// + /// errore dettaglio + /// + public string? err_detail { get; set; } + + /// + /// errore status code (200, 500) + /// + public string? err_status_code { get; set; } + + } +} diff --git a/ApiPolo/Models/Configurazione_out.cs b/ApiPolo/Models/Configurazione_out.cs new file mode 100644 index 0000000..2fb3523 --- /dev/null +++ b/ApiPolo/Models/Configurazione_out.cs @@ -0,0 +1,216 @@ +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations; + +namespace ApiPolo.Models +{ + /// + public class Configurazione_out + { + /// azienda + public string? azienda { get; set; } + + /// path file buoni (immagini rapportini) + public string? path_buoni { get; set; } + + /// prefisso dei buoni da chiamata + public string? prefisso_buoni_chia { get; set; } + + /// prefisso dei buoni da mauntenzione + public string? prefisso_buoni_man { get; set; } + + /// url ftp per upload delle immagini + public string? ftp_url { get; set; } + + /// utente ftp per upload delle immagini + public string? ftp_usr { get; set; } + + /// password ftp per upload delle immagini + public string? ftp_pwd { get; set; } + + /// Listino articoli per magazzino + public string? listino { get; set; } + + /// pulsante naviga nelle liste + public bool? abilita_naviga { get; set; } + + /// pulsante telefona nelle liste + public bool? abilita_telefona { get; set; } + + /// abilita funzione + public bool? abilita_chiamate { get; set; } + + /// abilita funzione + public bool? abilita_manutenzioni { get; set; } + + /// barcode abilitato opzionalmente in varie sezioni. Per renderlo obbligatorio vedi flag sott + public bool? abilita_barcode { get; set; } + + /// + public bool? chiamate_accetta { get; set; } + + /// barcode obbligatorio + public bool? chiamate_accetta_barcode { get; set; } + + /// funziona anche offline + public bool? chiamate_accetta_offline { get; set; } + + /// abilita funzione + public bool? chiamate_rifiuta { get; set; } + + /// hiamate_rifiuta_barcode + public bool? chiamate_rifiuta_barcode { get; set; } + + /// funziona anche offline + public bool? chiamate_rifiuta_offline { get; set; } + + /// barcode obbligatorio + public bool? chiamate_chiudi_barcode { get; set; } + + /// barcode obbligatorio + public bool? chiamate_firma_barcode { get; set; } + + /// barcode obbligatorio + public bool? chiamate_chiudi_salva_barcode { get; set; } + + /// abilita funzione + public bool? manutenzioni_accetta { get; set; } + + /// funziona anche offline + public bool? chiamate_chiudi_salva_offline { get; set; } + + /// abilita funzione + public bool? manutenzioni_rifiuta { get; set; } + + /// barcode obbligatorio + public bool? manutenzioni_accetta_barcode { get; set; } + + /// funziona anche offline + public bool? manutenzioni_accetta_offline { get; set; } + + /// barcode obbligatorio + public bool? manutenzioni_chiudi_barcode { get; set; } + + /// barcode obbligatorio + public bool? manutenzioni_firma_barcode { get; set; } + + /// barcode obbligatorio + public bool? manutenzioni_chiudi_salva_barcode { get; set; } + + /// funziona anche offline + public bool? manutenzioni_chiudi_salva_offline { get; set; } + + /// chiede presena DPI prima di scheda + public bool? dpi_checkbox { get; set; } + + /// visualizza anagrafica + public bool? anagrafica { get; set; } + + /// abilita stato impianto + public bool? stato_finale { get; set; } + + /// abilita + public bool? descrizione_intervento { get; set; } + + /// abilita + public bool? composizione_impianto { get; set; } + + /// abilita + public bool? note_intervento { get; set; } + + /// abilita + public bool? esito_intervento { get; set; } + + /// abilita + public bool? ora_inizio_fine { get; set; } + + /// abilita + public bool? materiali { get; set; } + + /// abilita + public bool? diritto_chiamata { get; set; } + + /// abilita + public bool? manodopera { get; set; } + + /// abilita + public bool? spese_viaggio { get; set; } + + /// abilita + public bool? tipo_pagamento { get; set; } + + /// abilita + public bool? note_pagamento { get; set; } + + /// abilita + public bool? causale { get; set; } + + /// abilita + public bool? time_sheet { get; set; } + + /// abilita + public bool? time_sheet_offline { get; set; } + + /// Costo orario intervento + [Column(TypeName = "decimal(8, 3)")] + public decimal? costo_orario { get; set; } + + /// porta ftp + public int? ftp_port { get; set; } + + /// barcode obbligatorio + public bool? manutenzioni_rifiuta_barcode { get; set; } + + /// storico rapportini + public bool? storico { get; set; } + + /// storico impianto + public bool? storico_tecnico { get; set; } + + /// Abilita link storico interventi + public bool? storico_interventi { get; set; } + + /// Abilita link ricerca impianti + public bool? ricerca_impianti { get; set; } + + /// Abilita link storico impianto (solo per chi gestisce il magazzino) + public bool? storico_impianto { get; set; } + + /// Calcolo tempo rapportino automatico + public bool? ora_inizio_fine_automatica { get; set; } + + /// Stampa ora inizio-fine su buono + public bool? stampa_orario { get; set; } + + /// Stampa intestazione su buono + public string? intestazione_stampa { get; set; } + + + /// Seriale chiamata da usare come teplate per inserire chiamata da app (commessa o normale) + public string? seriale_template_chi { get; set; } + + /// 0=non abilitata 1,2,3=abilitata + public Int16? abilita_inserimento_chiamate { get; set; } + + /// Data rapportino editabile + public bool? abilita_data_rapp_edit { get; set; } + + /// articoli impianto in forma decimale + public Int16? numeri_decimali { get; set; } + + /// max num record in ricerca + public int? max_record { get; set; } + + /// storico impianto + public List? aziende_coll { get; set; } + + /// Error Message + public string? err_title { get; set; } + + /// Error Message detail + public string? err_detail { get; set; } + + /// Status + public string? err_status_code { get; set; } + } +} diff --git a/ApiPolo/Models/Configurazioni.cs b/ApiPolo/Models/Configurazioni.cs new file mode 100644 index 0000000..a50ec5f --- /dev/null +++ b/ApiPolo/Models/Configurazioni.cs @@ -0,0 +1,223 @@ +using Microsoft.AspNetCore.Components.RenderTree; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace ApiPolo.Models +{ + /// Configurazioni + public class Configurazioni + { + /// azienda + [Key] + public string? azienda { get; set; } + + /// path file buoni (immagini rapportini) + public string? path_buoni { get; set; } + + /// prefisso dei buoni da chiamata + public string? prefisso_buoni_chia { get; set; } + + /// prefisso dei buoni da mauntenzione + public string? prefisso_buoni_man { get; set; } + + /// url ftp per upload delle immagini + public string? ftp_url { get; set; } + + /// utente ftp per upload delle immagini + public string? ftp_usr { get; set; } + + /// password ftp per upload delle immagini + public string? ftp_pwd { get; set; } + + /// Listino articoli per magazzino + public string? listino { get; set; } + + /// pulsante naviga nelle liste + public bool? abilita_naviga { get; set; } + + /// pulsante telefona nelle liste + public bool? abilita_telefona { get; set; } + + /// abilita funzione + public bool? abilita_chiamate { get; set; } + + /// abilita funzione + public bool? abilita_manutenzioni { get; set; } + + /// barcode abilitato opzionalmente in varie sezioni. Per renderlo obbligatorio vedi flag sott + public bool? abilita_barcode { get; set; } + + /// + public bool? chiamate_accetta { get; set; } + + /// barcode obbligatorio + public bool? chiamate_accetta_barcode { get; set; } + + /// funziona anche offline + public bool? chiamate_accetta_offline { get; set; } + + /// abilita funzione + public bool? chiamate_rifiuta { get; set; } + + /// hiamate_rifiuta_barcode + public bool? chiamate_rifiuta_barcode { get; set; } + + /// funziona anche offline + public bool? chiamate_rifiuta_offline { get; set; } + + /// barcode obbligatorio + public bool? chiamate_chiudi_barcode { get; set; } + + /// barcode obbligatorio + public bool? chiamate_firma_barcode { get; set; } + + /// barcode obbligatorio + public bool? chiamate_chiudi_salva_barcode { get; set; } + + /// abilita funzione + public bool? manutenzioni_accetta { get; set; } + + /// funziona anche offline + public bool? chiamate_chiudi_salva_offline { get; set; } + + /// abilita funzione + public bool? manutenzioni_rifiuta { get; set; } + + /// barcode obbligatorio + public bool? manutenzioni_accetta_barcode { get; set; } + + /// funziona anche offline + public bool? manutenzioni_accetta_offline { get; set; } + + /// barcode obbligatorio + public bool? manutenzioni_chiudi_barcode { get; set; } + + /// barcode obbligatorio + public bool? manutenzioni_firma_barcode { get; set; } + + /// barcode obbligatorio + public bool? manutenzioni_chiudi_salva_barcode { get; set; } + + /// funziona anche offline + public bool? manutenzioni_chiudi_salva_offline { get; set; } + + /// chiede presena DPI prima di scheda + public bool? dpi_checkbox { get; set; } + + /// visualizza anagrafica + public bool? anagrafica { get; set; } + + /// abilita stato impianto + public bool? stato_finale { get; set; } + + /// abilita + public bool? descrizione_intervento { get; set; } + + /// abilita + public bool? composizione_impianto { get; set; } + + /// abilita + public bool? note_intervento { get; set; } + + /// abilita + public bool? esito_intervento { get; set; } + + /// abilita + public bool? ora_inizio_fine { get; set; } + + /// abilita + public bool? materiali { get; set; } + + /// abilita + public bool? diritto_chiamata { get; set; } + + /// abilita + public bool? manodopera { get; set; } + + /// abilita + public bool? spese_viaggio { get; set; } + + /// abilita + public bool? tipo_pagamento { get; set; } + + /// abilita + public bool? note_pagamento { get; set; } + + /// abilita + public bool? causale { get; set; } + + /// abilita + public bool? time_sheet { get; set; } + + /// abilita + public bool? time_sheet_offline { get; set; } + + /// Costo orario intervento + [Column(TypeName = "decimal(8, 3)")] + public decimal? costo_orario { get; set; } + + /// porta ftp + public int? ftp_port { get; set; } + + /// barcode obbligatorio + public bool? manutenzioni_rifiuta_barcode { get; set; } + + /// OBSOLETO + public bool? storico { get; set; } + + /// OBSOLETO + public bool? storico_tecnico { get; set; } + + + + + /// Abilita link storico interventi + public bool? storico_interventi { get; set; } + + /// Abilita link ricerca impianti + public bool? ricerca_impianti { get; set; } + + /// Abilita link storico impianto (solo per chi gestisce il magazzino) + public bool? storico_impianto { get; set; } + + /// Calcolo tempo rapportino automatico + public bool? ora_inizio_fine_automatica { get; set; } + + /// Stampa ora inizio-fine su buono + public bool? stampa_orario { get; set; } + + /// Stampa intestazione su buono + public string? intestazione_stampa { get; set; } + + /// Seriale chiamata da usare come teplate per inserire chiamata da app (commessa o normale) + public string? seriale_template_chi { get; set; } + + /// 0=non abilitata 1,2,3=abilitata + public Int16? abilita_inserimento_chiamate { get; set; } + + /// data rapportino editabile + public bool? abilita_data_rapp_edit { get; set; } + + /// articoli impianto in forma decimale se valore maggiore di 1 e la cifra indica il numero di cifre decimali, altrimenti sono numeri interi + public Int16? numeri_decimali { get; set; } + + /// max num record in ricerca + public int? max_record { get; set; } + + /// rende visibile la riga dei prezzi sul rapportino + public bool? prezzi_visibili { get; set; } + + /// rende visibile la riga dei prezzi sul rapportino + public bool? desc_supp_prodotti_visibile { get; set; } + + /// Azienda adhoc + public string? azienda_adhoc { get; set; } + + /// stampa note intervento nel buono + public bool? note_interv_stampa { get; set; } + + /// stampa note intervento nel buono + public bool? desc_interv_stampa { get; set; } + + } +} diff --git a/ApiPolo/Models/ConfigurazioniDbContext.cs b/ApiPolo/Models/ConfigurazioniDbContext.cs new file mode 100644 index 0000000..6992a47 --- /dev/null +++ b/ApiPolo/Models/ConfigurazioniDbContext.cs @@ -0,0 +1,21 @@ +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models +{ + /// ConfigurazioniDbContext + public class ConfigurazioniDbContext : DbContext + { + /// conf + public DbSet? conf { get; set; } + + /// ConfigurazioniDbContext + public ConfigurazioniDbContext(DbContextOptions options) : base(options) + { + } + /// OnModelCreating + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToTable("Configurazioni"); + } + } +} diff --git a/ApiPolo/Models/DatiAzienda.cs b/ApiPolo/Models/DatiAzienda.cs new file mode 100644 index 0000000..455da9f --- /dev/null +++ b/ApiPolo/Models/DatiAzienda.cs @@ -0,0 +1,31 @@ +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace ApiPolo.Models +{ + /// + public class DatiAzienda + { + /// azienda + [Key] + public string? azienda { get; set; } + + /// tecnico + [Key] + public string? tecnico { get; set; } + + /// Denominazione + public string? ragsoc { get; set; } + + /// url del logo esposto + public string? url_logo { get; set; } + + /// logo + //[NotMapped] + //public IFormFile? logo { get; set; } + public byte[]? logo { get; set; } + + /// testo azienda rapportino + public string? testo_buono { get; set; } + } +} diff --git a/ApiPolo/Models/Error.cs b/ApiPolo/Models/Error.cs new file mode 100644 index 0000000..090fd6f --- /dev/null +++ b/ApiPolo/Models/Error.cs @@ -0,0 +1,15 @@ +namespace ApiPolo.Models +{ + /// Error + public class Error + { + /// Error title + public string? err_title { get; set; } + + /// Error deatail + public string? err_detail { get; set; } + + /// Error code + public string? err_status_code { get; set; } + } +} diff --git a/ApiPolo/Models/Impianto.cs b/ApiPolo/Models/Impianto.cs new file mode 100644 index 0000000..1dbd476 --- /dev/null +++ b/ApiPolo/Models/Impianto.cs @@ -0,0 +1,57 @@ +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models +{ + /// Impianto + [Keyless] + public class Impianto + { + /// Codice Impianto + public string? imcodimp { get; set; } + + /// Descrizione Impianto + public string? imdescri { get; set; } + + /// Tipo indirizzo (Via, piazza..) + public string? imindiri1 { get; set; } + + /// indirizzo + public string? imindiri2 { get; set; } + + /// numero civico + public int? imindiri3 { get; set; } + + /// sottonumero + public string? imindiri4 { get; set; } + + /// scala + public string? imindiri5 { get; set; } + + /// localita + public string? imlocali { get; set; } + + /// Cap + public string? imcodcap { get; set; } + + /// Comune + public string? imcomune { get; set; } + + /// Provincia + public string? improvin { get; set; } + + /// Azienda + public string? imcodazi { get; set; } + + /// cod cliente + public string? imultcli { get; set; } + + /// descrizione cliente + public string? descCliente { get; set; } + + /// Data cancellazione + public DateTime? imfinatt { get; set; } + + /// rif impianto + public string? imrefref { get; set; } + } +} diff --git a/ApiPolo/Models/ImpiantoTable.cs b/ApiPolo/Models/ImpiantoTable.cs new file mode 100644 index 0000000..29b28cf --- /dev/null +++ b/ApiPolo/Models/ImpiantoTable.cs @@ -0,0 +1,52 @@ +using System.ComponentModel.DataAnnotations; + +namespace ApiPolo.Models +{ + /// + public class ImpiantoTable + { + /// Codice Impianto + [Key] + public string? imcodimp { get; set; } + + /// Azienda + [Key] + public string? imcodazi { get; set; } + + /// Descrizione Impianto + public string? imdescri { get; set; } + + /// Tipo indirizzo (Via, piazza..) + public string? imindiri1 { get; set; } + + /// indirizzo + public string? imindiri2 { get; set; } + + /// numero civico + public int? imindiri3 { get; set; } + + /// sottonumero + public string? imindiri4 { get; set; } + + /// scala + public string? imindiri5 { get; set; } + + /// localita + public string? imlocali { get; set; } + + /// Cap + public string? imcodcap { get; set; } + + /// Comune + public string? imcomune { get; set; } + + /// Provincia + public string? improvin { get; set; } + + /// cliente associato + public string? imultcli { get; set; } + + /// Data cancellazione + public DateTime? imfinatt { get; set; } + } +} diff --git a/ApiPolo/Models/Impianto_out.cs b/ApiPolo/Models/Impianto_out.cs new file mode 100644 index 0000000..9d7d921 --- /dev/null +++ b/ApiPolo/Models/Impianto_out.cs @@ -0,0 +1,36 @@ +namespace ApiPolo.Models +{ + /// Impianto out + public class Impianto_out + { + /// Codice Impianto + public string? codimp { get; set; } + + /// Codice Impianto + public string? descimp { get; set; } + + /// Indirizzo Impianto + public string? indiri { get; set; } + + /// Cap + public string? cap { get; set; } + + /// Comune + public string? comune { get; set; } + + /// Provincia + public string? provin { get; set; } + + /// Località + public string? localita { get; set; } + + /// Error title + public string? err_title { get; set; } + + /// Error deatail + public string? err_detail { get; set; } + + /// Error code + public string? err_status_code { get; set; } + } +} diff --git a/ApiPolo/Models/Input.cs b/ApiPolo/Models/Input.cs new file mode 100644 index 0000000..896a67b --- /dev/null +++ b/ApiPolo/Models/Input.cs @@ -0,0 +1,313 @@ +using System.ComponentModel.DataAnnotations.Schema; + +namespace ApiPolo.Models +{ + /// + /// Contiene i campi di input sia per RAPP_NEW che per PRESE + /// + public class Input + { + #region RAPPNEW + + /// + /// Tabella RAPP_NEW: Seriale rapportini + /// + public string? seriale_rapportino { get; set; } + + /// + /// Tabella RAPP_NEW: Tipo rapportini + /// + public string? tipo_rapportino { get; set; } + + /// + /// Tabella RAPP_NEW: Azienda + /// + public string? azienda_impianto { get; set; } + + /// + /// Tabella RAPP_NEW: Codice Impianto + /// + public string? codice_impianto { get; set; } + + /// + /// Tabella RAPP_NEW: Azienda su cui è la chiamata + /// + public string? azienda_chiamata { get; set; } + + /// + /// Tabella RAPP_NEW: Seriale chiamata + /// + public string? seriale_chiamata { get; set; } + + /// + /// Tabella RAPP_NEW: Seriale chiamata + /// + public string? seriale_commessa { get; set; } + + /// + /// Tabella RAPP_NEW: Data rapportino + /// + public DateTime? data_rapportino { get; set; } + + /// + /// Tabella RAPP_NEW: Ora inizio + /// + public string? ora_ini_rapportino { get; set; } + + /// + /// Tabella RAPP_NEW: Tabella RAPP_NEW: minuto inizio + /// + public string? min_ini_rapportino { get; set; } + + /// + /// Tabella RAPP_NEW: Ora fine + /// + public string? ora_fin_rapportino { get; set; } + + /// + /// Tabella RAPP_NEW: Minuto fine + /// + public string? min_fin_rapportino { get; set; } + + /// + /// Tabella RAPP_NEW: codice chiusura + /// + public string? codice_chiusura_1 { get; set; } + + /// + /// Tabella RAPP_NEW: codice chiusura + /// + public string? codice_chiusura_2 { get; set; } + + /// + /// Tabella RAPP_NEW: codice chiusura + /// + public string? codice_chiusura_3 { get; set; } + + /// + /// Tabella RAPP_NEW: codice chiusura + /// + public string? codice_chiusura_4 { get; set; } + + /// + /// Tabella RAPP_NEW: codice chiusura + /// + public string? codice_chiusura_5 { get; set; } + + /// + /// Tabella RAPP_NEW: codice chiusura + /// + public string? codice_chiusura_6 { get; set; } + + /// + /// Tabella RAPP_NEW: codice chiusura + /// + public string? codice_chiusura_7 { get; set; } + + /// + /// Tabella RAPP_NEW: codice chiusura + /// + public string? codice_chiusura_8 { get; set; } + + /// + /// Tabella RAPP_NEW: codice chiusura + /// + public string? codice_chiusura_9 { get; set; } + + /// + /// Tabella RAPP_NEW: codice chiusura + /// + public string? codice_chiusura_10 { get; set; } + + /// + /// Tabella RAPP_NEW: descrizione intervento + /// + public string? descrizione_intervento { get; set; } + + /// + /// Tabella RAPP_NEW: stato + /// + public string? stato_finale { get; set; } + + /// + /// Tabella RAPP_NEW: generato + /// + public string? generato { get; set; } + + /// + /// Tabella RAPP_NEW: azienda tecnico + /// + public string? azienda_tecnico { get; set; } + + /// + /// Tabella RAPP_NEW: codice tecnico + /// + public string? codice_tecnico { get; set; } + + /// + /// Tabella RAPP_NEW: flag rifiutata + /// + public string? rifiutata { get; set; } + + /// + ///Tabella RAPP_NEW: nominativo firma + /// + public string? firma { get; set; } + + /// + /// Tabella RAPP_NEW: flag stato In Carico + /// + public string? incarico { get; set; } + + /// + /// Tabella RAPP_NEW: data validità + /// + public DateTime? data_validita { get; set; } + + /// + /// Tabella RAPP_NEW: pathg immagine buono o firma + /// + public string? immagine { get; set; } + + /// + /// Tabella RAPP_NEW: seriale del buono + /// + public string? ser_buono { get; set; } + + /// + /// Tabella RAPP_NEW: seriale del buono + /// + public string? codice_intervento { get; set; } + + /// + /// Tabella RAPP_NEW: data/ora effettiva del lavoro (nel caso dispositivo offline) + /// + public DateTime? data_effettiva { get; set; } + #endregion + + #region PRESE + /// Tabella PRESE: Azienda + public string? picodazi { get; set; } + + /// Tabella PRESE: Impianto + public string? pimpianto { get; set; } + + /// Tabella PRESE: Codice intervento QUI=? SEM=SEMESTRALE + public string? picodint { get; set; } + + /// Tabella PRESE: Tecnico + public string? picodtec { get; set; } + + /// Tabella PRESE: data della manutenzione + public DateTime? pidatman { get; set; } + + /// Tabella PRESE: Zona manutenzione + public string? pizona { get; set; } + + /// Tabella PRESE: check presa + public string? pichkpre { get; set; } + #endregion + + #region Campi aggiunti + /// + public string? difetti_riscontrati { get; set; } + + /// + public string? lavoro_eseguito { get; set; } + + /// + public string? esito_intervento { get; set; } + + /// + public string? note_intervento { get; set; } + + /// + public string? note_esito { get; set; } + + /// + public string? nuovo_contratto { get; set; } + + /// + [Column(TypeName = "decimal(7, 2)")] + public int? ore_lavoro { get; set; } + + /// + public string? causale { get; set; } + + /// + [Column(TypeName = "decimal(7, 2)")] + public decimal? materiale { get; set; } + + /// + [Column(TypeName = "decimal(7, 2)")] + public decimal? diritto_chiamata { get; set; } + + /// + [Column(TypeName = "decimal(7, 2)")] + public decimal? manodopera { get; set; } + + /// + [Column(TypeName = "decimal(7, 2)")] + public decimal? spese_viaggio { get; set; } + + /// + public string? pagamento { get; set; } + + /// + [Column(TypeName = "decimal(7, 2)")] + public decimal? anticipo { get; set; } + + /// + [Column(TypeName = "decimal(9, 2)")] + public decimal? totale { get; set; } + + /// + public string? note_pagamento { get; set; } + + /// + public string? tipo_intervento { get; set; } + + /// + public string? rafoto1 { get; set; } + + /// + public string? rafoto2 { get; set; } + + /// + public string? rafoto3 { get; set; } + + /// + public string? rafoto4 { get; set; } + + /// + public string? rafoto5 { get; set; } + + /// + public string? rafoto6 { get; set; } + + /// + public string? rafoto7 { get; set; } + + /// + public string? rafoto8 { get; set; } + + /// + public string? rafoto9 { get; set; } + + /// + public string? rafoto10 { get; set; } + + + #endregion + + #region Componenti impianto + /// Componenti impianto aggiunti + public List? compo_add { get; set; } + + /// Componenti impianto eliminati + public List? compo_del { get; set; } + #endregion + + + } +} diff --git a/ApiPolo/Models/LoginModel.cs b/ApiPolo/Models/LoginModel.cs new file mode 100644 index 0000000..059fd98 --- /dev/null +++ b/ApiPolo/Models/LoginModel.cs @@ -0,0 +1,15 @@ +namespace ApiPolo.Models +{ + /// LoginModel + public class LoginModel + { + /// Username + public string? Username { get; set; } + + /// Password + public string? Password { get; set; } + + /// Tenant + public string? Tenant { get; set; } + } +} diff --git a/ApiPolo/Models/LoginOut.cs b/ApiPolo/Models/LoginOut.cs new file mode 100644 index 0000000..0834a98 --- /dev/null +++ b/ApiPolo/Models/LoginOut.cs @@ -0,0 +1,231 @@ +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using System.ComponentModel.DataAnnotations.Schema; + +namespace ApiPolo.Models +{ + /// Conf (configurazioni app) + public class Conf + { + /// pulsante naviga nelle liste + public bool? abilita_naviga { get; set; } + + /// pulsante telefona nelle liste + public bool? abilita_telefona { get; set; } + + /// abilita funzione + public bool? abilita_chiamate { get; set; } + + /// abilita funzione + public bool? abilita_manutenzioni { get; set; } + + /// barcode abilitato opzionalmente in varie sezioni. Per renderlo obbligatorio vedi flag sott + public bool? abilita_barcode { get; set; } + + /// + public bool? chiamate_accetta { get; set; } + + /// barcode obbligatorio + public bool? chiamate_accetta_barcode { get; set; } + + /// funziona anche offline + public bool? chiamate_accetta_offline { get; set; } + + /// abilita funzione + public bool? chiamate_rifiuta { get; set; } + + /// hiamate_rifiuta_barcode + public bool? chiamate_rifiuta_barcode { get; set; } + + /// funziona anche offline + public bool? chiamate_rifiuta_offline { get; set; } + + /// barcode obbligatorio + public bool? chiamate_chiudi_barcode { get; set; } + + /// barcode obbligatorio + public bool? chiamate_firma_barcode { get; set; } + + /// barcode obbligatorio + public bool? chiamate_chiudi_salva_barcode { get; set; } + + /// abilita funzione + public bool? manutenzioni_accetta { get; set; } + + /// funziona anche offline + public bool? chiamate_chiudi_salva_offline { get; set; } + + /// abilita funzione + public bool? manutenzioni_rifiuta { get; set; } + + /// barcode obbligatorio + public bool? manutenzioni_accetta_barcode { get; set; } + + /// funziona anche offline + public bool? manutenzioni_accetta_offline { get; set; } + + /// barcode obbligatorio + public bool? manutenzioni_chiudi_barcode { get; set; } + + /// barcode obbligatorio + public bool? manutenzioni_firma_barcode { get; set; } + + /// barcode obbligatorio + public bool? manutenzioni_chiudi_salva_barcode { get; set; } + + /// funziona anche offline + public bool? manutenzioni_chiudi_salva_offline { get; set; } + + /// chiede presena DPI prima di scheda + public bool? dpi_checkbox { get; set; } + + /// anagrafica visualizza anagrafica + public bool? anagrafica { get; set; } + + /// abilita stato impianto + public bool? stato_finale { get; set; } + + /// abilita + public bool? descrizione_intervento { get; set; } + + /// abilita + public bool? composizione_impianto { get; set; } + + /// abilita + public bool? note_intervento { get; set; } + + /// abilita + public bool? esito_intervento { get; set; } + + /// abilita + public bool? ora_inizio_fine { get; set; } + + /// abilita + public bool? materiali { get; set; } + + /// abilita + public bool? diritto_chiamata { get; set; } + + /// abilita + public bool? manodopera { get; set; } + + /// abilita + public bool? spese_viaggio { get; set; } + + /// abilita + public bool? tipo_pagamento { get; set; } + + /// abilita + public bool? note_pagamento { get; set; } + + /// abilita + public bool? causale { get; set; } + + /// abilita + public bool? time_sheet { get; set; } + + /// abilita + public bool? time_sheet_offline { get; set; } + + /// Costo orario intervento + [Column(TypeName = "decimal(8, 3)")] + public decimal? costo_orario { get; set; } + + /// porta ftp + public int? ftp_port { get; set; } + + /// barcode obbligatorio + public bool? manutenzioni_rifiuta_barcode { get; set; } + + /// storico rapportini abilita + public bool? storico { get; set; } + + /// storico impianto + public bool? storico_tecnico { get; set; } + + /// Abilita link storico interventi + public bool? storico_interventi { get; set; } + + /// Abilita link ricerca impianti + public bool? ricerca_impianti { get; set; } + + /// Abilita link storico impianto (solo per chi gestisce il magazzino) + public bool? storico_impianto { get; set; } + + /// Calcolo tempo rapportino automatico + public bool? ora_inizio_fine_automatica { get; set; } + + /// Stampa ora inizio-fine su buono + public bool? stampa_orario { get; set; } + + /// Stampa intestazione su buono + public string? intestazione_stampa { get; set; } + + /// Seriale chiamata da usare come teplate per inserire chiamata da app (commessa o normale) + public string? seriale_template_chi { get; set; } + + /// 0=non abilitata 1,2,3=abilitata + public Int16? abilita_inserimento_chiamate { get; set; } + + /// data rapportino editabile + public bool? abilita_data_rapp_edit { get; set; } + + /// articoli impianto in forma decimale + public Int16? numeri_decimali { get; set; } + + /// max num record in ricerca + public int? max_record { get; set; } + + /// rende visibile la riga dei prezzi sul rapportino + public bool? prezzi_visibili { get; set; } + + /// rende visibile la riga dei prezzi sul rapportino + public bool? desc_supp_prodotti_visibile { get; set; } + + /// Azienda adhoc + public string? azienda_adhoc { get; set; } + + /// stampa note intervento nel buono + public bool? note_interv_stampa { get; set; } + + /// stampa note intervento nel buono + public bool? desc_interv_stampa { get; set; } + + + } + /// LoginOut (token+user) + public class LoginOut + { + /// token + public string? Tok { get; set; } + + /// token + public string? Tccodice { get; set; } + + /// token + public string? Tcdescri { get; set; } + + /// token + public Conf? Config { get; set; } + + /// storico impianto + public List? aziende_coll { get; set; } + + /// Error Message + public string? err_title { get; set; } + + /// Error Message detail + public string? err_detail { get; set; } + + /// Status + public string? err_status_code { get; set; } + + /// flag admin + public string? Tcsuper { get; set; } + + /// tenant + public string? Tenant { get; set; } + + /// Identifica un utente abilitato al download dell'app + public string? tciden { get; set; } + } +} diff --git a/ApiPolo/Models/Mag_New.cs b/ApiPolo/Models/Mag_New.cs new file mode 100644 index 0000000..1b8e667 --- /dev/null +++ b/ApiPolo/Models/Mag_New.cs @@ -0,0 +1,67 @@ +using Microsoft.EntityFrameworkCore; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace ApiPolo.Models +{ + /// + /// Contiene i campi di MAG_NEW + /// + public class Mag_New + { + /// + [Key] + public string? seriale_rapportino { get; set; } + + /// + [Key] + public int? riga { get; set; } + + /// + public string? magazzino { get; set; } + + /// + public string? articolo { get; set; } + + /// + public string? tipo_movimento { get; set; } + + /// + [Column(TypeName = "decimal(8, 3)")] + public decimal? quantita { get; set; } + + /// + [Column(TypeName = "decimal(10, 2)")] + public decimal? prezzo { get; set; } + + /// + public string? codice_tecnico { get; set; } + + /// + public string? generato { get; set; } + + /// + public string? codlotto { get; set; } + + /// + public string? matricola { get; set; } + + /// descrizione articolo + public string? desc_art { get; set; } + + /// riga impianto + public int? cprownum { get; set; } + + /// codice impianto + public string? codimp { get; set; } + + /// note + public string? note { get; set; } + + /// cpccchk + public string? cpccchk { get; set; } + + /// descrizione per ogni articolo (se abilitata da configurazioni) + public string? desc_sup { get; set; } + } +} diff --git a/ApiPolo/Models/Mag_New_out.cs b/ApiPolo/Models/Mag_New_out.cs new file mode 100644 index 0000000..e97c5ba --- /dev/null +++ b/ApiPolo/Models/Mag_New_out.cs @@ -0,0 +1,72 @@ +using Microsoft.EntityFrameworkCore; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace ApiPolo.Models +{ + /// + [Keyless] + public class Mag_New_out + { + /// + public string? seriale_rapportino { get; set; } + + /// + public int? riga { get; set; } + + /// + public string? magazzino { get; set; } + + /// + public string? articolo { get; set; } + + /// + public string? tipo_movimento { get; set; } + + /// + [Column(TypeName = "decimal(10, 6)")] + public decimal? quantita { get; set; } + + /// + public decimal? prezzo { get; set; } + + /// + public string? codice_tecnico { get; set; } + + /// + public string? generato { get; set; } + + /// + public string? codlotto { get; set; } + + /// + public string? matricola { get; set; } + + /// descrizione articolo + public string? desc_art { get; set; } + + /// riga impianto + public int? cprownum { get; set; } + + /// codice impianto + public string? codimp { get; set; } + + /// note + public string? note { get; set; } + + /// + /// errore titolo + /// + public string? err_title { get; set; } + + /// + /// errore dettaglio + /// + public string? err_detail { get; set; } + + /// + /// errore status code (200, 500) + /// + public string? err_status_code { get; set; } + } +} diff --git a/ApiPolo/Models/Magazzini.cs b/ApiPolo/Models/Magazzini.cs new file mode 100644 index 0000000..2b03a04 --- /dev/null +++ b/ApiPolo/Models/Magazzini.cs @@ -0,0 +1,20 @@ +using System.ComponentModel.DataAnnotations; +namespace ApiPolo.Models +{ + /// + /// Magazzini azienda + /// + public class Magazzini + { + /// + /// codice magazzino + /// + [Key] + public string? mgcodmag { get; set; } + + /// + /// descrizione + /// + public string? mgdesmag { get; set; } + } +} diff --git a/ApiPolo/Models/MagazziniVT.cs b/ApiPolo/Models/MagazziniVT.cs new file mode 100644 index 0000000..a989d50 --- /dev/null +++ b/ApiPolo/Models/MagazziniVT.cs @@ -0,0 +1,29 @@ +using System.ComponentModel.DataAnnotations; + +namespace ApiPolo.Models +{ + public class MagazziniVT + { + /// + /// Azienda + /// + [Key] + public string? Azienda { get; set; } + + /// + /// codice magazzino + /// + [Key] + public string? Mgcodmag { get; set; } + + /// + /// descrizione + /// + public string? Mgdesmag { get; set; } + + /// + /// descrizione + /// + public DateTime? DataObso { get; set; } + } +} diff --git a/ApiPolo/Models/Manprog.cs b/ApiPolo/Models/Manprog.cs new file mode 100644 index 0000000..3375e6e --- /dev/null +++ b/ApiPolo/Models/Manprog.cs @@ -0,0 +1,238 @@ +using Microsoft.EntityFrameworkCore; +using System.ComponentModel.DataAnnotations.Schema; + +namespace ApiPolo.Models +{ + /// + /// Manutenzioni Programmate + /// + [Keyless] + public class Manprog + { + /// + /// MANPROG: codice intervento (BIM=bimestrale, SEM=semestarle,..) + /// + public string? ctcodint { get; set; } + + /// + /// MANPROG: data prossima manutenzione + /// + public DateTime ctdatpro { get; set; } + + /// + /// MANPROG: descrizione intervento + /// + public string? ctdesint { get; set; } + + /// + /// MANPROG: indirizzo 1 impianto + /// + public string? imindiri1 { get; set; } + + /// + /// MANPROG: indirizzo 2 impianto + /// + public string? imindiri2 { get; set; } + + /// + /// MANPROG: indirizzo 3 impianto + /// + public int? imindiri3 { get; set; } + + /// + /// MANPROG: indirizzo 4 impianto + /// + public string? imindiri4 { get; set; } + + /// + /// MANPROG: indirizzo 5 impianto + /// + public string? imindiri5 { get; set; } + + /// + /// MANPROG: localita impianto + /// + public string? imlocali { get; set; } + + /// + /// MANPROG: cap impianto + /// + public string? imcodcap { get; set; } + + /// + /// MANPROG: comune impianto + /// + public string? imcomune { get; set; } + + /// + /// MANPROG: matricola impianto + /// + public string? immatric { get; set; } + + /// + /// MANPROG: numero impianto + /// + public string? imnumimp { get; set; } + + /// + /// MANPROG: ubicazione impianto + /// + public string? imubicaz { get; set; } + + /// + /// MANPROG: provincia 5 impianto + /// + public string? improvin { get; set; } + + /// + /// MANPROG: nazione impianto + /// + public string? ctcodazi { get; set; } + + /// + /// MANPROG: codice impianto + /// + public string? ctcodimp { get; set; } + + /// + /// MANPROG: tecnico descrizione + /// + public string? tcdescri { get; set; } + + /// + /// MANPROG: tecnico codice + /// + public string? tccodice { get; set; } + + + /*RAPP_NEW*/ + /// + /// RAPP_NEW: seriale rapportino + /// + public string? seriale_rapportino { get; set; } + + /// + /// RAPP_NEW: seriale buono + /// + public string? ser_buono { get; set; } + + /// + /// RAPP_NEW: flag generato. Rapportino importato in AdHoc + /// + public string? generato { get; set; } + + /*PRESE*/ + /// + /// PRESE: codice impianto + /// + public string? pimpianto { get; set; } + + /// + /// PRESE: codice intervento (BIM=bimestrale,SEM=semestrale) + /// + public string? picodint { get; set; } + + /// + /// PRESE: data manutenzione + /// + public DateTime? pidatman { get; set; } + + /// + /// errore titolo + /// + public string? err_title { get; set; } + + /// + /// errore dettaglio + /// + public string? err_detail { get; set; } + + /// + /// errore status code (200, 500) + /// + public string? err_status_code { get; set; } + + /// + /// Manutenzioni: telefono 1 impianto + /// + public string? telefono1 { get; set; } + + /// + /// Manutenzioni: telefono 1 impianto + /// + public string? telefono2 { get; set; } + + /// + public string? mpmesgen { get; set; } + + /// + public string? mpmesfeb { get; set; } + + /// + public string? mpmesmar { get; set; } + + /// + public string? mpmesapr { get; set; } + + /// + public string? mpmesmag { get; set; } + + /// + public string? mpmesgiu { get; set; } + + /// + public string? mpmeslug { get; set; } + + /// + public string? mpmesago { get; set; } + + /// + public string? mpmesset { get; set; } + + /// + public string? mpmesott { get; set; } + + /// + public string? mpmesnov { get; set; } + + /// + public string? mpmesdic { get; set; } + + /// + public string? cliente { get; set; } + + /// costo chiamata + [Column(TypeName = "decimal(18, 4)")] + public decimal? chiamata { get; set; } + + /// spese viaggio + [Column(TypeName = "decimal(18, 4)")] + public decimal? spe_viaggio { get; set; } + + /// costo orario ordinario + [Column(TypeName = "decimal(18, 4)")] + public decimal? costo_ordinario { get; set; } + + /// costo orario notturno + [Column(TypeName = "decimal(18, 4)")] + public decimal? costo_notturno { get; set; } + + /// costo orario straordinario + [Column(TypeName = "decimal(18, 4)")] + public decimal? costo_straordinario { get; set; } + + /// costo orario festivo + [Column(TypeName = "decimal(18, 4)")] + public decimal? costo_festivo { get; set; } + + /// Azienda di riferimento associata all'impianto (gestione loghi differenti) + public string? imazirif { get; set; } + + /// Zona Impianto + public string? imzonman { get; set; } + + /// Riferimento Impianto + public string? imrefref { get; set; } + + } +} diff --git a/ApiPolo/Models/Manprog_out.cs b/ApiPolo/Models/Manprog_out.cs new file mode 100644 index 0000000..de4a266 --- /dev/null +++ b/ApiPolo/Models/Manprog_out.cs @@ -0,0 +1,216 @@ +using Microsoft.EntityFrameworkCore; +using System.ComponentModel.DataAnnotations.Schema; + +namespace ApiPolo.Models +{ + /// + /// Manutenzioni Programmate uscita + /// + [Keyless] + public class Manprog_out + { + /// + /// MANPROG: codice intervento (BIM=bimestrale, SEM=semestarle,..) + /// + public string? ctcodint { get; set; } + + /// + /// MANPROG: data prossima manutenzione + /// + public DateTime ctdatpro { get; set; } + + /// + /// MANPROG: descrizione intervento + /// + public string? ctdesint { get; set; } + + /// + /// MANPROG: indirizzo 1 impianto + /// + public string? imindiri1 { get; set; } + + /// + /// MANPROG: indirizzo 2 impianto + /// + public string? imindiri2 { get; set; } + + /// + /// MANPROG: indirizzo 3 impianto + /// + public int? imindiri3 { get; set; } + + /// + /// MANPROG: indirizzo 4 impianto + /// + public string? imindiri4 { get; set; } + + /// + /// MANPROG: indirizzo 5 impianto + /// + public string? imindiri5 { get; set; } + + /// + /// MANPROG: localita impianto + /// + public string? imlocali { get; set; } + + /// + /// MANPROG: cap impianto + /// + public string? imcodcap { get; set; } + + /// + /// MANPROG: comune impianto + /// + public string? imcomune { get; set; } + + /// + /// MANPROG: provincia 5 impianto + /// + public string? improvin { get; set; } + + /// + /// matricola impianto + /// + public string? immatric { get; set; } + + /// + /// numero impianto + /// + public string? imnumimp { get; set; } + + /// + /// ubicazione impianto + /// + public string? imubicaz { get; set; } + + /// + /// MANPROG: nazione impianto + /// + public string? ctcodazi { get; set; } + + /// + /// MANPROG: codice impianto + /// + public string? ctcodimp { get; set; } + + /// + /// MANPROG: tecnico descrizione + /// + public string? tcdescri { get; set; } + + /// + /// MANPROG: tecnico codice + /// + public string? tccodice { get; set; } + + + /*RAPP_NEW*/ + /// + /// RAPP_NEW: seriale rapportino + /// + public string? seriale_rapportino { get; set; } + + /// + /// RAPP_NEW: seriale buono + /// + public string? ser_buono { get; set; } + + /// + /// RAPP_NEW: flag generato. Rapportino importato in AdHoc + /// + public string? generato { get; set; } + + /*PRESE*/ + /// + /// PRESE: codice impianto + /// + public string? pimpianto { get; set; } + + /// + /// PRESE: codice intervento (BIM=bimestrale,SEM=semestrale) + /// + public string? picodint { get; set; } + + /// + /// PRESE: data manutenzione + /// + public DateTime? pidatman { get; set; } + + /// + /// errore titolo + /// + public string? err_title { get; set; } + + /// + /// errore dettaglio + /// + public string? err_detail { get; set; } + + /// + /// errore status code (200, 500) + /// + public string? err_status_code { get; set; } + + /// + /// Manutenzioni: telefono 1 impianto + /// + public string? telefono1 { get; set; } + + /// + /// Manutenzioni: telefono 1 impianto + /// + public string? telefono2 { get; set; } + + /// + /// Manutenzioni: cliente + /// + public string? cliente { get; set; } + + /// costo chiamata + [Column(TypeName = "decimal(18, 4)")] + public decimal? chiamata { get; set; } + + /// spese viaggio + [Column(TypeName = "decimal(18, 4)")] + public decimal? spe_viaggio { get; set; } + + /// costo orario ordinario + [Column(TypeName = "decimal(18, 4)")] + public decimal? costo_ordinario { get; set; } + + /// costo orario notturno + [Column(TypeName = "decimal(18, 4)")] + public decimal? costo_notturno { get; set; } + + /// costo orario straordinario + [Column(TypeName = "decimal(18, 4)")] + public decimal? costo_straordinario { get; set; } + + /// costo orario festivo + [Column(TypeName = "decimal(18, 4)")] + public decimal? costo_festivo { get; set; } + + /// altri dati Manutenzione + public Dictionary? altri { get; set; } + + /// Azienda di riferimento associata all'impianto (gestione loghi differenti) + public string? imazirif { get; set; } + + /// Zona Impianto + public string? imzonman { get; set; } + + /// Riferimento Impianto + public string? imrefref { get; set; } + + /// indirizzo stampa (html) + public string? indirizzo_stampa { get; set; } + + /// impianto per lista (html) + public string? impianto_list { get; set; } + + /// riferimento impianto (html) su buono + public string? riferimento_impianto { get; set; } + + } +} diff --git a/ApiPolo/Models/Notifiche.cs b/ApiPolo/Models/Notifiche.cs new file mode 100644 index 0000000..302a042 --- /dev/null +++ b/ApiPolo/Models/Notifiche.cs @@ -0,0 +1,23 @@ +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models +{ + /// ViSTA Chiamate + [Keyless] + public class Notifiche + { + /// Azienda + public string? picodazi { get; set; } + + /// utente destinastario notifica + public string? picodtec { get; set; } + + /// seriale della chiamata + public string? piserial { get; set; } + + /// data di invio della notifica + public DateTime? pidattim { get; set; } + + + } +} diff --git a/ApiPolo/Models/Output_Chiamate.cs b/ApiPolo/Models/Output_Chiamate.cs new file mode 100644 index 0000000..ce92c52 --- /dev/null +++ b/ApiPolo/Models/Output_Chiamate.cs @@ -0,0 +1,31 @@ +namespace ApiPolo.Models +{ + /// Uscita chiamataTable+chiamate + public class Output_Chiamate + { + /// output di chiamataTable (inserimento in tabella Chiamate) + public ChiamateTableOut? chiamataTable { get; set; } + + /// output di Chiamate_out (inserimento in tabella Rapp_new) + public Chiamate_out? chiamate_Out { get; set; } + + /// output di ChiamateSeriale_out (aggiornamento in tabella in tabella PINUMCHI) + public ChiamataSeriale_out? chiaser_Out { get; set; } + + /// output di ChiamateSeriale_out (aggiornamento in tabella in tabella cpwarn) + public Prog_out? prog_Out { get; set; } + + /// output di ChiamateSeriale_out (aggiornamento in tabella in tabella cpwarn) + public Chiamate_out? uscita { get; set; } + + + /// errore titolo + public string? err_title { get; set; } + + /// errore dettaglio + public string? err_detail { get; set; } + + /// errore status code (200, 500) + public string? err_status_code { get; set; } + } +} diff --git a/ApiPolo/Models/Output_Ricerca.cs b/ApiPolo/Models/Output_Ricerca.cs new file mode 100644 index 0000000..180b29b --- /dev/null +++ b/ApiPolo/Models/Output_Ricerca.cs @@ -0,0 +1,70 @@ +namespace ApiPolo.Models +{ + /// Output ricerca impianti e di ricerca commesse + public class Output_Ricerca + { + /// Codice Commessa + public string? codice_commessa { get; set; } + + /// Descrizione Commessa + public string? desc_commessa { get; set; } + + /// data fine validita Commessa + public DateTime? dt_fine_validita { get; set; } + + /// tipo + public string? tipo_cliente_comm { get; set; } + + /// codice cliente + public string? cliente_comm { get; set; } + + /// descrizione cliente + public string? desc_cliente_comm { get; set; } + + /// impianto + public string? codice_impianto { get; set; } + + /// tipo ind + public string? imindiri1 { get; set; } + + /// indirizzo + public string? imindiri2 { get; set; } + + /// numero + public int? imindiri3 { get; set; } + + /// lettera + public string? imindiri4 { get; set; } + + /// scala + public string? imindiri5 { get; set; } + + /// localita + public string? localita_impianto { get; set; } + + /// CAP + public string? cap_impianto { get; set; } + + /// provincia + public string? provincia_impianto { get; set; } + + /// descrizione + public string? descrizione_impianto { get; set; } + + + + /// elemento lista formato html + public string? itemList { get; set; } + + /// Error title + public string? err_title { get; set; } + + /// Error deatail + public string? err_detail { get; set; } + + /// Error code + public string? err_status_code { get; set; } + + + } +} diff --git a/ApiPolo/Models/Pagam.cs b/ApiPolo/Models/Pagam.cs new file mode 100644 index 0000000..eb89459 --- /dev/null +++ b/ApiPolo/Models/Pagam.cs @@ -0,0 +1,17 @@ +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models +{ + /// + /// Causali pagamento + /// + [Keyless] + public class Pagam + { + /// codice pagamento + public string? pacodice { get; set; } + + /// descrizione pagamento + public string? padescri { get; set; } + } +} diff --git a/ApiPolo/Models/Prese.cs b/ApiPolo/Models/Prese.cs new file mode 100644 index 0000000..5bd28f9 --- /dev/null +++ b/ApiPolo/Models/Prese.cs @@ -0,0 +1,38 @@ +using System.ComponentModel.DataAnnotations; + +namespace ApiPolo.Models +{ + /// + /// Tabella PRESA + /// + public class Prese + { + /// Azienda + [Key] + public string? picodazi { get; set; } + + /// Impianto + [Key] + public string? pimpianto { get; set; } + + /// Codice intervento QUI=? SEM=SEMESTRALE + [Key] + public string? picodint { get; set; } + + /// Tecnico + public string? picodtec { get; set; } + + /// data della manutenzione + [Key] + public DateTime? pidatman { get; set; } + + /// Zona manutenzione + public string? pizona { get; set; } + + /// check presa + public string? pichkpre { get; set; } + + /// cpccchk + public string? cpccchk { get; set; } + } +} diff --git a/ApiPolo/Models/Prog.cs b/ApiPolo/Models/Prog.cs new file mode 100644 index 0000000..3087805 --- /dev/null +++ b/ApiPolo/Models/Prog.cs @@ -0,0 +1,25 @@ +using System.ComponentModel.DataAnnotations; + +namespace ApiPolo.Models +{ + /// + public class Prog + { + /// + [Key] + public string? tablecode { get; set; } + + /// + [Key] + public string? warncode { get; set; } + + /// + public double? autonum { get; set; } + + /// + public string? cpccchk { get; set; } + + /// + public string? autonum_name { get; set; } + } +} diff --git a/ApiPolo/Models/Prog2.cs b/ApiPolo/Models/Prog2.cs new file mode 100644 index 0000000..a78066b --- /dev/null +++ b/ApiPolo/Models/Prog2.cs @@ -0,0 +1,28 @@ +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace ApiPolo.Models +{ + /// + public class Prog2 + { + /// + [Key] + public string? tablecode { get; set; } + + /// + [Key] + public string? warncode { get; set; } + + /// + [Column(TypeName = "decimal(15, 0)")] /// + public decimal? autonum { get; set; } + + /// + public string? cpccchk { get; set; } + + /// + public string? autonum_name { get; set; } + } +} diff --git a/ApiPolo/Models/Prog_out.cs b/ApiPolo/Models/Prog_out.cs new file mode 100644 index 0000000..40543ae --- /dev/null +++ b/ApiPolo/Models/Prog_out.cs @@ -0,0 +1,33 @@ + +namespace ApiPolo.Models +{ + /// + public class Prog_out + { + /// + public string? tablecode { get; set; } + + /// + public string? warncode { get; set; } + + /// + public float? autonum { get; set; } + + /// + public string? cpccchk { get; set; } + + /// + public string? autonum_name { get; set; } + + + + /// errore titolo + public string? err_title { get; set; } + + /// errore dettaglio + public string? err_detail { get; set; } + + /// errore status code (200, 500) + public string? err_status_code { get; set; } + } +} diff --git a/ApiPolo/Models/Progressivo.cs b/ApiPolo/Models/Progressivo.cs new file mode 100644 index 0000000..4073468 --- /dev/null +++ b/ApiPolo/Models/Progressivo.cs @@ -0,0 +1,19 @@ +using System.ComponentModel.DataAnnotations; + +namespace ApiPolo.Models +{ + /// tabella progressivi + public class Progressivo + { + /// Azienda + [Key] + public string? azienda { get; set; } + + /// stringa definisce il tipo di progressivo da gestire + [Key] + public string? tipo_prog { get; set; } + + /// valore progressivo + public int? val_prog { get; set; } + } +} diff --git a/ApiPolo/Models/Progressivo_out.cs b/ApiPolo/Models/Progressivo_out.cs new file mode 100644 index 0000000..e3490c5 --- /dev/null +++ b/ApiPolo/Models/Progressivo_out.cs @@ -0,0 +1,26 @@ +using System.ComponentModel.DataAnnotations; + +namespace ApiPolo.Models +{ + public class Progressivo_out + { + /// Azienda + public string? azienda { get; set; } + + /// stringa definisce il tipo di progressivo da gestire + public string? tipo_prog { get; set; } + + /// valore progressivo + public int? val_prog { get; set; } + + + /// errore titolo + public string? err_title { get; set; } + + /// errore dettaglio + public string? err_detail { get; set; } + + /// errore status code (200, 500) + public string? err_status_code { get; set; } + } +} diff --git a/ApiPolo/Models/Rapp_New.cs b/ApiPolo/Models/Rapp_New.cs new file mode 100644 index 0000000..2a2a8a3 --- /dev/null +++ b/ApiPolo/Models/Rapp_New.cs @@ -0,0 +1,286 @@ +using System.ComponentModel.DataAnnotations; + +namespace ApiPolo.Models +{ + /// Rapp_New + public class Rapp_New + { + /// + /// Seriale rapportini + /// + [Key] + public string? seriale_rapportino { get; set; } + + /// + /// Tipo rapportini + /// + public string? tipo_rapportino { get; set; } + + /// + /// Azienda + /// + public string? azienda_impianto { get; set; } + + /// + /// Codice Impianto + /// + public string? codice_impianto { get; set; } + + /// + /// Azienda su cui è la chiamata + /// + public string? azienda_chiamata { get; set; } + + /// + /// Seriale chiamata + /// + public string? seriale_chiamata { get; set; } + + /// + /// Seriale chiamata + /// + public string? seriale_commessa { get; set; } + + /// + /// Data rapportino + /// + public DateTime? data_rapportino { get; set; } + + /// + /// Ora inizio + /// + public string? ora_ini_rapportino { get; set; } + + /// + /// minuto inizio + /// + public string? min_ini_rapportino { get; set; } + + /// + /// Ora fine + /// + public string? ora_fin_rapportino { get; set; } + + /// + /// Minuto fine + /// + public string? min_fin_rapportino { get; set; } + + /// + /// codice chiusura + /// + public string? codice_chiusura_1 { get; set; } + + /// + /// codice chiusura + /// + public string? codice_chiusura_2 { get; set; } + + /// + /// codice chiusura + /// + public string? codice_chiusura_3 { get; set; } + + /// + /// codice chiusura + /// + public string? codice_chiusura_4 { get; set; } + + /// + /// codice chiusura + /// + public string? codice_chiusura_5 { get; set; } + + /// + /// codice chiusura + /// + public string? codice_chiusura_6 { get; set; } + + /// + /// codice chiusura + /// + public string? codice_chiusura_7 { get; set; } + + /// + /// codice chiusura + /// + public string? codice_chiusura_8 { get; set; } + + /// + /// codice chiusura + /// + public string? codice_chiusura_9 { get; set; } + + /// + /// codice chiusura + /// + public string? codice_chiusura_10 { get; set; } + + /// + /// descrizione intervento + /// + public string? descrizione_intervento { get; set; } + + /// + /// stato + /// + public string? stato_finale { get; set; } + + /// + /// generato + /// + public string? generato { get; set; } + + /// + /// azienda tecnico + /// + public string? azienda_tecnico { get; set; } + + /// + /// codice tecnico + /// + public string? codice_tecnico { get; set; } + + /// + /// flag rifiutata + /// + public string? rifiutata { get; set; } + + /// + /// nminativo firma + /// + public string? firma { get; set; } + + /// + /// flag stato In Carico + /// + public string? incarico { get; set; } + + /// + /// data validità + /// + public DateTime? data_validita { get; set; } + + /// + /// pathg immagine buono o firma + /// + public string? immagine { get; set; } + + /// + /// seriale del buono + /// + public string? ser_buono { get; set; } + + /// + /// data/ora effettiva del lavoro (nel caso dispositivo offline) + /// + public DateTime? data_effettiva { get; set; } + /* + public string? CODICE_GIRO { get; set; } + public string? CODICE_INTERVENTO { get; set; } + */ + + /// + /// codice_intervento (valido per manutenzioni. Esempio: SEM=semestrale) + /// + public string? codice_intervento { get; set; } + + + //Zucchetti sicila + //DIFETTI_RISCONTRATI, LAVORO_ESEGUITO, ESITO_INTERVENTO,NOTE_ESITO, NOTE_INTERVENTO,NUOVO_CONTRATTO, ORE_LAVORO, CAUSALE, MATERIALE, DIRITTO_CHIAMATA, MANODOPERA, SPESE_VIAGGIO, + //PAGAMENTO, ANTICIPO, TOTALE, NOTE_PAGAMENTO, TIPO_INTERVENTO, RAFOTO1, RAFOTO2, RAFOTO3, RAFOTO4, RAFOTO5, RAFOTO6, RAFOTO7, RAFOTO8, RAFOTO9, RAFOTO10, + + /// + public string? difetti_riscontrati { get; set; } + + /// + public string? lavoro_eseguito { get; set; } + + /// + public string? esito_intervento { get; set; } + + /// + public string? note_intervento { get; set; } + + /// + public string? note_esito { get; set; } + + /// + public string? nuovo_contratto { get; set; } + + /// + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(7, 2)")] + public decimal? ore_lavoro { get; set; } + + //public int? ore_lavoro { get; set; } + + /// + public string? causale { get; set; } + + /// + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(7, 2)")] + public decimal? materiale { get; set; } + + /// + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(7, 2)")] + public decimal? diritto_chiamata { get; set; } + + /// + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(7, 2)")] + public decimal? manodopera { get; set; } + + /// + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(7, 2)")] + public decimal? spese_viaggio { get; set; } + + /// + public string? pagamento { get; set; } + + /// + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(7, 2)")] + public decimal? anticipo { get; set; } + + /// + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(9, 2)")] + public decimal? totale { get; set; } + + /// + public string? note_pagamento { get; set; } + + /// + public string? tipo_intervento { get; set; } + + /// + public string? rafoto1 { get; set; } + + /// + public string? rafoto2 { get; set; } + + /// + public string? rafoto3 { get; set; } + + /// + public string? rafoto4 { get; set; } + + /// + public string? rafoto5 { get; set; } + + /// + public string? rafoto6 { get; set; } + + /// + public string? rafoto7 { get; set; } + + /// + public string? rafoto8 { get; set; } + + /// + public string? rafoto9 { get; set; } + + /// + public string? rafoto10 { get; set; } + + + + } +} diff --git a/ApiPolo/Models/Rapp_New_View.cs b/ApiPolo/Models/Rapp_New_View.cs new file mode 100644 index 0000000..05cda46 --- /dev/null +++ b/ApiPolo/Models/Rapp_New_View.cs @@ -0,0 +1,286 @@ +using Microsoft.EntityFrameworkCore; +using System.ComponentModel.DataAnnotations; + +namespace ApiPolo.Models +{ + /// Vista Rapp_New + [Keyless] + public class Rapp_New_View + { + /// Seriale rapportini + public string? seriale_rapportino { get; set; } + + /// + /// Tipo rapportini + /// + public string? tipo_rapportino { get; set; } + + /// + /// Azienda + /// + public string? azienda_impianto { get; set; } + + /// + /// Codice Impianto + /// + public string? codice_impianto { get; set; } + + /// + /// Azienda su cui è la chiamata + /// + public string? azienda_chiamata { get; set; } + + /// + /// Seriale chiamata + /// + public string? seriale_chiamata { get; set; } + + /// + /// Seriale chiamata + /// + public string? seriale_commessa { get; set; } + + /// + /// Data rapportino + /// + public DateTime? data_rapportino { get; set; } + + /// + /// Ora inizio + /// + public string? ora_ini_rapportino { get; set; } + + /// + /// minuto inizio + /// + public string? min_ini_rapportino { get; set; } + + /// + /// Ora fine + /// + public string? ora_fin_rapportino { get; set; } + + /// + /// Minuto fine + /// + public string? min_fin_rapportino { get; set; } + + /// + /// codice chiusura + /// + public string? codice_chiusura_1 { get; set; } + + /// + /// codice chiusura + /// + public string? codice_chiusura_2 { get; set; } + + /// + /// codice chiusura + /// + public string? codice_chiusura_3 { get; set; } + + /// + /// codice chiusura + /// + public string? codice_chiusura_4 { get; set; } + + /// + /// codice chiusura + /// + public string? codice_chiusura_5 { get; set; } + + /// + /// codice chiusura + /// + public string? codice_chiusura_6 { get; set; } + + /// + /// codice chiusura + /// + public string? codice_chiusura_7 { get; set; } + + /// + /// codice chiusura + /// + public string? codice_chiusura_8 { get; set; } + + /// + /// codice chiusura + /// + public string? codice_chiusura_9 { get; set; } + + /// + /// codice chiusura + /// + public string? codice_chiusura_10 { get; set; } + + /// + /// descrizione intervento + /// + public string? descrizione_intervento { get; set; } + + /// + /// stato + /// + public string? stato_finale { get; set; } + + /// + /// generato + /// + public string? generato { get; set; } + + /// + /// azienda tecnico + /// + public string? azienda_tecnico { get; set; } + + /// + /// codice tecnico + /// + public string? codice_tecnico { get; set; } + + /// + /// flag rifiutata + /// + public string? rifiutata { get; set; } + + /// + /// nminativo firma + /// + public string? firma { get; set; } + + /// + /// flag stato In Carico + /// + public string? incarico { get; set; } + + /// + /// data validità + /// + public DateTime? data_validita { get; set; } + + /// + /// pathg immagine buono o firma + /// + public string? immagine { get; set; } + + /// + /// seriale del buono + /// + public string? ser_buono { get; set; } + + /// + /// data/ora effettiva del lavoro (nel caso dispositivo offline) + /// + public DateTime? data_effettiva { get; set; } + /* + public string? CODICE_GIRO { get; set; } + public string? CODICE_INTERVENTO { get; set; } + */ + + /// + /// codice_intervento (valido per manutenzioni. Esempio: SEM=semestrale) + /// + public string? codice_intervento { get; set; } + + + //Zucchetti sicila + //DIFETTI_RISCONTRATI, LAVORO_ESEGUITO, ESITO_INTERVENTO,NOTE_ESITO, NOTE_INTERVENTO,NUOVO_CONTRATTO, ORE_LAVORO, CAUSALE, MATERIALE, DIRITTO_CHIAMATA, MANODOPERA, SPESE_VIAGGIO, + //PAGAMENTO, ANTICIPO, TOTALE, NOTE_PAGAMENTO, TIPO_INTERVENTO, RAFOTO1, RAFOTO2, RAFOTO3, RAFOTO4, RAFOTO5, RAFOTO6, RAFOTO7, RAFOTO8, RAFOTO9, RAFOTO10, + + /// + public string? difetti_riscontrati { get; set; } + + /// + public string? lavoro_eseguito { get; set; } + + /// + public string? esito_intervento { get; set; } + + /// + public string? note_intervento { get; set; } + + /// + public string? note_esito { get; set; } + + /// + public string? nuovo_contratto { get; set; } + + /// + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(7, 2)")] + public decimal? ore_lavoro { get; set; } + + //public int? ore_lavoro { get; set; } + + /// + public string? causale { get; set; } + + /// + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(7, 2)")] + public decimal? materiale { get; set; } + + /// + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(7, 2)")] + public decimal? diritto_chiamata { get; set; } + + /// + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(7, 2)")] + public decimal? manodopera { get; set; } + + /// + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(7, 2)")] + public decimal? spese_viaggio { get; set; } + + /// + public string? pagamento { get; set; } + + /// + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(7, 2)")] + public decimal? anticipo { get; set; } + + /// + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(9, 2)")] + public decimal? totale { get; set; } + + /// + public string? note_pagamento { get; set; } + + /// + public string? tipo_intervento { get; set; } + + /// + public string? rafoto1 { get; set; } + + /// + public string? rafoto2 { get; set; } + + /// + public string? rafoto3 { get; set; } + + /// + public string? rafoto4 { get; set; } + + /// + public string? rafoto5 { get; set; } + + /// + public string? rafoto6 { get; set; } + + /// + public string? rafoto7 { get; set; } + + /// + public string? rafoto8 { get; set; } + + /// + public string? rafoto9 { get; set; } + + /// + public string? rafoto10 { get; set; } + + /// + public byte[]? img2 { get; set; } + + } +} diff --git a/ApiPolo/Models/Rappmast.cs b/ApiPolo/Models/Rappmast.cs new file mode 100644 index 0000000..e24d427 --- /dev/null +++ b/ApiPolo/Models/Rappmast.cs @@ -0,0 +1,515 @@ +using System.ComponentModel.DataAnnotations; + +namespace ApiPolo.Models +{ + /// Rappmast: storico interventi per tecnico + public class Rappmast + { + //raserial, racaurap, raaziimp, racodimp, racodlav, rafaslav, ratipcli, racodcli, racontma, racodver, raazichi, racodchi, racodese, rasergir, raintgir, ranumrap, raalfrap, + //radatrap, raflafat, raflfatt, rautefat, radatfat, racodpag, raazite1, racodte1, raazite2, racodte2, raazite3, racodte3, ranumtec, raorefat, raggfatt, raimpuni, raserint, + //raimptot, radescri, radessup, raserfis, radesfis, raimpfis, rakmvia, raservia, radesvia, raimpuvi, ratotvia, radesmat, rasupmat, raimpmat, radesint, ranotint, rarifcli, ralisrif, + + //racencos, racodcom, racodzon, raseratt, raserpas, radatvis, rastato, ratipint, ramodfat, rascorp, ralcorp, raimpcor, rariclis, radecor, radscor, raflnume, raumvia, raumass, + //cpccchk, raflbloc, raperman, raimpman, raimpmtc, utcc, utcv, utdc, utdv, rascorap, raorefata, raimpunia, raserinta, raimptota, radescria, rastrass, rastrfis, rastrvia, rastrima, + //rastrimv, rastrimf, rastrorf, rastrimat, rastrimvt, rastrda, rastrdf, rastrdv, ranotass, ranotfis, ranotvia, ranotima, ranotimv, ranotimf, ranotorf, ranotimat, ranotimvt, + // ranotda, ranotdf, ranotdv, rafesass, rafesfis, rafesvia, rafesima, rafesimv, rafesimf, rafesorf, rafesimat, rafesimvt, rafesda, rafesdf, rafesdv, raimpuvi2, ratotvia2, raumvia2, + //rakmvia2, racodinte, ranrordi, rastrorfa, ranotorfa, rafesorfa, rastrimaa, ranotimaa, rafesimaa, rastrassa, rastrdaa, ranotassa, ranotdaa, rafesassa, rafesdaa, rastrimata, + // ranotimata, rafesimata, rperiodo, ranumpas, raimppas, raimp_od, raflfoor, piforimp + + /// Seriale rapportini + [Key] + public string? raserial { get; set; } + + /// Causale + public string? racaurap { get; set; } + + /// Azienda + public string? raaziimp { get; set; } + + /// Impianto + public string? racodimp { get; set; } + + /// Lavoro + public string? racodlav { get; set; } + + /// fase Lavoro + public int? rafaslav { get; set; } + + /// tipo cliente + public string? ratipcli { get; set; } + + /// codice cliente + public string? racodcli { get; set; } + + /// contratto manutenzione + public string? racontma { get; set; } + + /// verbale + public string? racodver { get; set; } + + /// azienda chiamata + public string? raazichi { get; set; } + + /// chiamata + public string? racodchi { get; set; } + + /// esercizio + public string? racodese { get; set; } + + /// codice giro + public string? rasergir { get; set; } + + /// intervento giro + public string? raintgir { get; set; } + + /// numero rapportino + public int? ranumrap { get; set; } + + /// serie rapportino + public string? raalfrap { get; set; } + + + // , , , , , , , , , , + /// data rapportino + public DateTime? radatrap { get; set; } + + /// flag da fatturare + public string? raflafat { get; set; } + + /// flag fatturabile + public string? raflfatt { get; set; } + + /// utente fatturabile + public int? rautefat { get; set; } + + /// data fatturabilità + public DateTime? radatfat { get; set; } + + /// codice pagamento + public string? racodpag { get; set; } + + /// azienda tecnico 1 + public string? raazite1 { get; set; } + + /// tecnico 1 + public string? racodte1 { get; set; } + + /// azienda tecnico 2 + public string? raazite2 { get; set; } + + /// tecnico 2 + public string? racodte2 { get; set; } + + /// azienda tecnico 3 + public string? raazite3 { get; set; } + + /// tecnico 3 + public string? racodte3 { get; set; } + + /// tecnici fatturabili + public int? ranumtec { get; set; } + + //11111111111111111111 + + + /// Ore fatturabili + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(7, 4)")] + public decimal? raorefat { get; set; } + + /// giornate fatturabili + public int? raggfatt { get; set; } + + /// Importo unitario + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? raimpuni { get; set; } + + /// servizio assistenza + public string? raserint { get; set; } + + // , , , , , , , , , , , , , , , , , + + /// Importo totale + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? raimptot { get; set; } + + /// descrizione + public string? radescri { get; set; } + + /// Note + public string? radessup { get; set; } + + /// Servizio dir. fisso + public string? raserfis { get; set; } + + /// descrizione dir. fisso + public string? radesfis { get; set; } + + /// Importo dir. fisso + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? raimpfis { get; set; } + + //2222222222222222 + + /// Importo dir. fisso + public int? rakmvia { get; set; } + + /// servizio viaggio + public string? raservia { get; set; } + + /// descrizione viaggio + public string? radesvia { get; set; } + + /// Importo viaggio + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? raimpuvi { get; set; } + + /// Totale viaggio + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? ratotvia { get; set; } + + /// descrizione meteriale + public string? radesmat { get; set; } + + /// Note meteriale + public string? rasupmat { get; set; } + + /// Importo materiali + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? raimpmat { get; set; } + + /// Descrizione intervento + public string? radesint { get; set; } + + /// Note intervento + public string? ranotint { get; set; } + + /// Riferimento cliente + public string? rarifcli { get; set; } + + /// Listino costi + public string? ralisrif { get; set; } + + + + //, , , , , , , , , , , , , , , , , , + + /// centro di costo + public string? racencos { get; set; } + + /// commessa + public string? racodcom { get; set; } + + /// Zona analitica + public string? racodzon { get; set; } + + /// Seriale doc attivo + public string? raseratt { get; set; } + + /// Seriale doc passivo + public string? raserpas { get; set; } + + /// Seriale doc passivo + public DateTime? radatvis { get; set; } + + /// Stato rapportino (Controllato S/N) + public string? rastato { get; set; } + + /// Tipo intervento (Reperibile S/N) + public string? ratipint { get; set; } + + /// Modalita fatturazione + public string? ramodfat { get; set; } + + /// Servizio per fatture a corpo + public string? rascorp { get; set; } + + /// Listino per fatture a corpo + public string? ralcorp { get; set; } + + + //44444444444444444444444444444 + + /// Importo servizio a corpo + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? raimpcor { get; set; } + + /// percentuale ricarico costi materiali + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(6, 2)")] + public decimal? rariclis { get; set; } + + /// descrizione servizio a corpo + public string? radecor { get; set; } + + /// descrizione suppl servizio a corpo + public string? radscor { get; set; } + + /// Numerazione automatica + public string? raflnume { get; set; } + + /// U.M. viaggio + public string? raumvia { get; set; } + + /// U.M. assistenza + public string? raumass { get; set; } + + //, , , , , , , , , , , , , , , , , , + + /// flag assegnazione tecnico da blocchetto + public string? raflbloc { get; set; } + + /// percentuale manodopera + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(6, 2)")] + public decimal? raperman { get; set; } + + /// importo manodopera a corpo + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? raimpman { get; set; } + + /// importo materiale a corpo + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? raimpmtc { get; set; } + + + + //cpccchk, , , , , utcc, utcv, utdc, utdv, rascorap, raorefata, raimpunia, raserinta, raimptota, radescria, + + /// Servizio assistenza ore straordinario + public string? rastrass { get; set; } + + /// Servizio dir. fisso ore straordinario + public string? rastrfis { get; set; } + + /// Servizio viaggio straordinario + public string? rastrvia { get; set; } + + /// importo straord assistenza + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? rastrima { get; set; } + //, , , , + + /// importo straord viaggio + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? rastrimv { get; set; } + + /// importo straord dir. fisso + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? rastrimf { get; set; } + + /// ore fatturabili straordinario + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(7, 4)")] + public decimal? rastrorf { get; set; } + + /// importo totale straord assistenza + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? rastrimat { get; set; } + + /// importo totale straord viaggio + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? rastrimvt { get; set; } + + /// Desc assistenza straordinario + public string? rastrda { get; set; } + + //66666666666666 + + /// Desc dir. fisso straordinario + public string? rastrdf { get; set; } + + /// Desc viaggio straordinario + public string? rastrdv { get; set; } + + /// Servizio assistenza ore notturno + public string? ranotass { get; set; } + + /// Servizio dir. fisso ore notturno + public string? ranotfis { get; set; } + + /// Servizio viaggio notturno + public string? ranotvia { get; set; } + + /// importo notturno assistenza + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? ranotima { get; set; } + + /// importo notturno viaggio + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? ranotimv { get; set; } + + /// importo notturno dir.fisso + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? ranotimf { get; set; } + + /// Ore fatturabili notturno + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(7, 4)")] + public decimal? ranotorf { get; set; } + + /// importo totale notturno assistenza + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? ranotimat { get; set; } + + /// importo totale notturno viaggio + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? ranotimvt { get; set; } + // , , , , , , , , , , , , , , , , , + + ///77777777 + + /// Desc assistenza notturno + public string? ranotda { get; set; } + + /// Desc dir fisso notturno + public string? ranotdf { get; set; } + + /// Desc viaggio notturno + public string? ranotdv { get; set; } + + /// servizio assistenza ore festivo + public string? rafesass { get; set; } + + /// servizio dir. fisso ore festivo + public string? rafesfis { get; set; } + + /// servizio viaggio festivo + public string? rafesvia { get; set; } + + /// importo festivo assistenza + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? rafesima { get; set; } + + /// importo festivo viaggio + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? rafesimv { get; set; } + + /// importo festivo dir. fisso + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? rafesimf { get; set; } + + /// ore fatturabili festivo + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(7, 4)")] + public decimal? rafesorf { get; set; } + + /// importo totale festivo assistenza + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? rafesimat { get; set; } + + /// importo totale festivo viaggio + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? rafesimvt { get; set; } + + /// desc assistenza festivo + public string? rafesda { get; set; } + + /// desc dir fisso festivo + public string? rafesdf { get; set; } + + /// desc viaggio festivo + public string? rafesdv { get; set; } + + //888888888888888888888 + + /// importo unitario viaggio 2 + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? raimpuvi2 { get; set; } + + /// importo totale viaggio 2 + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? ratotvia2 { get; set; } + + /// U.M. viaggio 2 + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? raumvia2 { get; set; } + // , , , , , , , , , , , , , , , , , , + + /// Km totali viaggio 2 + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(6, 2)")] + public decimal? rakmvia2 { get; set; } + + /// codice intervento + public string? racodinte { get; set; } + + /// Numero ordine + public string? ranrordi { get; set; } + + /// ore fatturabili starordinario aiutante + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(7, 4)")] + public decimal? rastrorfa { get; set; } + + /// ore fatturabili notturne aiutante + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(7, 4)")] + public decimal? ranotorfa { get; set; } + + /// ore fatturabili festive aiutante + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(7, 4)")] + public decimal? rafesorfa { get; set; } + + /// importo straordinario aiutante + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? rastrimaa { get; set; } + + /// importo notte aiutante + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? ranotimaa { get; set; } + + /// importo festivo aiutante + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? rafesimaa { get; set; } + + /// servizio assistenza straordinario aiutante + public string? rastrassa { get; set; } + + /// descrizione servizio assistenza aiutante + public string? rastrdaa { get; set; } + + /// descrizione servizio notte aiutante + public string? ranotassa { get; set; } + + /// descrizione servizio festivo aiutante + public string? ranotdaa { get; set; } + + /// servizio festivo aiutante + public string? rafesassa { get; set; } + + /// descrizione festivo aiutante + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? rafesdaa { get; set; } + + /// importo ore straordinario aiutante + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? rastrimata { get; set; } + + //99999999999999999999999999999999 + + // , , , , , , , , , , , , , , , , + + /// importo ore notturne aiutante + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? ranotimata { get; set; } + + /// importo ore festive aiutante + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? rafesimata { get; set; } + + /// periodo + public string? rperiodo { get; set; } + + /// numero pasti + public int? ranumpas { get; set; } + + /// importo pasti + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? raimppas { get; set; } + + /// + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(18, 4)")] + public decimal? raimp_od { get; set; } + + /// flag forza ore lavoro + public string? raflfoor { get; set; } + + /// flag forza impianto + public string? piforimp { get; set; } + + + // , , , , , , , + } +} diff --git a/ApiPolo/Models/Rapportino.cs b/ApiPolo/Models/Rapportino.cs new file mode 100644 index 0000000..2c8a47d --- /dev/null +++ b/ApiPolo/Models/Rapportino.cs @@ -0,0 +1,132 @@ +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models +{ + /// + /// + [Keyless] + public class Rapportino + { + /// + /// Seriale + /// + public string? seriale_rapportino { get; set; } + + /// + /// Azienda + /// + public string? azienda_impianto { get; set; } + + /// + /// Codice Impianto + /// + public string? codice_impianto { get; set; } + + + /// + /// Seriale chiamata + /// + public string? seriale_chiamata { get; set; } + + /// + /// Seriale chiamata + /// + public string? seriale_commessa { get; set; } + + /// + /// Data rapportino + /// + public DateTime? data_rapportino { get; set; } + + /// Codice Cliente + public string? ancodice { get; set; } + + /// Ragione Sociale + public string? andescri { get; set; } + + /// ora inizio rapportino + public string? ora_ini_rapportino { get; set; } + + /// ora inizio rapportino + public string? ora_fin_rapportino { get; set; } + + /// min inizio rapportino + public string? min_ini_rapportino { get; set; } + + /// min inizio rapportino + public string? min_fin_rapportino { get; set; } + + /// codice chiusura 1 + public string? codice_chiusura_1 { get; set; } + + /// codice chiusura 2 + public string? codice_chiusura_2 { get; set; } + + /// codice chiusura 3 + public string? codice_chiusura_3 { get; set; } + + /// codice chiusura 4 + public string? codice_chiusura_4 { get; set; } + + /// codice chiusura 5 + public string? codice_chiusura_5 { get; set; } + + /// codice chiusura 6 + public string? codice_chiusura_6 { get; set; } + + /// codice chiusura 7 + public string? codice_chiusura_7 { get; set; } + + /// codice chiusura 8 + public string? codice_chiusura_8 { get; set; } + + /// codice chiusura 9 + public string? codice_chiusura_9 { get; set; } + + /// codice chiusura 10 + public string? codice_chiusura_10 { get; set; } + + /// descrizione int + public string? descrizione_intervento { get; set; } + + /// tecnico + public string? codice_tecnico { get; set; } + + /// firma + public string? firma { get; set; } + + /// cod intervento + public string? codice_intervento { get; set; } + + /// + public string? note_intervento { get; set; } + + /// + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(7, 2)")] + public decimal? ore_lavoro { get; set; } + + /// + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(7, 2)")] + public decimal? materiale { get; set; } + + /// + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(7, 2)")] + public decimal? diritto_chiamata { get; set; } + + /// + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(7, 2)")] + public decimal? manodopera { get; set; } + + /// + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(7, 2)")] + public decimal? spese_viaggio { get; set; } + + /// + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(7, 2)")] + public decimal? anticipo { get; set; } + + /// + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(9, 2)")] + public decimal? totale { get; set; } + } +} diff --git a/ApiPolo/Models/Registrazione.cs b/ApiPolo/Models/Registrazione.cs new file mode 100644 index 0000000..820050d --- /dev/null +++ b/ApiPolo/Models/Registrazione.cs @@ -0,0 +1,75 @@ +using System.ComponentModel.DataAnnotations; + +namespace ApiPolo.Models +{ + /// Form di registrazione + public class Registrazione + { + /// tipo + [Key] + public int Id { get; set; } + + /// Nome + public string? Nome { get; set; } + + /// Cognome + public string? Cognome { get; set; } + + /// Telefono + public string? Telefono { get; set; } + + /// Cellulare + public string? Cellulare { get; set; } + + /// Email + public string? Email { get; set; } + + /// Email di conferma + public string? EmailConf { get; set; } + + /// Azienda + public string? Azienda { get; set; } + + /// Username + public string? Username { get; set; } + + /// Password + public string? Passwd { get; set; } + + /// Città + public string? Citta { get; set; } + + /// Provincia (sigla) + public string? Provincia { get; set; } + + /// Nazione (sigla) + public string? Nazione { get; set; } + + /// Attivato (S/N) + public string? Attivato { get; set; } + + /// Token registrazione + public string? Token { get; set; } + + /// Form registrazione: check 1 + public bool privacy1 { get; set; } + + /// Form registrazione: check 2 + public bool privacy2 { get; set; } + + /// Form registrazione: check 3 + public bool privacy3 { get; set; } + + /// Form registrazione: check 4 + public bool privacy4 { get; set; } + + /// Richiesta del moduulo Timesheet + public bool ModuloTimesheet { get; set; } + + /// Richiesta del moduulo Rapportini + public bool ModuloRapportini { get; set; } + + /// Ragione sociale + public string? RagioneSociale { get; set; } + } +} diff --git a/ApiPolo/Models/Saldiart.cs b/ApiPolo/Models/Saldiart.cs new file mode 100644 index 0000000..a91004b --- /dev/null +++ b/ApiPolo/Models/Saldiart.cs @@ -0,0 +1,73 @@ +using Microsoft.EntityFrameworkCore; +using System.ComponentModel.DataAnnotations.Schema; + +namespace ApiPolo.Models +{ + /// + /// Contiene i campi di SALDIART + /// + [Keyless] + public class Saldiart + { + /// articolo + public string? slcodice { get; set; } + + /// descrizione articolo + public string? ardesart { get; set; } + + /// magazzino + public string? slcodmag { get; set; } + + /// quantita + [Column(TypeName = "decimal(13, 3)")] + public decimal? slqtaper { get; set; } + + /// matricola + public string? amcodice { get; set; } + + /// lotto + public string? locodice { get; set; } + + /// listino + public string? licodlis { get; set; } + + /// articolo del listino + public string? licodart { get; set; } + + /// data validità listino + public DateTime? lidatatt { get; set; } + + /// quantita + [Column(TypeName = "decimal(12, 3)")] + public decimal? liquanti { get; set; } + + /// prezzo + [Column(TypeName = "decimal(18, 5)")] + public decimal? liprezzo { get; set; } + + /// sconto1 + [Column(TypeName = "decimal(6, 2)")] + public decimal? liscont1 { get; set; } + + /// sconto2 + [Column(TypeName = "decimal(6, 2)")] + public decimal? liscont2 { get; set; } + + /// sconto3 + [Column(TypeName = "decimal(6, 2)")] + public decimal? liscont3 { get; set; } + + /// sconto4 + [Column(TypeName = "decimal(6, 2)")] + public decimal? liscont4 { get; set; } + + /// articolo gestito a matricole(S/N) + public string? gest_matr { get; set; } + + /// articolo gestito a lotti (S e C=si, N=no) + public string? gest_lotti { get; set; } + + /// descrizione per ogni articolo (se abilitata da configurazioni) + public string? desc_sup { get; set; } + } +} diff --git a/ApiPolo/Models/Sostituzione.cs b/ApiPolo/Models/Sostituzione.cs new file mode 100644 index 0000000..614c3c0 --- /dev/null +++ b/ApiPolo/Models/Sostituzione.cs @@ -0,0 +1,27 @@ +using Microsoft.EntityFrameworkCore; +namespace ApiPolo.Models +{ + /// + [Keyless] + public class Sostituzione + { + /// azienda + public string? tscodazi { get; set; } + + /// tecnico + public string? tscodtec { get; set; } + + /// zona + public string? tscodzon { get; set; } + + /// Inizio sostituzione + public DateTime? tsdatain { get; set; } + + /// Fine sostituzione + public DateTime? tsdatafi { get; set; } + + /// codice sostituzione + public string? tscodsos { get; set; } + + } +} diff --git a/ApiPolo/Models/Sto_Imp.cs b/ApiPolo/Models/Sto_Imp.cs new file mode 100644 index 0000000..f39b887 --- /dev/null +++ b/ApiPolo/Models/Sto_Imp.cs @@ -0,0 +1,86 @@ +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using System.ComponentModel.DataAnnotations.Schema; +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models +{ + /// Storico impianti + [Keyless] + public class Sto_Imp + { + /// seriale rapportino + public string? seriale_rapportino { get; set; } + + /// seriale rapportino + public DateTime? data_rapportino { get; set; } + + /// indice riga + public int? riga { get; set; } + + /// codice magazzino + public string? magazzino { get; set; } + + /// codice articolo + public string? articolo { get; set; } + + /// descrizione articolo + public string? desc_art { get; set; } + + /// tipologia movimento (E=eliminato,A=aggiunto,S=sotituito) + public string? tipo_movimento { get; set; } + + /// quantità articolo + [Column(TypeName = "decimal(7, 2)")] + public decimal? quantita { get; set; } + + /// prezzo articolo + [Column(TypeName = "decimal(10, 2)")] + public decimal? prezzo { get; set; } + + /// codice tecnico + public string? codice_tecnico { get; set; } + + /// descrizione tecnico + public string? desc_tecnico { get; set; } + + /// documento generato + public string? generato { get; set; } + + /// note + public string? note { get; set; } + + /// codice lotto articolo + public string? codlotto { get; set; } + + /// matricola articolo + public string? matricola { get; set; } + + /// + public int? cprownum { get; set; } + + /// codice impianto + public string? codimp { get; set; } + + /// descrizione impianto + public string? desc_impianto { get; set; } + + /// azienda impianto + public string? azienda_impianto { get; set; } + + /// tipo indirizzo (via, strada) + public string? indirizzo_tipo { get; set; } + + /// indirizzo + public string? indirizzo { get; set; } + + /// indirizzo numero + public int? indirizzo_num { get; set; } + + /// indirizzo scala + public string? indirizzo_scala { get; set; } + + /// indirizzo sottonumero + public string? indirizzo_num2 { get; set; } + + } +} diff --git a/ApiPolo/Models/Sto_Imp_out.cs b/ApiPolo/Models/Sto_Imp_out.cs new file mode 100644 index 0000000..824e313 --- /dev/null +++ b/ApiPolo/Models/Sto_Imp_out.cs @@ -0,0 +1,31 @@ +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models +{ + /// Storico impianti- output + [Keyless] + public class Sto_Imp_out + { + /// (LISTA)data rapportino + public DateTime? data_rapportino { get; set; } + + /// (LISTA) codice articolo + public string? articolo { get; set; } + + /// (LISTA) tipologia movimento (E=eliminato,A=aggiunto,S=sotituito) + public string? tipo_movimento { get; set; } + + /// dettaglio movimento impianto + public Dictionary? dettaglio { get; set; } + + /// errore titolo + public string? err_title { get; set; } + + /// errore dettaglio + public string? err_detail { get; set; } + + /// errore status code (200, 500) + public string? err_status_code { get; set; } + + } +} diff --git a/ApiPolo/Models/Sto_Rapp.cs b/ApiPolo/Models/Sto_Rapp.cs new file mode 100644 index 0000000..9677120 --- /dev/null +++ b/ApiPolo/Models/Sto_Rapp.cs @@ -0,0 +1,234 @@ +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Internal; + +namespace ApiPolo.Models +{ + /// + /// Storico interventi New + /// + [Keyless] + public class Sto_Rapp + { + + + /// (LISTA) codice tecnico + public string? tccodice { get; set; } + + /// (LISTA) descrizione tecnico + public string? tcdescri { get; set; } + + /// (LISTA) note esito + public string? note_esito { get; set; } + + /// (LISTA) note esito + public DateTime? data_rapportino { get; set; } + + /// stato finale + public string? stato_finale { get; set; } + + /// esito intervento + public string? esito_intervento { get; set; } + + /// descrizione intervento + public string? descrizione_intervento { get; set; } + + /// firma rapportino + public string? firma { get; set; } + + /// seriale chiamata (se chiamata, altrimenti null + public string? seriale_chiamata { get; set; } + + /// seriale buono + public string? ser_buono { get; set; } + + /// difetti riscontrati + public string? difetti_riscontrati { get; set; } + + /// lavoro eseguito + public string? lavoro_eseguito { get; set; } + + /// note intervento + public string? note_intervento { get; set; } + + /// ore lavoro + [Column(TypeName = "decimal(7, 2)")] + public decimal? ore_lavoro { get; set; } + + /// costo materiale + [Column(TypeName = "decimal(7, 2)")] + public decimal? materiale { get; set; } + + /// diritto chiamata + [Column(TypeName = "decimal(7, 2)")] + public decimal? diritto_chiamata { get; set; } + + /// anticipo + [Column(TypeName = "decimal(7, 2)")] + public decimal? anticipo { get; set; } + + /// manodopera + [Column(TypeName = "decimal(7, 2)")] + public decimal? manodopera { get; set; } + + /// spese viaggio + [Column(TypeName = "decimal(7, 2)")] + public decimal? spese_viaggio { get; set; } + + /// pagamento + public string? pagamento { get; set; } + + /// codice impianto + public string? codice_impianto { get; set; } + + /// totale + [Column(TypeName = "decimal(9, 2)")] + public decimal? totale { get; set; } + + /// note pagamento + public string? note_pagamento { get; set; } + + /// tipo intervento + public string? tipo_intervento { get; set; } + + /// rapportino generato in adhoc S/N + public string? generato { get; set; } + + /// azienda tecnico + public string? azienda_tecnico { get; set; } + + /// azienda impianto + public string? azienda_impianto { get; set; } + + /// azienda chiamata + public string? azienda_chiamata { get; set; } + + /// cod chiusura 1 + public string? codice_chiusura_1 { get; set; } + + /// cod chiusura 2 + public string? codice_chiusura_2 { get; set; } + + /// cod chiusura 3 + public string? codice_chiusura_3 { get; set; } + + /// cod chiusura 4 + public string? codice_chiusura_4 { get; set; } + + /// cod chiusura 5 + public string? codice_chiusura_5 { get; set; } + + /// cod chiusura 6 + public string? codice_chiusura_6 { get; set; } + + /// cod chiusura 7 + public string? codice_chiusura_7 { get; set; } + + /// cod chiusura 8 + public string? codice_chiusura_8 { get; set; } + + /// cod chiusura 9 + public string? codice_chiusura_9 { get; set; } + + /// cod chiusura 10 + public string? codice_chiusura_10 { get; set; } + + /// des cod chiusura 1 + public string? cc1 { get; set; } + + /// des cod chiusura 2 + public string? cc2 { get; set; } + + /// des cod chiusura 3 + public string? cc3 { get; set; } + + /// des cod chiusura 4 + public string? cc4 { get; set; } + + /// des cod chiusura 5 + public string? cc5 { get; set; } + + /// des cod chiusura 6 + public string? cc6 { get; set; } + + /// des cod chiusura 7 + public string? cc7 { get; set; } + + /// des cod chiusura 8 + public string? cc8 { get; set; } + + /// des cod chiusura 9 + public string? cc9 { get; set; } + + /// des cod chiusura 10 + public string? cc10 { get; set; } + + + /// des supp cod chiusura 1 + public string? ccds1 { get; set; } + + /// des supp cod chiusura 2 + public string? ccds2 { get; set; } + + /// des supp cod chiusura 3 + public string? ccds3 { get; set; } + + /// des supp cod chiusura 4 + public string? ccds4 { get; set; } + + /// des supp cod chiusura 5 + public string? ccds5 { get; set; } + + /// des supp cod chiusura 6 + public string? ccds6 { get; set; } + + /// des supp cod chiusura 7 + public string? ccds7 { get; set; } + + /// des supp cod chiusura 8 + public string? ccds8 { get; set; } + + /// des supp cod chiusura 9 + public string? ccds9 { get; set; } + + /// des supp cod chiusura 10 + public string? ccds10 { get; set; } + + /// seriale rapportino + public string? seriale_rapportino { get; set; } + + + /// codice intervento manutenzione + public string? codice_intervento { get; set; } + + /// descrizione intervento manutenzione + public string? cidescri { get; set; } + + /// descrizione suppl. intervento manutenzione + public string? cidessup { get; set; } + + /// descrizione suppl. codice intervento manutenzione + public DateTime? data_manutenzione { get; set; } + + /// codice segnalazione chiamata + public string? codice_segnalazione { get; set; } + + /// tipo indirizzo (via, strada) + public string? indirizzo_tipo { get; set; } + + /// indirizzo + public string? indirizzo { get; set; } + + /// indirizzo numero + public int? indirizzo_num { get; set; } + + /// indirizzo scala + public string? indirizzo_scala { get; set; } + + /// indirizzo sottonumero + public string? indirizzo_num2 { get; set; } + + + } +} diff --git a/ApiPolo/Models/Sto_Rapp_out.cs b/ApiPolo/Models/Sto_Rapp_out.cs new file mode 100644 index 0000000..7d6193c --- /dev/null +++ b/ApiPolo/Models/Sto_Rapp_out.cs @@ -0,0 +1,33 @@ +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models +{ + /// ViSTA Chiamate + [Keyless] + public class Sto_Rapp_out + { + /// (LISTA) codice tecnico + public string? tccodice { get; set; } + + /// (LISTA) descrizione tecnico + public string? tcdescri { get; set; } + + /// (LISTA) note esito + public string? note_esito { get; set; } + + /// (LISTA) note esito + public DateTime? data_rapportino { get; set; } + + /// dettaglio rapportino + public Dictionary? dettaglio { get; set; } + + /// errore titolo + public string? err_title { get; set; } + + /// errore dettaglio + public string? err_detail { get; set; } + + /// errore status code (200, 500) + public string? err_status_code { get; set; } + } +} diff --git a/ApiPolo/Models/TabelleDominio.cs b/ApiPolo/Models/TabelleDominio.cs new file mode 100644 index 0000000..c162afb --- /dev/null +++ b/ApiPolo/Models/TabelleDominio.cs @@ -0,0 +1,33 @@ +using Api_VT.Models; + +namespace ApiPolo.Models +{ + /// Tabelle di Dominio + public class TabelleDominio + { + /// lista causali rapportino + public List? cau_rapp { get; set; } + + /// lista causali pagamento + public List? cau_pag { get; set; } + + /// stati impianto + public List? statoImpianto { get; set; } + //public List? statoImpianto { get; set; } + + /// esito intervento + public List? esito { get; set; } + + + } + /// + public class ComboItem + { + /// + public string? chiave { get; set; } + + /// + public string? valore { get; set; } + } + +} diff --git a/ApiPolo/Models/Tecnici.cs b/ApiPolo/Models/Tecnici.cs new file mode 100644 index 0000000..5b9d4d1 --- /dev/null +++ b/ApiPolo/Models/Tecnici.cs @@ -0,0 +1,79 @@ +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models +{ + /// tecnici + [Keyless] + public class Tecnici + { + /// + /// Codice tecnico + /// + public string? tccodice { get; set; } + + /// + /// Descrizione tecnico + /// + public string? Tcdescri { get; set; } + + /// + /// telefono tecnico + /// + public string? tctelef1 { get; set; } + + /// + /// Qualifica tecnico chiamatista + /// + public string? tcchiam { get; set; } + + /// + /// Qualifica tecnico manutentore + /// + public string? tcmanut { get; set; } + + /// + /// Azienda tecnico + /// + public string? tccodazi { get; set; } + + /// + /// Qualifica tecnico supervisore + /// + public string? tcsuper { get; set; } + + /// + /// Username tecnico + /// + public string? tcuser { get; set; } + + /// + /// Password tecnico + /// + public string? tcpwd { get; set; } + + /// + /// Zona tecnico + /// + public string? tdcodzon { get; set; } + + /// + /// data inizio attività tecnico + /// + public DateTime? tddatain { get; set; } + + /// + /// data fine attività tecnico + /// + public DateTime? tddatafi { get; set; } + + /// + /// Flag utente Amministratore per Azienda. Se 1 Amministratore e entra in VT, 0 non entra + /// + public int tccodute { get; set; } + + /// Identifica un utente abilitato al download dell'app + //public string? tciden { get; set; } + + + } +} diff --git a/ApiPolo/Models/TecniciTable.cs b/ApiPolo/Models/TecniciTable.cs new file mode 100644 index 0000000..205e63a --- /dev/null +++ b/ApiPolo/Models/TecniciTable.cs @@ -0,0 +1,51 @@ +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace ApiPolo.Models +{ + /// + /// (Virtual Task) Contiene i campi di TECNICI + /// + public class TecniciTable + { + /// + [Key] + public string? tccodazi { get; set; } + + /// + [Key] + public string? tccodice { get; set; } + + /// + public string? tcdescri { get; set; } + + /// + public string? tctelef1 { get; set; } + + /// + public string? tcuser { get; set; } + + /// + public string? tcpwd { get; set; } + + /// costo ordinario + [Column(TypeName = "decimal(18, 4)")] + public decimal? tccoor { get; set; } + + /// costo notturno + [Column(TypeName = "decimal(18, 4)")] + public decimal? tccono { get; set; } + + /// costo straordinario + [Column(TypeName = "decimal(18, 4)")] + public decimal? tccost { get; set; } + + /// costo festivo + [Column(TypeName = "decimal(18, 4)")] + public decimal? tccofe { get; set; } + + /// data cancellazione + public DateTime? tcdatobs { get; set; } + } +} diff --git a/ApiPolo/Models/Timbratura.cs b/ApiPolo/Models/Timbratura.cs new file mode 100644 index 0000000..df93760 --- /dev/null +++ b/ApiPolo/Models/Timbratura.cs @@ -0,0 +1,55 @@ +using System.ComponentModel.DataAnnotations; + +namespace ApiPolo.Models +{ + /// Tabella Timbrature + public class Timbratura + { + /// chiave primaria + [Key] + public int id { get; set; } + + /// data + public DateTime? data_timbratura { get; set; } + + /// ora inizio + public int ora_ini { get; set; } + + /// minuto inizio + public int min_ini { get; set; } + + /// ora fine + public int ora_fin { get; set; } + + /// minuto fine + public int min_fin { get; set; } + + /// SERIALE commessa + public string? commessa { get; set; } + + /// ore viaggio + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(7, 2)")] + public decimal? ore_viaggio { get; set; } + + /// totale ore + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(7, 2)")] + public decimal? tot_ore { get; set; } + + /// giorno settimana + public int? giorno { get; set; } + + /// azienda + public string? azienda { get; set; } + + /// tecnico + public string? tecnico { get; set; } + + /// cpccchk + public string? cpccchk { get; set; } + + /// note + public string? note { get; set; } + + + } +} diff --git a/ApiPolo/Models/Timbratura_out.cs b/ApiPolo/Models/Timbratura_out.cs new file mode 100644 index 0000000..9dc0ebb --- /dev/null +++ b/ApiPolo/Models/Timbratura_out.cs @@ -0,0 +1,52 @@ +namespace ApiPolo.Models +{ + /// Timbrature OUT + public class Timbratura_out + { + /// id: chiave + public int id { get; set; } + + /// data + public DateTime? data_timbratura { get; set; } + + /// ora inizio + public int ora_ini { get; set; } + + /// minuto inizio + public int min_ini { get; set; } + + /// ora fine + public int ora_fin { get; set; } + + /// minuto fine + public int min_fin { get; set; } + + /// commessa + public string? commessa { get; set; } + + /// ore viaggio + [System.ComponentModel.DataAnnotations.Schema.Column(TypeName = "decimal(7, 2)")] + public decimal? ore_viaggio { get; set; } + + /// giorno settimana + public int? giorno { get; set; } + + /// azienda + public string? azienda { get; set; } + + /// tecnico + public string? tecnico { get; set; } + + /// errore titolo + public string? err_title { get; set; } + + /// errore dettaglio + public string? err_detail { get; set; } + + /// errore status code (200, 500) + public string? err_status_code { get; set; } + + /// note + public string? note { get; set; } + } +} diff --git a/ApiPolo/Models/Token.cs b/ApiPolo/Models/Token.cs new file mode 100644 index 0000000..b47798a --- /dev/null +++ b/ApiPolo/Models/Token.cs @@ -0,0 +1,28 @@ +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace ApiPolo.Models +{ + /// token di login sul device + public class Token + { + /// id + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + [Key] + public int Id { get; set; } + + /// tenant azienda + public string? tenant { get; set; } + + /// utente login + public string? usr { get; set; } + + /// token device + public string? token { get; set; } + + /// timestamp inserimento + public DateTime? ts { get; set; } + + + } +} diff --git a/ApiPolo/Models/TokenDbContext.cs b/ApiPolo/Models/TokenDbContext.cs new file mode 100644 index 0000000..b362e44 --- /dev/null +++ b/ApiPolo/Models/TokenDbContext.cs @@ -0,0 +1,23 @@ +using Microsoft.EntityFrameworkCore; +using System.ComponentModel.DataAnnotations.Schema; + +namespace ApiPolo.Models +{ + /// TokenDbContext + public class TokenDbContext : DbContext + { + /// conf + public DbSet? tok { get; set; } + + /// ConfigurazioniDbContext + public TokenDbContext(DbContextOptions options) : base(options) + { + } + /// OnModelCreating + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToTable("Token"); + //modelBuilder.Entity().Property(p => p.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); + } + } +} diff --git a/ApiPolo/Models/Token_out.cs b/ApiPolo/Models/Token_out.cs new file mode 100644 index 0000000..e8730aa --- /dev/null +++ b/ApiPolo/Models/Token_out.cs @@ -0,0 +1,30 @@ +namespace ApiPolo.Models +{ + /// token di login sul device- output + public class Token_out + { + /// tenant azienda + public string? tenant { get; set; } + + /// utente login + public string? usr { get; set; } + + /// token device + public string? token { get; set; } + + /// timestamp inserimento + public DateTime? ts { get; set; } + + /// Error Message + public string? err_title { get; set; } + + /// Error Message detail + public string? err_detail { get; set; } + + /// Status + public string? err_status_code { get; set; } + + /// response + public string? response { get; set; } + } +} diff --git a/ApiPolo/Models/VT_Buoni_DbContext.cs b/ApiPolo/Models/VT_Buoni_DbContext.cs new file mode 100644 index 0000000..726b093 --- /dev/null +++ b/ApiPolo/Models/VT_Buoni_DbContext.cs @@ -0,0 +1,27 @@ +using ApiPolo.Models.VT_dbcontext; +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models +{ + /// + public class VT_Buoni_DbContext : DbContext + { + /// + public DbSet? buoni { get; set; } + + /// + public VT_Buoni_DbContext(DbContextOptions options) : base(options) + { + } + /// + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToTable("BUONI"); + modelBuilder.Entity().HasKey(table => new + { + table.azienda, + table.ser_buono + }); + } + } +} diff --git a/ApiPolo/Models/VT_dbcontext/VT_ARTICOLI_TABLE_DbContext.cs b/ApiPolo/Models/VT_dbcontext/VT_ARTICOLI_TABLE_DbContext.cs new file mode 100644 index 0000000..d04cf7b --- /dev/null +++ b/ApiPolo/Models/VT_dbcontext/VT_ARTICOLI_TABLE_DbContext.cs @@ -0,0 +1,29 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using System.Collections.Generic; + +namespace ApiPolo.Models.VT_dbcontext +{ + public class VT_ARTICOLI_TABLE_DbContext : DbContext + { + + public DbSet Articoli { get; set; } + + + public VT_ARTICOLI_TABLE_DbContext(DbContextOptions options) : base(options) + { + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToTable("ARTICOLI"); + modelBuilder.Entity().HasKey(Table => new + { + Table.Azienda, + Table.SlCodice + }); // Definizione della chiave primaria composta + //base.OnModelCreating(modelBuilder); + } + } + +} diff --git a/ApiPolo/Models/VT_dbcontext/VT_AZIENDA_RIF_DbContext.cs b/ApiPolo/Models/VT_dbcontext/VT_AZIENDA_RIF_DbContext.cs new file mode 100644 index 0000000..5a9e195 --- /dev/null +++ b/ApiPolo/Models/VT_dbcontext/VT_AZIENDA_RIF_DbContext.cs @@ -0,0 +1,28 @@ + +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models.VT_dbcontext +{ + /// + public class VT_AZIENDA_RIF_DbContext : DbContext + { + /// + public DbSet? Azi { get; set; } + + /// + public VT_AZIENDA_RIF_DbContext(DbContextOptions options) : base(options) + { + } + /// + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToTable("PIAZIRIF"); + modelBuilder.Entity().HasKey(table => new + { + table.piazihoc, + table.picodtec, + table.pirifazi + }); + } + } +} diff --git a/ApiPolo/Models/VT_dbcontext/VT_AZIENDE_PRESENTI_DbContext.cs b/ApiPolo/Models/VT_dbcontext/VT_AZIENDE_PRESENTI_DbContext.cs new file mode 100644 index 0000000..240b5e7 --- /dev/null +++ b/ApiPolo/Models/VT_dbcontext/VT_AZIENDE_PRESENTI_DbContext.cs @@ -0,0 +1,22 @@ +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models.VT_dbcontext +{ + /// + public class VT_AZIENDE_PRESENTI_DbContext : DbContext + { + /// + public DbSet? Aziende { get; set; } + + /// + public VT_AZIENDE_PRESENTI_DbContext(DbContextOptions options) : base(options) + { + } + + /// + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToView("API_AZIENDE_PRESENTI"); + } + } +} diff --git a/ApiPolo/Models/VT_dbcontext/VT_CHIAMATE_DbContext.cs b/ApiPolo/Models/VT_dbcontext/VT_CHIAMATE_DbContext.cs new file mode 100644 index 0000000..2e43dab --- /dev/null +++ b/ApiPolo/Models/VT_dbcontext/VT_CHIAMATE_DbContext.cs @@ -0,0 +1,23 @@ + +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models.VT_dbcontext +{ + /// + public class VT_CHIAMATE_DbContext : DbContext + { + /// + public DbSet? Chiamate { get; set; } + + /// + public VT_CHIAMATE_DbContext(DbContextOptions options) : base(options) + { + } + + /// + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToView("API_CHIAMATE"); + } + } +} diff --git a/ApiPolo/Models/VT_dbcontext/VT_CHIAMATE_MANAGER_DbContext.cs b/ApiPolo/Models/VT_dbcontext/VT_CHIAMATE_MANAGER_DbContext.cs new file mode 100644 index 0000000..435a362 --- /dev/null +++ b/ApiPolo/Models/VT_dbcontext/VT_CHIAMATE_MANAGER_DbContext.cs @@ -0,0 +1,22 @@ +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models.VT_dbcontext +{ + /// + public class VT_CHIAMATE_MANAGER_DbContext : DbContext + { + /// + public DbSet? Chiamate { get; set; } + + /// + public VT_CHIAMATE_MANAGER_DbContext(DbContextOptions options) : base(options) + { + } + + /// + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToView("API_CHIAMATE_VT"); + } + } +} diff --git a/ApiPolo/Models/VT_dbcontext/VT_CHIAMATE_TABLE_DbContext.cs b/ApiPolo/Models/VT_dbcontext/VT_CHIAMATE_TABLE_DbContext.cs new file mode 100644 index 0000000..833e7a8 --- /dev/null +++ b/ApiPolo/Models/VT_dbcontext/VT_CHIAMATE_TABLE_DbContext.cs @@ -0,0 +1,27 @@ + +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models.VT_dbcontext +{ + /// + public class VT_CHIAMATE_TABLE_DbContext : DbContext + { + /// + public DbSet? Chi { get; set; } + + /// + public VT_CHIAMATE_TABLE_DbContext(DbContextOptions options) : base(options) + { + } + + /// + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToTable("CHIAMATE"); + modelBuilder.Entity().HasKey(table => new { + table.chcodazi, + table.chserial + }); + } + } +} diff --git a/ApiPolo/Models/VT_dbcontext/VT_CHIUSURE_DbContext.cs b/ApiPolo/Models/VT_dbcontext/VT_CHIUSURE_DbContext.cs new file mode 100644 index 0000000..cdd734d --- /dev/null +++ b/ApiPolo/Models/VT_dbcontext/VT_CHIUSURE_DbContext.cs @@ -0,0 +1,23 @@ + +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models.VT_dbcontext +{ + /// + public class VT_CHIUSURE_DbContext : DbContext + { + /// + public DbSet? Chiu { get; set; } + + /// + public VT_CHIUSURE_DbContext(DbContextOptions options) : base(options) + { + } + /// + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToView("API_CHIUSURE"); + + } + } +} diff --git a/ApiPolo/Models/VT_dbcontext/VT_CHIUSURE_TABLE_DbContext.cs b/ApiPolo/Models/VT_dbcontext/VT_CHIUSURE_TABLE_DbContext.cs new file mode 100644 index 0000000..857c3f2 --- /dev/null +++ b/ApiPolo/Models/VT_dbcontext/VT_CHIUSURE_TABLE_DbContext.cs @@ -0,0 +1,27 @@ + +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models.VT_dbcontext +{ + /// + public class VT_CHIUSURE_TABLE_DbContext : DbContext + { + /// + public DbSet? Chiutable { get; set; } + + /// + public VT_CHIUSURE_TABLE_DbContext(DbContextOptions options) : base(options) + { + } + /// + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToTable("CCHIUSA"); + modelBuilder.Entity().HasKey(table => new + { + table.cccodazi, + table.cccodice + }); + } + } +} diff --git a/ApiPolo/Models/VT_dbcontext/VT_CODICE_SEGNALAZIONE_DbContext.cs b/ApiPolo/Models/VT_dbcontext/VT_CODICE_SEGNALAZIONE_DbContext.cs new file mode 100644 index 0000000..85c9b37 --- /dev/null +++ b/ApiPolo/Models/VT_dbcontext/VT_CODICE_SEGNALAZIONE_DbContext.cs @@ -0,0 +1,26 @@ +using ApiPolo.Models; +using ApiPolo.Models.VT_dbcontext; +using Microsoft.EntityFrameworkCore; + +namespace Api_VT.Models.VT_dbcontext +{ + public class VT_CODICE_SEGNALAZIONE_DbContext : DbContext + { + public DbSet CodSegn { get; set; } + + public VT_CODICE_SEGNALAZIONE_DbContext(DbContextOptions options) : base(options) + { + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToTable("CODSEGN"); + modelBuilder.Entity().HasKey(Table => new + { + Table.cscodice, + Table.cscodazi + }); // Definizione della chiave primaria composta + + } + } +} diff --git a/ApiPolo/Models/VT_dbcontext/VT_COMMESSE_APP_DbContext.cs b/ApiPolo/Models/VT_dbcontext/VT_COMMESSE_APP_DbContext.cs new file mode 100644 index 0000000..9bcef32 --- /dev/null +++ b/ApiPolo/Models/VT_dbcontext/VT_COMMESSE_APP_DbContext.cs @@ -0,0 +1,22 @@ +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models.VT_dbcontext +{ + /// Questo db context serve per creare l'eleco delle commesse da fornire all'APP + public class VT_COMMESSE_APP_DbContext : DbContext + { + /// + public DbSet? Comm { get; set; } + + /// + public VT_COMMESSE_APP_DbContext(DbContextOptions options) : base(options) + { + } + + /// + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToView("API_COMMESSE"); + } + } +} diff --git a/ApiPolo/Models/VT_dbcontext/VT_COMMESSE_DbContext.cs b/ApiPolo/Models/VT_dbcontext/VT_COMMESSE_DbContext.cs new file mode 100644 index 0000000..5c71a24 --- /dev/null +++ b/ApiPolo/Models/VT_dbcontext/VT_COMMESSE_DbContext.cs @@ -0,0 +1,22 @@ +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models.VT_dbcontext +{ + /// + public class VT_COMMESSE_DbContext : DbContext + { + /// + public DbSet? Comm { get; set; } + + /// + public VT_COMMESSE_DbContext(DbContextOptions options) : base(options) + { + } + + /// + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToView("API_COMMESSE"); + } + } +} diff --git a/ApiPolo/Models/VT_dbcontext/VT_COMMESSE_TABLE_DbContext.cs b/ApiPolo/Models/VT_dbcontext/VT_COMMESSE_TABLE_DbContext.cs new file mode 100644 index 0000000..afee5a0 --- /dev/null +++ b/ApiPolo/Models/VT_dbcontext/VT_COMMESSE_TABLE_DbContext.cs @@ -0,0 +1,26 @@ +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models.VT_dbcontext +{ + /// + public class VT_COMMESSE_TABLE_DbContext : DbContext + { + /// + public DbSet? CommTable { get; set; } + + /// + public VT_COMMESSE_TABLE_DbContext(DbContextOptions options) : base(options) + { + } + + /// + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToTable("COMMESSE"); + modelBuilder.Entity().HasKey(table => new { + table.laserial, + table.lacodazi + }); + } + } +} diff --git a/ApiPolo/Models/VT_dbcontext/VT_CONTI_DbContext.cs b/ApiPolo/Models/VT_dbcontext/VT_CONTI_DbContext.cs new file mode 100644 index 0000000..f310e13 --- /dev/null +++ b/ApiPolo/Models/VT_dbcontext/VT_CONTI_DbContext.cs @@ -0,0 +1,22 @@ +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models.VT_dbcontext +{ + /// + public class VT_CONTI_DbContext : DbContext + { + /// + public DbSet? Anag { get; set; } + + /// + public VT_CONTI_DbContext(DbContextOptions options) : base(options) + { + } + /// + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToView("API_CLIENTI"); + + } + } +} diff --git a/ApiPolo/Models/VT_dbcontext/VT_CONTI_TABLE_DbContext.cs b/ApiPolo/Models/VT_dbcontext/VT_CONTI_TABLE_DbContext.cs new file mode 100644 index 0000000..17d17c2 --- /dev/null +++ b/ApiPolo/Models/VT_dbcontext/VT_CONTI_TABLE_DbContext.cs @@ -0,0 +1,28 @@ + +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models.VT_dbcontext +{ + /// + public class VT_CONTI_TABLE_DbContext : DbContext + { + /// + public DbSet? Anagtable { get; set; } + + /// + public VT_CONTI_TABLE_DbContext(DbContextOptions options) : base(options) + { + } + /// + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToTable("CONTI"); + modelBuilder.Entity().HasKey(table => new + { + table.antipcon, + table.ancodice, + table.ancodazi + }); + } + } +} diff --git a/ApiPolo/Models/VT_dbcontext/VT_DATI_AZIENDA_DbContext.cs b/ApiPolo/Models/VT_dbcontext/VT_DATI_AZIENDA_DbContext.cs new file mode 100644 index 0000000..6fe6935 --- /dev/null +++ b/ApiPolo/Models/VT_dbcontext/VT_DATI_AZIENDA_DbContext.cs @@ -0,0 +1,26 @@ +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models.VT_dbcontext +{ + /// + public class VT_DATI_AZIENDA_DbContext : DbContext + { + /// + public DbSet? Dati { get; set; } + + /// + public VT_DATI_AZIENDA_DbContext(DbContextOptions options) : base(options) + { + } + /// + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToTable("DATI_AZIENDA"); + modelBuilder.Entity().HasKey(table => new + { + table.azienda, + table.tecnico + }); + } + } +} diff --git a/ApiPolo/Models/VT_dbcontext/VT_IMPIANTI_DbContext.cs b/ApiPolo/Models/VT_dbcontext/VT_IMPIANTI_DbContext.cs new file mode 100644 index 0000000..93b0fb5 --- /dev/null +++ b/ApiPolo/Models/VT_dbcontext/VT_IMPIANTI_DbContext.cs @@ -0,0 +1,22 @@ + +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models.VT_dbcontext +{ + /// + public class VT_IMPIANTI_DbContext : DbContext + { + /// + public DbSet? Impia { get; set; } + + /// + public VT_IMPIANTI_DbContext(DbContextOptions options) : base(options) + { + } + /// + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToView("API_IMPIANTI"); + } + } +} diff --git a/ApiPolo/Models/VT_dbcontext/VT_IMPIANTI_MANAGER_DbContext.cs b/ApiPolo/Models/VT_dbcontext/VT_IMPIANTI_MANAGER_DbContext.cs new file mode 100644 index 0000000..250e16b --- /dev/null +++ b/ApiPolo/Models/VT_dbcontext/VT_IMPIANTI_MANAGER_DbContext.cs @@ -0,0 +1,21 @@ +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models.VT_dbcontext +{ + /// + public class VT_IMPIANTI_MANAGER_DbContext : DbContext + { + /// + public DbSet? Impia { get; set; } + + /// + public VT_IMPIANTI_MANAGER_DbContext(DbContextOptions options) : base(options) + { + } + /// + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToView("API_IMPIANTI_VT"); + } + } +} diff --git a/ApiPolo/Models/VT_dbcontext/VT_IMPIANTI_TABLE_DbContext.cs b/ApiPolo/Models/VT_dbcontext/VT_IMPIANTI_TABLE_DbContext.cs new file mode 100644 index 0000000..44d47f8 --- /dev/null +++ b/ApiPolo/Models/VT_dbcontext/VT_IMPIANTI_TABLE_DbContext.cs @@ -0,0 +1,26 @@ +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models.VT_dbcontext +{ + /// + public class VT_IMPIANTI_TABLE_DbContext : DbContext + { + /// + public DbSet? Impia { get; set; } + + /// + public VT_IMPIANTI_TABLE_DbContext(DbContextOptions options) : base(options) + { + } + /// + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToTable("MIMPIANTI"); + modelBuilder.Entity().HasKey(table => new + { + table.imcodimp, + table.imcodazi + }); + } + } +} diff --git a/ApiPolo/Models/VT_dbcontext/VT_MAGAZZINI_DbContext.cs b/ApiPolo/Models/VT_dbcontext/VT_MAGAZZINI_DbContext.cs new file mode 100644 index 0000000..4b81a3e --- /dev/null +++ b/ApiPolo/Models/VT_dbcontext/VT_MAGAZZINI_DbContext.cs @@ -0,0 +1,25 @@ +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models.VT_dbcontext +{ + public class VT_MAGAZZINI_DbContext :DbContext + { + public DbSet Magazzini { get; set; } + + + public VT_MAGAZZINI_DbContext(DbContextOptions options) : base(options) + { + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToTable("MAGAZZINI"); + modelBuilder.Entity().HasKey(Table => new + { + Table.Azienda, + Table.Mgcodmag + }); // Definizione della chiave primaria composta + //base.OnModelCreating(modelBuilder); + } + } +} diff --git a/ApiPolo/Models/VT_dbcontext/VT_MAG_NEW_DbContext.cs b/ApiPolo/Models/VT_dbcontext/VT_MAG_NEW_DbContext.cs new file mode 100644 index 0000000..967266a --- /dev/null +++ b/ApiPolo/Models/VT_dbcontext/VT_MAG_NEW_DbContext.cs @@ -0,0 +1,25 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Internal; + +namespace ApiPolo.Models.VT_dbcontext +{ + public class VT_MAG_NEW_DbContext : DbContext + { + public DbSet MagNewVt { get; set; } + + public VT_MAG_NEW_DbContext(DbContextOptions options) : base(options) + { + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToTable("MAG_NEW_VT"); + modelBuilder.Entity() + .HasKey(Table => new { + Table.Azienda, + Table.Seriale_Rapportino, + Table.Riga + }); + } + } +} diff --git a/ApiPolo/Models/VT_dbcontext/VT_PROGRESSIVI_DbContext.cs b/ApiPolo/Models/VT_dbcontext/VT_PROGRESSIVI_DbContext.cs new file mode 100644 index 0000000..476913a --- /dev/null +++ b/ApiPolo/Models/VT_dbcontext/VT_PROGRESSIVI_DbContext.cs @@ -0,0 +1,27 @@ +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models.VT_dbcontext +{ + /// + public class VT_PROGRESSIVI_DbContext: DbContext + { + /// + public DbSet? progr { get; set; } + + /// + public VT_PROGRESSIVI_DbContext(DbContextOptions options) : base(options) + { + } + /// + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToTable("PROGRESSIVI"); + modelBuilder.Entity().HasKey(table => new + { + table.azienda, + table.tipo_prog + }); + + } + } +} diff --git a/ApiPolo/Models/VT_dbcontext/VT_RAPPORTINI_DbContext.cs b/ApiPolo/Models/VT_dbcontext/VT_RAPPORTINI_DbContext.cs new file mode 100644 index 0000000..a6d307d --- /dev/null +++ b/ApiPolo/Models/VT_dbcontext/VT_RAPPORTINI_DbContext.cs @@ -0,0 +1,22 @@ +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models.VT_dbcontext +{ + /// + public class VT_RAPPORTINI_DbContext : DbContext + { + /// + public DbSet? Rapportini { get; set; } + + /// + public VT_RAPPORTINI_DbContext(DbContextOptions options) : base(options) + { + } + + /// + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToView("API_RAPPORTINI"); + } + } +} diff --git a/ApiPolo/Models/VT_dbcontext/VT_RAPP_NEW_DbContext.cs b/ApiPolo/Models/VT_dbcontext/VT_RAPP_NEW_DbContext.cs new file mode 100644 index 0000000..34ebbc9 --- /dev/null +++ b/ApiPolo/Models/VT_dbcontext/VT_RAPP_NEW_DbContext.cs @@ -0,0 +1,23 @@ + +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models.VT_dbcontext +{ + /// + public class VT_RAPP_NEW_DbContext : DbContext + { + /// + public DbSet? Rapps { get; set; } + + /// + public VT_RAPP_NEW_DbContext(DbContextOptions options) : base(options) + { + } + + /// + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToView("API_RAPP_NEW"); + } + } +} diff --git a/ApiPolo/Models/VT_dbcontext/VT_RAPP_NEW_TABLE_DbContext.cs b/ApiPolo/Models/VT_dbcontext/VT_RAPP_NEW_TABLE_DbContext.cs new file mode 100644 index 0000000..8167e1c --- /dev/null +++ b/ApiPolo/Models/VT_dbcontext/VT_RAPP_NEW_TABLE_DbContext.cs @@ -0,0 +1,27 @@ + +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models.VT_dbcontext +{ + /// + public class VT_RAPP_NEW_TABLE_DbContext : DbContext + { + /// + public DbSet? Rapps { get; set; } + + /// + public VT_RAPP_NEW_TABLE_DbContext(DbContextOptions options) : base(options) + { + } + + /// + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToTable("RAPP_NEW"); + modelBuilder.Entity().HasKey(table => new + { + table.seriale_rapportino + }); + } + } +} diff --git a/ApiPolo/Models/VT_dbcontext/VT_REGISTRAZIONE_DbContext.cs b/ApiPolo/Models/VT_dbcontext/VT_REGISTRAZIONE_DbContext.cs new file mode 100644 index 0000000..1c94d2f --- /dev/null +++ b/ApiPolo/Models/VT_dbcontext/VT_REGISTRAZIONE_DbContext.cs @@ -0,0 +1,25 @@ +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models.VT_dbcontext +{ + /// + public class VT_REGISTRAZIONE_DbContext : DbContext + { + /// + public DbSet? Reg { get; set; } + + /// + public VT_REGISTRAZIONE_DbContext(DbContextOptions options) : base(options) + { + } + /// + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToTable("REGISTRAZIONI"); + modelBuilder.Entity().HasKey(table => new + { + table.Id + }); + } + } +} diff --git a/ApiPolo/Models/VT_dbcontext/VT_SALDIART_DbContext.cs b/ApiPolo/Models/VT_dbcontext/VT_SALDIART_DbContext.cs new file mode 100644 index 0000000..aeab8a7 --- /dev/null +++ b/ApiPolo/Models/VT_dbcontext/VT_SALDIART_DbContext.cs @@ -0,0 +1,18 @@ +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models.VT_dbcontext +{ + public class VT_SALDIART_DbContext : DbContext + { + public DbSet? SaldiArt_VT { get; set; } + + public VT_SALDIART_DbContext(DbContextOptions options) : base(options) + { + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToView("API_SALDIART_PREZZI"); + } + } +} diff --git a/ApiPolo/Models/VT_dbcontext/VT_STO_RAPP_DbContext.cs b/ApiPolo/Models/VT_dbcontext/VT_STO_RAPP_DbContext.cs new file mode 100644 index 0000000..f49a282 --- /dev/null +++ b/ApiPolo/Models/VT_dbcontext/VT_STO_RAPP_DbContext.cs @@ -0,0 +1,23 @@ + +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models.VT_dbcontext +{ + /// + public class VT_STO_RAPP_DbContext : DbContext + { + /// + public DbSet? StoRapp { get; set; } + + /// + public VT_STO_RAPP_DbContext(DbContextOptions options) : base(options) + { + } + + /// + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToView("API_STO_RAPP"); + } + } +} diff --git a/ApiPolo/Models/VT_dbcontext/VT_TECNICI_DbContext.cs b/ApiPolo/Models/VT_dbcontext/VT_TECNICI_DbContext.cs new file mode 100644 index 0000000..531f5c3 --- /dev/null +++ b/ApiPolo/Models/VT_dbcontext/VT_TECNICI_DbContext.cs @@ -0,0 +1,22 @@ +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models.VT_dbcontext +{ + /// + public class VT_TECNICI_DbContext : DbContext + { + /// + public DbSet? Tecnici { get; set; } + + /// + public VT_TECNICI_DbContext(DbContextOptions options) : base(options) + { + } + + /// + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToView("API_TECNICI"); + } + } +} diff --git a/ApiPolo/Models/VT_dbcontext/VT_TECNICI_TABLE_DbContext.cs b/ApiPolo/Models/VT_dbcontext/VT_TECNICI_TABLE_DbContext.cs new file mode 100644 index 0000000..eb2b54c --- /dev/null +++ b/ApiPolo/Models/VT_dbcontext/VT_TECNICI_TABLE_DbContext.cs @@ -0,0 +1,27 @@ + +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models.VT_dbcontext +{ + /// + public class VT_TECNICI_TABLE_DbContext : DbContext + { + /// + public DbSet? Tectable { get; set; } + + /// + public VT_TECNICI_TABLE_DbContext(DbContextOptions options) : base(options) + { + } + /// + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToTable("TECNICI"); + modelBuilder.Entity().HasKey(table => new + { + table.tccodazi, + table.tccodice + }); + } + } +} diff --git a/ApiPolo/Models/VT_dbcontext/VT_TIMBRATURE_DbContext.cs b/ApiPolo/Models/VT_dbcontext/VT_TIMBRATURE_DbContext.cs new file mode 100644 index 0000000..7025000 --- /dev/null +++ b/ApiPolo/Models/VT_dbcontext/VT_TIMBRATURE_DbContext.cs @@ -0,0 +1,26 @@ +using Microsoft.EntityFrameworkCore; + +namespace ApiPolo.Models.VT_dbcontext +{ + /// + public class VT_TIMBRATURE_DbContext : DbContext + { + /// + public DbSet? Timbr { get; set; } + + /// + public VT_TIMBRATURE_DbContext(DbContextOptions options) : base(options) + { + } + + /// + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToTable("TIMBRATURE"); + modelBuilder.Entity().HasKey(table => new + { + table.id + }); + } + } +} diff --git a/ApiPolo/Models/Vt_Mag_New.cs b/ApiPolo/Models/Vt_Mag_New.cs new file mode 100644 index 0000000..79efc63 --- /dev/null +++ b/ApiPolo/Models/Vt_Mag_New.cs @@ -0,0 +1,34 @@ +using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations; + +namespace ApiPolo.Models +{ + public class Vt_Mag_New + { + [Key] + [Required] + public string? Azienda { get; set; } + [Key] + [Required] + public string? Seriale_Rapportino { get; set; } + [Key] + [Required] + public int? Riga { get; set; } + public string? Magazzino { get; set; } + public string? Articolo { get; set; } + public string Tipo_Movimento { get; set; } + public decimal? Quantita { get; set; } + public decimal? Prezzo { get; set; } + public string? Codice_Tecnico { get; set; } + public string? Generato { get; set; } + public string? Note { get; set; } + public string? CodLotto { get; set; } + public string? Matricola { get; set; } + public int? Cprownum { get; set; } + public string? Desc_Art { get; set; } + public string? CodImp { get; set; } + public string? Desc_Sup { get; set; } + public string? Cpccchk { get; set; } + + } +} diff --git a/ApiPolo/Program.cs b/ApiPolo/Program.cs new file mode 100644 index 0000000..b52b560 --- /dev/null +++ b/ApiPolo/Program.cs @@ -0,0 +1,65 @@ +/*using Microsoft.AspNetCore.Authentication.Negotiate; + +var builder = WebApplication.CreateBuilder(args); + +// Add services to the container. + +builder.Services.AddControllers(); +// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle +builder.Services.AddEndpointsApiExplorer(); +builder.Services.AddSwaggerGen(); + +builder.Services.AddAuthentication(NegotiateDefaults.AuthenticationScheme) + .AddNegotiate(); + +builder.Services.AddAuthorization(options => +{ + // By default, all incoming requests will be authorized according to the default policy. + options.FallbackPolicy = options.DefaultPolicy; +}); + +var app = builder.Build(); + +// Configure the HTTP request pipeline. +if (app.Environment.IsDevelopment()) +{ + app.UseSwagger(); + app.UseSwaggerUI(); +} + +app.UseHttpsRedirection(); + +app.UseAuthentication(); +app.UseAuthorization(); + +app.MapControllers(); + +app.Run(); +*/ + +namespace ApiPolo +{ + /// + public class Program + { + /// + public static void Main(string[] args) + { + CreateHostBuilder(args).Build().Run(); + } + + /// + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.UseStartup(); + webBuilder.ConfigureKestrel(options => + { + options.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(5); + }); + //webBuilder.UseUrls("http://10.0.0.187:5000").UseStartup(); + }); + } +} + diff --git a/ApiPolo/Properties/launchSettings.json b/ApiPolo/Properties/launchSettings.json new file mode 100644 index 0000000..3c7651a --- /dev/null +++ b/ApiPolo/Properties/launchSettings.json @@ -0,0 +1,34 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": true, + "anonymousAuthentication": false, + "iisExpress": { + "applicationUrl": "http://localhost:15743", + "sslPort": 44322 + } + }, + "profiles": { + "ApiPolo": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "swagger", + //"applicationUrl": "https://localhost:7068;http://localhost:5068;http://10.0.0.187:5068;https://10.0.0.187:7068", + "applicationUrl": "https://localhost:7068;http://localhost:5068", + + + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "launchUrl": "swagger", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/ApiPolo/SQL/CreaVisteGitoga.txt b/ApiPolo/SQL/CreaVisteGitoga.txt new file mode 100644 index 0000000..9d59fcf --- /dev/null +++ b/ApiPolo/SQL/CreaVisteGitoga.txt @@ -0,0 +1,273 @@ +USE [R80_GITSR] +GO + +/****** Object: View [dbo].[API_CAUS_RAPP] Script Date: 01/02/2023 15:02:43 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE VIEW [dbo].[API_CAUS_RAPP] +AS +select CRCODICE,CRDESCRI,CRRIFATT from [R80_MARROCCO_TEST].dbo.GITSRCAUSRAPP +GO +/****** Object: View [dbo].[API_CHIUSURE] Script Date: 01/02/2023 15:08:38 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE VIEW [dbo].[API_CHIUSURE] +AS +SELECT CCCODAZI, CCCODICE, CCDESCR, cpccchk, CCFLFATT, CCFLREP, CCDESSUP, CCTIPCOD, CCGRUPPO, CCIMPINT, CCIMPMAN, CCSERINT, CCSERMAN, CCNUMORE, CCPERMAN, CORECOM, CODTOBSO, + 0 as CCRAPABI, CCRIAPRE, '' as CCCHIINT, 0 as CCRAPOBB +FROM [R80_MARROCCO_TEST].dbo.CCHIUSA where COALESCE(CODTOBSO, '') = '' and CCCODAZI='GITSR' +GO +/****** Object: View [dbo].[API_CLIENTI] Script Date: 01/02/2023 16:53:11 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + + +CREATE VIEW [dbo].[API_CLIENTI] +AS +SELECT ANTIPCON, ANCODICE, AN_EMAIL,ANCODFIS,ANPARIVA,ANINDIRI, ANTELEFO, ANNUMCEL, AN_EMPEC,ANDESCRI,ANNUMLIS +FROM [R80_MARROCCO_TEST].dbo.GITSRCONTI +WHERE (ANTIPCON = 'C') +GO +/****** Object: View [dbo].[API_PAGAMENTI] Script Date: 01/02/2023 15:10:15 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE VIEW [dbo].[API_PAGAMENTI] +AS +select PACODICE,PADESCRI from [R80_MARROCCO_TEST].dbo.GITSRPAG_AMEN +GO + + + +/****** Object: View [dbo].[API_RAPP_NEW] Script Date: 01/02/2023 16:55:27 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + + +CREATE VIEW [dbo].[API_RAPP_NEW] +AS +SELECT SERIALE_RAPPORTINO, TIPO_RAPPORTINO, AZIENDA_IMPIANTO, CODICE_IMPIANTO, AZIENDA_CHIAMATA, SERIALE_CHIAMATA, SERIALE_COMMESSA, DATA_RAPPORTINO, ORA_INI_RAPPORTINO, + MIN_INI_RAPPORTINO, ORA_FIN_RAPPORTINO, MIN_FIN_RAPPORTINO, CODICE_CHIUSURA_1, CODICE_CHIUSURA_2, CODICE_CHIUSURA_3, CODICE_CHIUSURA_4, CODICE_CHIUSURA_5, + CODICE_CHIUSURA_6, CODICE_CHIUSURA_7, CODICE_CHIUSURA_8, CODICE_CHIUSURA_9, CODICE_CHIUSURA_10, DESCRIZIONE_INTERVENTO, STATO_FINALE, GENERATO, AZIENDA_TECNICO, + CODICE_TECNICO, RIFIUTATA, FIRMA, INCARICO, DATA_VALIDITA, IMMAGINE, '' as SER_BUONO,'' as CODICE_INTERVENTO, + DIFETTI_RISCONTRATI, LAVORO_ESEGUITO, ESITO_INTERVENTO,NOTE_ESITO, NOTE_INTERVENTO,NUOVO_CONTRATTO, ORE_LAVORO, CAUSALE, MATERIALE, DIRITTO_CHIAMATA, MANODOPERA, SPESE_VIAGGIO, + PAGAMENTO, ANTICIPO, TOTALE, NOTE_PAGAMENTO, TIPO_INTERVENTO, RAFOTO1, RAFOTO2, RAFOTO3, RAFOTO4, RAFOTO5, RAFOTO6, RAFOTO7, RAFOTO8, RAFOTO9, RAFOTO10 +FROM [R80_MARROCCO_TEST].dbo.RAPP_NEW where AZIENDA_IMPIANTO='GITSR' +GO +/****** Object: View [dbo].[API_STO_RAPP] Script Date: 01/02/2023 15:13:05 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE VIEW [dbo].[API_STO_RAPP] +AS +select + +PICODINT as codice_intervento, +PIDATMAN as data_manutenzione +,CODINTE.CIDESCRI,CIDESSUP, +TCCODICE,TCDESCRI,/*RAPPMAST.NOTE_ESITO,*/'' as NOTE_ESITO,DATA_RAPPORTINO +, STATO_FINALE,/*RAPPMAST.ESITO_INTERVENTO,*/'' as ESITO_INTERVENTO,DESCRIZIONE_INTERVENTO,FIRMA +,SERIALE_CHIAMATA,TIPO_RAPPORTINO,CHCODSEG as codice_segnalazione,SER_BUONO,DIFETTI_RISCONTRATI,LAVORO_ESEGUITO,NOTE_INTERVENTO +,ORE_LAVORO,MATERIALE,DIRITTO_CHIAMATA,ANTICIPO, MANODOPERA, SPESE_VIAGGIO,pagamento,CODICE_IMPIANTO, +TOTALE,NOTE_PAGAMENTO,TIPO_INTERVENTO,GENERATO,AZIENDA_TECNICO,AZIENDA_IMPIANTO,AZIENDA_CHIAMATA + +,CODICE_CHIUSURA_1,CODICE_CHIUSURA_2,CODICE_CHIUSURA_3,CODICE_CHIUSURA_4,CODICE_CHIUSURA_5, +CODICE_CHIUSURA_6,CODICE_CHIUSURA_7,CODICE_CHIUSURA_8,CODICE_CHIUSURA_9,CODICE_CHIUSURA_10 +,SERIALE_RAPPORTINO + +,DATA_EFFETTIVA +,IMINDIRI1 as indirizzo_tipo ,IMINDIRI2 as indirizzo,IMINDIRI3 as indirizzo_num ,IMINDIRI4 as indirizzo_num2,IMINDIRI5 as indirizzo_scala +,(select CCDESCR from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_1) as cc1 +,(select CCDESCR from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_2) as cc2 +,(select CCDESCR from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_3) as cc3 +,(select CCDESCR from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_4) as cc4 +,(select CCDESCR from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_5) as cc5 +,(select CCDESCR from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_6) as cc6 +,(select CCDESCR from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_7) as cc7 +,(select CCDESCR from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_8) as cc8 +,(select CCDESCR from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_9) as cc9 +,(select CCDESCR from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_10) as cc10 + +,(select CCDESSUP from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_1) as ccds1 +,(select CCDESSUP from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_2) as ccds2 +,(select CCDESSUP from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_3) as ccds3 +,(select CCDESSUP from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_4) as ccds4 +,(select CCDESSUP from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_5) as ccds5 +,(select CCDESSUP from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_6) as ccds6 +,(select CCDESSUP from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_7) as ccds7 +,(select CCDESSUP from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_8) as ccds8 +,(select CCDESSUP from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_9) as ccds9 +,(select CCDESSUP from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_10) as ccds10 + +from [R80_MARROCCO_TEST].dbo.GITSRRAPPMAST RAPPMAST left outer join [R80_MARROCCO_TEST].dbo.RAPP_NEW on RASERIAL=SERIALE_RAPPORTINO +left outer join [R80_MARROCCO_TEST].dbo.TECNICI on RACODTE1=TCCODICE +left outer join [R80_MARROCCO_TEST].dbo.CHIAMATE on CHCODAZI='GITSR' and CHSERIAL=SERIALE_CHIAMATA and TIPO_RAPPORTINO='3' +left outer join [R80_MARROCCO_TEST].dbo.PIPRESA on PIMPIANTO=CODICE_IMPIANTO and PICODINT=CODICE_INTERVENTO and PICODAZI='GITSR' +LEFT OUTER JOIN [R80_MARROCCO_TEST].dbo.CODINTE ON PICODINT = [R80_MARROCCO_TEST].dbo.CODINTE.CICODICE +LEFT OUTER JOIN [R80_MARROCCO_TEST].dbo.MIMPIANTI ON AZIENDA_IMPIANTO = [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMCODAZI AND CODICE_IMPIANTO = [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMCODIMP +where SERIALE_RAPPORTINO is not null +and DATA_RAPPORTINO>=DATEADD(month, -2, GETDATE()) +GO +/****** Object: View [dbo].[API_IMPIANTI] Script Date: 01/02/2023 15:24:18 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE VIEW [dbo].[API_IMPIANTI] +AS +SELECT +[R80_MARROCCO_TEST].dbo.MIMPIANTI.IMCODAZI, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMCODIMP, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMDESCRI, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMTIPOIM, +[R80_MARROCCO_TEST].dbo.MIMPIANTI.IMMATRIC, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMNUMIMP, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMULTCLI, +[R80_MARROCCO_TEST].dbo.MIMPIANTI.IMULTDCL, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMULTAMM, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMULTDAM, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMULTTAM, +[R80_MARROCCO_TEST].dbo.MIMPIANTI.IMINDIRI1, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMINDIRI2, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMINDIRI3, +[R80_MARROCCO_TEST].dbo.MIMPIANTI.IMINDIRI4, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMINDIRI5, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMLOCALI, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMCODCAP, +[R80_MARROCCO_TEST].dbo.MIMPIANTI.IMCOMUNE, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMPROVIN, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMCODNAZ, +[R80_MARROCCO_TEST].dbo.MIMPIANTI.IMUBICAZ, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMZONMAN, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMFLPUPR, [R80_MARROCCO_TEST].dbo.MIMPIANTI.UTDC, +[R80_MARROCCO_TEST].dbo.MIMPIANTI.UTDV, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMPIAMAN, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMDATATT, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMZONCHI, +[R80_MARROCCO_TEST].dbo.MIMPIANTI.IMZONSUP, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMDAINMA, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMDAFIMA, +[R80_MARROCCO_TEST].dbo.MIMPIANTI.IMDATCOS, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMTELESO, [R80_MARROCCO_TEST].dbo.API_CLIENTI.AN_EMAIL,'' as IMAZIRIF +FROM +[R80_MARROCCO_TEST].dbo.MIMPIANTI INNER JOIN +[R80_MARROCCO_TEST].dbo.API_CLIENTI ON [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMULTCLI = [R80_MARROCCO_TEST].dbo.API_CLIENTI.ANCODICE +where [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMCODAZI='GITSR' +GO +/****** Object: View [dbo].[API_TECNICI] Script Date: 01/02/2023 15:31:11 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE VIEW [dbo].[API_TECNICI] +AS +SELECT +[R80_MARROCCO_TEST].dbo.TECNICI.TCCODICE, [R80_MARROCCO_TEST].dbo.TECNICI.TCDESCRI, [R80_MARROCCO_TEST].dbo.TECNICI.TCTELEF1, [R80_MARROCCO_TEST].dbo.TECNICI.TCCHIAM, [R80_MARROCCO_TEST].dbo.TECNICI.TCMANUT, +[R80_MARROCCO_TEST].dbo.TECNICI.TCCODAZI, [R80_MARROCCO_TEST].dbo.TECNICI.TCSUPER, [R80_MARROCCO_TEST].dbo.TECNICI.TCUSER, [R80_MARROCCO_TEST].dbo.TECNICI.TCPWD, +[R80_MARROCCO_TEST].dbo.TECDISP.TDCODZON, [R80_MARROCCO_TEST].dbo.TECDISP.TDDATAIN, [R80_MARROCCO_TEST].dbo.TECDISP.TDDATAFI,TCCOOR as costo_ordinario,TCCONO as costo_notturno, +TCCOST as costo_straordinario,TCCOFE as costo_festivo +FROM +[R80_MARROCCO_TEST].dbo.TECNICI INNER JOIN +[R80_MARROCCO_TEST].dbo.TECDISP ON [R80_MARROCCO_TEST].dbo.TECNICI.TCCODICE = [R80_MARROCCO_TEST].dbo.TECDISP.TDCODTEC AND [R80_MARROCCO_TEST].dbo.TECNICI.TCCODAZI = [R80_MARROCCO_TEST].dbo.TECDISP.TDCODAZI +GO +/****** Object: View [dbo].[API_CHIAMATE] Script Date: 01/02/2023 15:38:15 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE VIEW [dbo].[API_CHIAMATE] +AS +select +ic.SERIALE_RAPPORTINO as ser_rapp_ic,ic.TIPO_RAPPORTINO as tipo_rapp_ic,/*pc.GENERATO,pc.RIFIUTATA,*/ic.INCARICO as ic, +rif.SERIALE_RAPPORTINO as ser_rapp_rif,rif.TIPO_RAPPORTINO as tipo_rapp_rif,/*rif.GENERATO,*/rif.RIFIUTATA as rif,/*rif.INCARICO,*/ +chiu.SERIALE_RAPPORTINO as ser_rapp_chiu,chiu.TIPO_RAPPORTINO as tipo_rapp_chiu,chiu.SER_BUONO as ser_buono_chiu, +'' as err_title,''as err_detail,'' as err_status_code, +[R80_MARROCCO_TEST].dbo.CHIAMATE.CHCODAZI, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHSERIAL, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHCODESE, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHTIPO, +[R80_MARROCCO_TEST].dbo.CHIAMATE.CHNUMERO, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHDATA, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHORA, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHMIN, +[R80_MARROCCO_TEST].dbo.CHIAMATE.CHOPASS, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHOPCHI, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHCODIMP, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHAZIIMP, +[R80_MARROCCO_TEST].dbo.CHIAMATE.CHSTATO, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHDTAPP, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHORAAPI, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHMINAPI, +[R80_MARROCCO_TEST].dbo.CHIAMATE.CHORAAPF, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHMINAPF, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHRIFER, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHTELEF, +[R80_MARROCCO_TEST].dbo.CHIAMATE.CHCODSEG, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHSTOPI, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHNOTE, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHDTASS, +[R80_MARROCCO_TEST].dbo.CHIAMATE.CHORASS, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHMINASS, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHDTCHI, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHORACHI, +[R80_MARROCCO_TEST].dbo.CHIAMATE.CHMINCHI, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHDTLIN, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHORALI, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHMINLI, +[R80_MARROCCO_TEST].dbo.CHIAMATE.CHDTLFI, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHORALF, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHMINLF, [R80_MARROCCO_TEST].dbo.CHIAMATE.cpccchk, +[R80_MARROCCO_TEST].dbo.CHIAMATE.CHNRAP1, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHSRAP1, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHNRAP2, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHSRAP2, +[R80_MARROCCO_TEST].dbo.CHIAMATE.CHMODRAC, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHPRGANN, [R80_MARROCCO_TEST].dbo.CHIAMATE.UTCC, [R80_MARROCCO_TEST].dbo.CHIAMATE.UTCV, +[R80_MARROCCO_TEST].dbo.CHIAMATE.CHIMPMAN, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHPERMAN, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHFLSTIM, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHFLESTE, +[R80_MARROCCO_TEST].dbo.CHIAMATE.CHTCHIAM as TCCODICE, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHSEREXT, API_IMPIANTI.IMDESCRI, API_IMPIANTI.IMTIPOIM, +API_IMPIANTI.IMMATRIC, API_IMPIANTI.IMNUMIMP, API_IMPIANTI.IMULTAMM, API_IMPIANTI.IMULTDAM, +API_IMPIANTI.IMULTTAM, API_IMPIANTI.IMINDIRI1, API_IMPIANTI.IMINDIRI2, API_IMPIANTI.IMINDIRI3, +API_IMPIANTI.IMINDIRI4, API_IMPIANTI.IMINDIRI5, API_IMPIANTI.IMLOCALI, +API_IMPIANTI.IMCODCAP, API_IMPIANTI.IMCOMUNE, API_IMPIANTI.IMPROVIN, API_IMPIANTI.IMCODNAZ, +API_IMPIANTI.IMUBICAZ, API_IMPIANTI.IMZONMAN, API_IMPIANTI.IMFLPUPR, API_IMPIANTI.IMZONCHI, +API_IMPIANTI.IMZONSUP, API_IMPIANTI.IMDAINMA, API_IMPIANTI.IMDAFIMA, API_IMPIANTI.IMDATCOS, +API_IMPIANTI.IMTELESO, API_IMPIANTI.AN_EMAIL,API_IMPIANTI.IMULTCLI, [R80_MARROCCO_TEST].dbo.GITSRCONTI.ANCODICE, +[R80_MARROCCO_TEST].dbo.GITSRCONTI.ANTIPCON, [R80_MARROCCO_TEST].dbo.GITSRCONTI.ANDESCRI, [R80_MARROCCO_TEST].dbo.GITSRCONTI.ANTELEFO, [R80_MARROCCO_TEST].dbo.CODSEGN.CSDESCR, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHTCHIAM +,'' as IMAZIRIF +,(select top 1 tcdescri from dbo.API_TECNICI where TCCODICE=CHIAMATE.CHTCHIAM) as TCDESCRI +,(select top 1 CTIMPCHI from [R80_MARROCCO_TEST].dbo.GITSRMCONMAST where CTCODCLI=ANCODICE and CTFLSTAT='A' order by CTDATREG desc) as chiamata +,(select top 1 CTIMPVIA from [R80_MARROCCO_TEST].dbo.GITSRMCONMAST where CTCODCLI=ANCODICE and CTFLSTAT='A' order by CTDATREG desc) as spe_viaggio +,(select top 1 costo_ordinario from API_TECNICI where TCCODICE=CHIAMATE.CHTCHIAM) as costo_ordinario +,(select top 1 costo_notturno from API_TECNICI where TCCODICE=CHIAMATE.CHTCHIAM) as costo_notturno +,(select top 1 costo_straordinario from API_TECNICI where TCCODICE=CHIAMATE.CHTCHIAM) as costo_straordinario +,(select top 1 costo_festivo from API_TECNICI where TCCODICE=CHIAMATE.CHTCHIAM) as costo_festivo +from [R80_MARROCCO_TEST].dbo.CHIAMATE +left outer join [R80_MARROCCO_TEST].dbo.RAPP_NEW as ic on (ic.SERIALE_CHIAMATA=CHSERIAL and ic.AZIENDA_CHIAMATA=CHCODAZI and ic.CODICE_TECNICO=CHTCHIAM and LTRIM(RTRIM(coalesce(ic.TIPO_RAPPORTINO,'')))='' /*and ic.GENERATO is NULL*/ and (ic.RIFIUTATA='N' )) +left outer join [R80_MARROCCO_TEST].dbo.RAPP_NEW as rif on (rif.SERIALE_CHIAMATA=CHSERIAL and rif.AZIENDA_CHIAMATA=CHCODAZI and rif.CODICE_TECNICO=CHTCHIAM and LTRIM(RTRIM(coalesce(rif.TIPO_RAPPORTINO,'')))='' /*and rif.GENERATO is NULL*/ and (rif.RIFIUTATA='S' )) +left outer join [R80_MARROCCO_TEST].dbo.RAPP_NEW as chiu on (chiu.SERIALE_CHIAMATA=CHSERIAL and chiu.AZIENDA_CHIAMATA=CHCODAZI and chiu.CODICE_TECNICO=CHTCHIAM and LTRIM(RTRIM(coalesce(chiu.TIPO_RAPPORTINO,'')))='3' /*and chiu.GENERATO is NULL*/ ) +left outer join [R80_MARROCCO_TEST].dbo.CODSEGN ON [R80_MARROCCO_TEST].dbo.CODSEGN.CSCODICE = [R80_MARROCCO_TEST].dbo.CHIAMATE.CHCODSEG AND [R80_MARROCCO_TEST].dbo.CODSEGN.CSCODAZI = [R80_MARROCCO_TEST].dbo.CHIAMATE.CHCODAZI +LEFT OUTER JOIN [R80_MARROCCO_TEST].dbo.GITSRCONTI +INNER JOIN dbo.API_IMPIANTI ON [R80_MARROCCO_TEST].dbo.GITSRCONTI.ANCODICE = dbo.API_IMPIANTI.IMULTCLI AND [R80_MARROCCO_TEST].dbo.GITSRCONTI.ANTIPCON = 'C' ON [R80_MARROCCO_TEST].dbo.CHIAMATE.CHAZIIMP = dbo.API_IMPIANTI.IMCODAZI AND [R80_MARROCCO_TEST].dbo.CHIAMATE.CHCODIMP = dbo.API_IMPIANTI.IMCODIMP + +where 1=1 +and [R80_MARROCCO_TEST].dbo.CHIAMATE.CHSTATO = 'C' +and [R80_MARROCCO_TEST].dbo.CHIAMATE.CHDATA>=DATEADD(month, -3, GETDATE()) +and [R80_MARROCCO_TEST].dbo.CHIAMATE.CHDATA<=DATEADD(month, 3, GETDATE()) +and [R80_MARROCCO_TEST].dbo.CHIAMATE.CHCODAZI='GITSR' +GO + +/****** Object: View [dbo].[API_MANPROG] Script Date: 01/02/2023 15:43:35 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE VIEW [dbo].[API_MANPROG] +AS + +SELECT +PRESA.PIMPIANTO,PRESA.PICODINT,PRESA.PIDATMAN +,RAPP_NEW.SERIALE_RAPPORTINO,RAPP_NEW.SER_BUONO,RAPP_NEW.GENERATO,RAPP_NEW.CODICE_INTERVENTO +,'' as err_title,''as err_detail,'' as err_status_code +,[R80_MARROCCO_TEST].dbo.MANPROG.MPCODAZI AS CTCODAZI, [R80_MARROCCO_TEST].dbo.MANPROG.MPCODIMP AS CTCODIMP, [R80_MARROCCO_TEST].dbo.MANPROG.MPCODINT AS CTCODINT, +[R80_MARROCCO_TEST].dbo.CODINTE.CIDESCRI AS CTDESINT, [R80_MARROCCO_TEST].dbo.MANPROG.MPDATPRO AS CTDATPRO, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMDESCRI, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMTIPOIM, +[R80_MARROCCO_TEST].dbo.MIMPIANTI.IMMATRIC, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMNUMIMP, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMULTDAM, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMULTAMM, +[R80_MARROCCO_TEST].dbo.MIMPIANTI.IMINDIRI1, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMINDIRI2, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMINDIRI3, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMINDIRI4, +[R80_MARROCCO_TEST].dbo.MIMPIANTI.IMINDIRI5, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMLOCALI, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMCODCAP, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMCOMUNE, +[R80_MARROCCO_TEST].dbo.MIMPIANTI.IMPROVIN, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMCODNAZ, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMUBICAZ, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMZONMAN, +[R80_MARROCCO_TEST].dbo.MIMPIANTI.IMRIFERI, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMZONCHI, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMZONSUP,[R80_MARROCCO_TEST].dbo.MIMPIANTI.IMULTTAM as TELEFONO1, +[R80_MARROCCO_TEST].dbo.MIMPIANTI.IMULTFAM as TELEFONO2,[R80_MARROCCO_TEST].dbo.MIMPIANTI.IMULTCLI as CLIENTE,[R80_MARROCCO_TEST].dbo.MANPROG.MPMESGEN, [R80_MARROCCO_TEST].dbo.MANPROG.MPMESFEB, +[R80_MARROCCO_TEST].dbo.MANPROG.MPMESMAR, [R80_MARROCCO_TEST].dbo.MANPROG.MPMESAPR, [R80_MARROCCO_TEST].dbo.MANPROG.MPMESMAG, [R80_MARROCCO_TEST].dbo.MANPROG.MPMESLUG, +[R80_MARROCCO_TEST].dbo.MANPROG.MPMESGIU, [R80_MARROCCO_TEST].dbo.MANPROG.MPMESAGO, [R80_MARROCCO_TEST].dbo.MANPROG.MPMESSET, [R80_MARROCCO_TEST].dbo.MANPROG.MPMESOTT, +[R80_MARROCCO_TEST].dbo.MANPROG.MPMESNOV, [R80_MARROCCO_TEST].dbo.MANPROG.MPMESDIC,T.TCDESCRI,T.TCCODICE,'' as IMAZIRIF +,(select top 1 CTIMPCHI from [R80_MARROCCO_TEST].dbo.GITSRMCONMAST where CTCODCLI=IMULTCLI and CTFLSTAT='A' order by CTDATREG desc) as chiamata +,(select top 1 CTIMPVIA from [R80_MARROCCO_TEST].dbo.GITSRMCONMAST where CTCODCLI=IMULTCLI and CTFLSTAT='A' order by CTDATREG desc) as spe_viaggio +,(select top 1 costo_ordinario from API_TECNICI where TCCODICE=T.TCCODICE) as costo_ordinario +,(select top 1 costo_notturno from API_TECNICI where TCCODICE=T.TCCODICE) as costo_notturno +,(select top 1 costo_straordinario from API_TECNICI where TCCODICE=T.TCCODICE) as costo_straordinario +,(select top 1 costo_festivo from API_TECNICI where TCCODICE=T.TCCODICE) as costo_festivo + +FROM [R80_MARROCCO_TEST].dbo.MANPROG INNER JOIN [R80_MARROCCO_TEST].dbo.MIMPIANTI ON [R80_MARROCCO_TEST].dbo.MANPROG.MPCODAZI = [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMCODAZI AND [R80_MARROCCO_TEST].dbo.MANPROG.MPCODIMP = [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMCODIMP +LEFT OUTER JOIN [R80_MARROCCO_TEST].dbo.CODINTE ON [R80_MARROCCO_TEST].dbo.MANPROG.MPCODINT = [R80_MARROCCO_TEST].dbo.CODINTE.CICODICE +INNER JOIN API_TECNICI T ON MIMPIANTI.IMZONMAN=T.TDCODZON AND MANPROG.MPCODAZI=T.TCCODAZI and t.TDDATAFI>=GETDATE() +left outer join PRESA on (PICODAZI=MPCODAZI and MPCODIMP=PIMPIANTO and MPCODINT=PICODINT /*and TCCODICE=picodtec*/ and MPDATPRO=PIDATMAN) +left outer join [R80_MARROCCO_TEST].dbo.RAPP_NEW on (MANPROG.MPCODAZI=AZIENDA_CHIAMATA and MANPROG.MPCODIMP=CODICE_IMPIANTO and LTRIM(RTRIM(coalesce(TIPO_RAPPORTINO,'')))='2' and MANPROG.MPCODINT=CODICE_INTERVENTO /*and GENERATO is null*/and MPDATPRO=DATA_VALIDITA) +where MANPROG.MPDATPRO>=DATEADD(month, -3, GETDATE()) +and MANPROG.MPDATPRO<=EOMONTH(GETDATE(),0) +and LTRIM(rtrim(coalesce(GENERATO,'')))<>'S' +and MANPROG.MPCODAZI='GITSR' +GO diff --git a/ApiPolo/SQL/CreaVisteLifta.txt b/ApiPolo/SQL/CreaVisteLifta.txt new file mode 100644 index 0000000..2e6c1b0 --- /dev/null +++ b/ApiPolo/SQL/CreaVisteLifta.txt @@ -0,0 +1,273 @@ +USE [R80_LIFTA] +GO + +/****** Object: View [dbo].[API_CAUS_RAPP] Script Date: 01/02/2023 15:02:43 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE VIEW [dbo].[API_CAUS_RAPP] +AS +select CRCODICE,CRDESCRI,CRRIFATT from [R80_MARROCCO_TEST].dbo.LIFTACAUSRAPP +GO +/****** Object: View [dbo].[API_CHIUSURE] Script Date: 01/02/2023 15:08:38 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE VIEW [dbo].[API_CHIUSURE] +AS +SELECT CCCODAZI, CCCODICE, CCDESCR, cpccchk, CCFLFATT, CCFLREP, CCDESSUP, CCTIPCOD, CCGRUPPO, CCIMPINT, CCIMPMAN, CCSERINT, CCSERMAN, CCNUMORE, CCPERMAN, CORECOM, CODTOBSO, + 0 as CCRAPABI, CCRIAPRE, '' as CCCHIINT, 0 as CCRAPOBB +FROM [R80_MARROCCO_TEST].dbo.CCHIUSA where COALESCE(CODTOBSO, '') = '' and CCCODAZI='LIFTA' +GO +/****** Object: View [dbo].[API_CLIENTI] Script Date: 01/02/2023 16:53:11 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + + +CREATE VIEW [dbo].[API_CLIENTI] +AS +SELECT ANTIPCON, ANCODICE, AN_EMAIL,ANCODFIS,ANPARIVA,ANINDIRI, ANTELEFO, ANNUMCEL, AN_EMPEC,ANDESCRI,ANNUMLIS +FROM [R80_MARROCCO_TEST].dbo.LIFTACONTI +WHERE (ANTIPCON = 'C') +GO +/****** Object: View [dbo].[API_PAGAMENTI] Script Date: 01/02/2023 15:10:15 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE VIEW [dbo].[API_PAGAMENTI] +AS +select PACODICE,PADESCRI from [R80_MARROCCO_TEST].dbo.LIFTAPAG_AMEN +GO + + + +/****** Object: View [dbo].[API_RAPP_NEW] Script Date: 01/02/2023 16:55:27 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + + +CREATE VIEW [dbo].[API_RAPP_NEW] +AS +SELECT SERIALE_RAPPORTINO, TIPO_RAPPORTINO, AZIENDA_IMPIANTO, CODICE_IMPIANTO, AZIENDA_CHIAMATA, SERIALE_CHIAMATA, SERIALE_COMMESSA, DATA_RAPPORTINO, ORA_INI_RAPPORTINO, + MIN_INI_RAPPORTINO, ORA_FIN_RAPPORTINO, MIN_FIN_RAPPORTINO, CODICE_CHIUSURA_1, CODICE_CHIUSURA_2, CODICE_CHIUSURA_3, CODICE_CHIUSURA_4, CODICE_CHIUSURA_5, + CODICE_CHIUSURA_6, CODICE_CHIUSURA_7, CODICE_CHIUSURA_8, CODICE_CHIUSURA_9, CODICE_CHIUSURA_10, DESCRIZIONE_INTERVENTO, STATO_FINALE, GENERATO, AZIENDA_TECNICO, + CODICE_TECNICO, RIFIUTATA, FIRMA, INCARICO, DATA_VALIDITA, IMMAGINE, '' as SER_BUONO,'' as CODICE_INTERVENTO, + DIFETTI_RISCONTRATI, LAVORO_ESEGUITO, ESITO_INTERVENTO,NOTE_ESITO, NOTE_INTERVENTO,NUOVO_CONTRATTO, ORE_LAVORO, CAUSALE, MATERIALE, DIRITTO_CHIAMATA, MANODOPERA, SPESE_VIAGGIO, + PAGAMENTO, ANTICIPO, TOTALE, NOTE_PAGAMENTO, TIPO_INTERVENTO, RAFOTO1, RAFOTO2, RAFOTO3, RAFOTO4, RAFOTO5, RAFOTO6, RAFOTO7, RAFOTO8, RAFOTO9, RAFOTO10 +FROM [R80_MARROCCO_TEST].dbo.RAPP_NEW where AZIENDA_IMPIANTO='LIFTA' +GO +/****** Object: View [dbo].[API_STO_RAPP] Script Date: 01/02/2023 15:13:05 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE VIEW [dbo].[API_STO_RAPP] +AS +select + +PICODINT as codice_intervento, +PIDATMAN as data_manutenzione +,CODINTE.CIDESCRI,CIDESSUP, +TCCODICE,TCDESCRI,/*RAPPMAST.NOTE_ESITO,*/'' as NOTE_ESITO,DATA_RAPPORTINO +, STATO_FINALE,/*RAPPMAST.ESITO_INTERVENTO,*/'' as ESITO_INTERVENTO,DESCRIZIONE_INTERVENTO,FIRMA +,SERIALE_CHIAMATA,TIPO_RAPPORTINO,CHCODSEG as codice_segnalazione,SER_BUONO,DIFETTI_RISCONTRATI,LAVORO_ESEGUITO,NOTE_INTERVENTO +,ORE_LAVORO,MATERIALE,DIRITTO_CHIAMATA,ANTICIPO, MANODOPERA, SPESE_VIAGGIO,pagamento,CODICE_IMPIANTO, +TOTALE,NOTE_PAGAMENTO,TIPO_INTERVENTO,GENERATO,AZIENDA_TECNICO,AZIENDA_IMPIANTO,AZIENDA_CHIAMATA + +,CODICE_CHIUSURA_1,CODICE_CHIUSURA_2,CODICE_CHIUSURA_3,CODICE_CHIUSURA_4,CODICE_CHIUSURA_5, +CODICE_CHIUSURA_6,CODICE_CHIUSURA_7,CODICE_CHIUSURA_8,CODICE_CHIUSURA_9,CODICE_CHIUSURA_10 +,SERIALE_RAPPORTINO + +,DATA_EFFETTIVA +,IMINDIRI1 as indirizzo_tipo ,IMINDIRI2 as indirizzo,IMINDIRI3 as indirizzo_num ,IMINDIRI4 as indirizzo_num2,IMINDIRI5 as indirizzo_scala +,(select CCDESCR from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_1) as cc1 +,(select CCDESCR from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_2) as cc2 +,(select CCDESCR from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_3) as cc3 +,(select CCDESCR from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_4) as cc4 +,(select CCDESCR from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_5) as cc5 +,(select CCDESCR from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_6) as cc6 +,(select CCDESCR from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_7) as cc7 +,(select CCDESCR from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_8) as cc8 +,(select CCDESCR from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_9) as cc9 +,(select CCDESCR from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_10) as cc10 + +,(select CCDESSUP from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_1) as ccds1 +,(select CCDESSUP from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_2) as ccds2 +,(select CCDESSUP from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_3) as ccds3 +,(select CCDESSUP from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_4) as ccds4 +,(select CCDESSUP from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_5) as ccds5 +,(select CCDESSUP from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_6) as ccds6 +,(select CCDESSUP from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_7) as ccds7 +,(select CCDESSUP from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_8) as ccds8 +,(select CCDESSUP from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_9) as ccds9 +,(select CCDESSUP from [R80_MARROCCO_TEST].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_10) as ccds10 + +from [R80_MARROCCO_TEST].dbo.LIFTARAPPMAST RAPPMAST left outer join [R80_MARROCCO_TEST].dbo.RAPP_NEW on RASERIAL=SERIALE_RAPPORTINO +left outer join [R80_MARROCCO_TEST].dbo.TECNICI on RACODTE1=TCCODICE +left outer join [R80_MARROCCO_TEST].dbo.CHIAMATE on CHCODAZI='LIFTA' and CHSERIAL=SERIALE_CHIAMATA and TIPO_RAPPORTINO='3' +left outer join [R80_MARROCCO_TEST].dbo.PIPRESA on PIMPIANTO=CODICE_IMPIANTO and PICODINT=CODICE_INTERVENTO and PICODAZI='LIFTA' +LEFT OUTER JOIN [R80_MARROCCO_TEST].dbo.CODINTE ON PICODINT = [R80_MARROCCO_TEST].dbo.CODINTE.CICODICE +LEFT OUTER JOIN [R80_MARROCCO_TEST].dbo.MIMPIANTI ON AZIENDA_IMPIANTO = [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMCODAZI AND CODICE_IMPIANTO = [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMCODIMP +where SERIALE_RAPPORTINO is not null +and DATA_RAPPORTINO>=DATEADD(month, -2, GETDATE()) +GO +/****** Object: View [dbo].[API_IMPIANTI] Script Date: 01/02/2023 15:24:18 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE VIEW [dbo].[API_IMPIANTI] +AS +SELECT +[R80_MARROCCO_TEST].dbo.MIMPIANTI.IMCODAZI, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMCODIMP, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMDESCRI, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMTIPOIM, +[R80_MARROCCO_TEST].dbo.MIMPIANTI.IMMATRIC, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMNUMIMP, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMULTCLI, +[R80_MARROCCO_TEST].dbo.MIMPIANTI.IMULTDCL, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMULTAMM, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMULTDAM, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMULTTAM, +[R80_MARROCCO_TEST].dbo.MIMPIANTI.IMINDIRI1, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMINDIRI2, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMINDIRI3, +[R80_MARROCCO_TEST].dbo.MIMPIANTI.IMINDIRI4, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMINDIRI5, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMLOCALI, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMCODCAP, +[R80_MARROCCO_TEST].dbo.MIMPIANTI.IMCOMUNE, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMPROVIN, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMCODNAZ, +[R80_MARROCCO_TEST].dbo.MIMPIANTI.IMUBICAZ, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMZONMAN, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMFLPUPR, [R80_MARROCCO_TEST].dbo.MIMPIANTI.UTDC, +[R80_MARROCCO_TEST].dbo.MIMPIANTI.UTDV, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMPIAMAN, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMDATATT, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMZONCHI, +[R80_MARROCCO_TEST].dbo.MIMPIANTI.IMZONSUP, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMDAINMA, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMDAFIMA, +[R80_MARROCCO_TEST].dbo.MIMPIANTI.IMDATCOS, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMTELESO, [R80_MARROCCO_TEST].dbo.API_CLIENTI.AN_EMAIL,'' as IMAZIRIF +FROM +[R80_MARROCCO_TEST].dbo.MIMPIANTI INNER JOIN +[R80_MARROCCO_TEST].dbo.API_CLIENTI ON [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMULTCLI = [R80_MARROCCO_TEST].dbo.API_CLIENTI.ANCODICE +where [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMCODAZI='LIFTA' +GO +/****** Object: View [dbo].[API_TECNICI] Script Date: 01/02/2023 15:31:11 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE VIEW [dbo].[API_TECNICI] +AS +SELECT +[R80_MARROCCO_TEST].dbo.TECNICI.TCCODICE, [R80_MARROCCO_TEST].dbo.TECNICI.TCDESCRI, [R80_MARROCCO_TEST].dbo.TECNICI.TCTELEF1, [R80_MARROCCO_TEST].dbo.TECNICI.TCCHIAM, [R80_MARROCCO_TEST].dbo.TECNICI.TCMANUT, +[R80_MARROCCO_TEST].dbo.TECNICI.TCCODAZI, [R80_MARROCCO_TEST].dbo.TECNICI.TCSUPER, [R80_MARROCCO_TEST].dbo.TECNICI.TCUSER, [R80_MARROCCO_TEST].dbo.TECNICI.TCPWD, +[R80_MARROCCO_TEST].dbo.TECDISP.TDCODZON, [R80_MARROCCO_TEST].dbo.TECDISP.TDDATAIN, [R80_MARROCCO_TEST].dbo.TECDISP.TDDATAFI,TCCOOR as costo_ordinario,TCCONO as costo_notturno, +TCCOST as costo_straordinario,TCCOFE as costo_festivo +FROM +[R80_MARROCCO_TEST].dbo.TECNICI INNER JOIN +[R80_MARROCCO_TEST].dbo.TECDISP ON [R80_MARROCCO_TEST].dbo.TECNICI.TCCODICE = [R80_MARROCCO_TEST].dbo.TECDISP.TDCODTEC AND [R80_MARROCCO_TEST].dbo.TECNICI.TCCODAZI = [R80_MARROCCO_TEST].dbo.TECDISP.TDCODAZI +GO +/****** Object: View [dbo].[API_CHIAMATE] Script Date: 01/02/2023 15:38:15 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE VIEW [dbo].[API_CHIAMATE] +AS +select +ic.SERIALE_RAPPORTINO as ser_rapp_ic,ic.TIPO_RAPPORTINO as tipo_rapp_ic,/*pc.GENERATO,pc.RIFIUTATA,*/ic.INCARICO as ic, +rif.SERIALE_RAPPORTINO as ser_rapp_rif,rif.TIPO_RAPPORTINO as tipo_rapp_rif,/*rif.GENERATO,*/rif.RIFIUTATA as rif,/*rif.INCARICO,*/ +chiu.SERIALE_RAPPORTINO as ser_rapp_chiu,chiu.TIPO_RAPPORTINO as tipo_rapp_chiu,chiu.SER_BUONO as ser_buono_chiu, +'' as err_title,''as err_detail,'' as err_status_code, +[R80_MARROCCO_TEST].dbo.CHIAMATE.CHCODAZI, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHSERIAL, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHCODESE, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHTIPO, +[R80_MARROCCO_TEST].dbo.CHIAMATE.CHNUMERO, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHDATA, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHORA, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHMIN, +[R80_MARROCCO_TEST].dbo.CHIAMATE.CHOPASS, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHOPCHI, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHCODIMP, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHAZIIMP, +[R80_MARROCCO_TEST].dbo.CHIAMATE.CHSTATO, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHDTAPP, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHORAAPI, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHMINAPI, +[R80_MARROCCO_TEST].dbo.CHIAMATE.CHORAAPF, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHMINAPF, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHRIFER, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHTELEF, +[R80_MARROCCO_TEST].dbo.CHIAMATE.CHCODSEG, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHSTOPI, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHNOTE, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHDTASS, +[R80_MARROCCO_TEST].dbo.CHIAMATE.CHORASS, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHMINASS, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHDTCHI, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHORACHI, +[R80_MARROCCO_TEST].dbo.CHIAMATE.CHMINCHI, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHDTLIN, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHORALI, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHMINLI, +[R80_MARROCCO_TEST].dbo.CHIAMATE.CHDTLFI, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHORALF, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHMINLF, [R80_MARROCCO_TEST].dbo.CHIAMATE.cpccchk, +[R80_MARROCCO_TEST].dbo.CHIAMATE.CHNRAP1, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHSRAP1, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHNRAP2, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHSRAP2, +[R80_MARROCCO_TEST].dbo.CHIAMATE.CHMODRAC, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHPRGANN, [R80_MARROCCO_TEST].dbo.CHIAMATE.UTCC, [R80_MARROCCO_TEST].dbo.CHIAMATE.UTCV, +[R80_MARROCCO_TEST].dbo.CHIAMATE.CHIMPMAN, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHPERMAN, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHFLSTIM, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHFLESTE, +[R80_MARROCCO_TEST].dbo.CHIAMATE.CHTCHIAM as TCCODICE, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHSEREXT, API_IMPIANTI.IMDESCRI, API_IMPIANTI.IMTIPOIM, +API_IMPIANTI.IMMATRIC, API_IMPIANTI.IMNUMIMP, API_IMPIANTI.IMULTAMM, API_IMPIANTI.IMULTDAM, +API_IMPIANTI.IMULTTAM, API_IMPIANTI.IMINDIRI1, API_IMPIANTI.IMINDIRI2, API_IMPIANTI.IMINDIRI3, +API_IMPIANTI.IMINDIRI4, API_IMPIANTI.IMINDIRI5, API_IMPIANTI.IMLOCALI, +API_IMPIANTI.IMCODCAP, API_IMPIANTI.IMCOMUNE, API_IMPIANTI.IMPROVIN, API_IMPIANTI.IMCODNAZ, +API_IMPIANTI.IMUBICAZ, API_IMPIANTI.IMZONMAN, API_IMPIANTI.IMFLPUPR, API_IMPIANTI.IMZONCHI, +API_IMPIANTI.IMZONSUP, API_IMPIANTI.IMDAINMA, API_IMPIANTI.IMDAFIMA, API_IMPIANTI.IMDATCOS, +API_IMPIANTI.IMTELESO, API_IMPIANTI.AN_EMAIL,API_IMPIANTI.IMULTCLI, [R80_MARROCCO_TEST].dbo.LIFTACONTI.ANCODICE, +[R80_MARROCCO_TEST].dbo.LIFTACONTI.ANTIPCON, [R80_MARROCCO_TEST].dbo.LIFTACONTI.ANDESCRI, [R80_MARROCCO_TEST].dbo.LIFTACONTI.ANTELEFO, [R80_MARROCCO_TEST].dbo.CODSEGN.CSDESCR, [R80_MARROCCO_TEST].dbo.CHIAMATE.CHTCHIAM +,'' as IMAZIRIF +,(select top 1 tcdescri from dbo.API_TECNICI where TCCODICE=CHIAMATE.CHTCHIAM) as TCDESCRI +,(select top 1 CTIMPCHI from [R80_MARROCCO_TEST].dbo.LIFTAMCONMAST where CTCODCLI=ANCODICE and CTFLSTAT='A' order by CTDATREG desc) as chiamata +,(select top 1 CTIMPVIA from [R80_MARROCCO_TEST].dbo.LIFTAMCONMAST where CTCODCLI=ANCODICE and CTFLSTAT='A' order by CTDATREG desc) as spe_viaggio +,(select top 1 costo_ordinario from API_TECNICI where TCCODICE=CHIAMATE.CHTCHIAM) as costo_ordinario +,(select top 1 costo_notturno from API_TECNICI where TCCODICE=CHIAMATE.CHTCHIAM) as costo_notturno +,(select top 1 costo_straordinario from API_TECNICI where TCCODICE=CHIAMATE.CHTCHIAM) as costo_straordinario +,(select top 1 costo_festivo from API_TECNICI where TCCODICE=CHIAMATE.CHTCHIAM) as costo_festivo +from [R80_MARROCCO_TEST].dbo.CHIAMATE +left outer join [R80_MARROCCO_TEST].dbo.RAPP_NEW as ic on (ic.SERIALE_CHIAMATA=CHSERIAL and ic.AZIENDA_CHIAMATA=CHCODAZI and ic.CODICE_TECNICO=CHTCHIAM and LTRIM(RTRIM(coalesce(ic.TIPO_RAPPORTINO,'')))='' /*and ic.GENERATO is NULL*/ and (ic.RIFIUTATA='N' )) +left outer join [R80_MARROCCO_TEST].dbo.RAPP_NEW as rif on (rif.SERIALE_CHIAMATA=CHSERIAL and rif.AZIENDA_CHIAMATA=CHCODAZI and rif.CODICE_TECNICO=CHTCHIAM and LTRIM(RTRIM(coalesce(rif.TIPO_RAPPORTINO,'')))='' /*and rif.GENERATO is NULL*/ and (rif.RIFIUTATA='S' )) +left outer join [R80_MARROCCO_TEST].dbo.RAPP_NEW as chiu on (chiu.SERIALE_CHIAMATA=CHSERIAL and chiu.AZIENDA_CHIAMATA=CHCODAZI and chiu.CODICE_TECNICO=CHTCHIAM and LTRIM(RTRIM(coalesce(chiu.TIPO_RAPPORTINO,'')))='3' /*and chiu.GENERATO is NULL*/ ) +left outer join [R80_MARROCCO_TEST].dbo.CODSEGN ON [R80_MARROCCO_TEST].dbo.CODSEGN.CSCODICE = [R80_MARROCCO_TEST].dbo.CHIAMATE.CHCODSEG AND [R80_MARROCCO_TEST].dbo.CODSEGN.CSCODAZI = [R80_MARROCCO_TEST].dbo.CHIAMATE.CHCODAZI +LEFT OUTER JOIN [R80_MARROCCO_TEST].dbo.LIFTACONTI +INNER JOIN dbo.API_IMPIANTI ON [R80_MARROCCO_TEST].dbo.LIFTACONTI.ANCODICE = dbo.API_IMPIANTI.IMULTCLI AND [R80_MARROCCO_TEST].dbo.LIFTACONTI.ANTIPCON = 'C' ON [R80_MARROCCO_TEST].dbo.CHIAMATE.CHAZIIMP = dbo.API_IMPIANTI.IMCODAZI AND [R80_MARROCCO_TEST].dbo.CHIAMATE.CHCODIMP = dbo.API_IMPIANTI.IMCODIMP + +where 1=1 +and [R80_MARROCCO_TEST].dbo.CHIAMATE.CHSTATO = 'C' +and [R80_MARROCCO_TEST].dbo.CHIAMATE.CHDATA>=DATEADD(month, -3, GETDATE()) +and [R80_MARROCCO_TEST].dbo.CHIAMATE.CHDATA<=DATEADD(month, 3, GETDATE()) +and [R80_MARROCCO_TEST].dbo.CHIAMATE.CHCODAZI='LIFTA' +GO + +/****** Object: View [dbo].[API_MANPROG] Script Date: 01/02/2023 15:43:35 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE VIEW [dbo].[API_MANPROG] +AS + +SELECT +PRESA.PIMPIANTO,PRESA.PICODINT,PRESA.PIDATMAN +,RAPP_NEW.SERIALE_RAPPORTINO,RAPP_NEW.SER_BUONO,RAPP_NEW.GENERATO,RAPP_NEW.CODICE_INTERVENTO +,'' as err_title,''as err_detail,'' as err_status_code +,[R80_MARROCCO_TEST].dbo.MANPROG.MPCODAZI AS CTCODAZI, [R80_MARROCCO_TEST].dbo.MANPROG.MPCODIMP AS CTCODIMP, [R80_MARROCCO_TEST].dbo.MANPROG.MPCODINT AS CTCODINT, +[R80_MARROCCO_TEST].dbo.CODINTE.CIDESCRI AS CTDESINT, [R80_MARROCCO_TEST].dbo.MANPROG.MPDATPRO AS CTDATPRO, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMDESCRI, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMTIPOIM, +[R80_MARROCCO_TEST].dbo.MIMPIANTI.IMMATRIC, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMNUMIMP, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMULTDAM, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMULTAMM, +[R80_MARROCCO_TEST].dbo.MIMPIANTI.IMINDIRI1, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMINDIRI2, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMINDIRI3, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMINDIRI4, +[R80_MARROCCO_TEST].dbo.MIMPIANTI.IMINDIRI5, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMLOCALI, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMCODCAP, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMCOMUNE, +[R80_MARROCCO_TEST].dbo.MIMPIANTI.IMPROVIN, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMCODNAZ, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMUBICAZ, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMZONMAN, +[R80_MARROCCO_TEST].dbo.MIMPIANTI.IMRIFERI, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMZONCHI, [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMZONSUP,[R80_MARROCCO_TEST].dbo.MIMPIANTI.IMULTTAM as TELEFONO1, +[R80_MARROCCO_TEST].dbo.MIMPIANTI.IMULTFAM as TELEFONO2,[R80_MARROCCO_TEST].dbo.MIMPIANTI.IMULTCLI as CLIENTE,[R80_MARROCCO_TEST].dbo.MANPROG.MPMESGEN, [R80_MARROCCO_TEST].dbo.MANPROG.MPMESFEB, +[R80_MARROCCO_TEST].dbo.MANPROG.MPMESMAR, [R80_MARROCCO_TEST].dbo.MANPROG.MPMESAPR, [R80_MARROCCO_TEST].dbo.MANPROG.MPMESMAG, [R80_MARROCCO_TEST].dbo.MANPROG.MPMESLUG, +[R80_MARROCCO_TEST].dbo.MANPROG.MPMESGIU, [R80_MARROCCO_TEST].dbo.MANPROG.MPMESAGO, [R80_MARROCCO_TEST].dbo.MANPROG.MPMESSET, [R80_MARROCCO_TEST].dbo.MANPROG.MPMESOTT, +[R80_MARROCCO_TEST].dbo.MANPROG.MPMESNOV, [R80_MARROCCO_TEST].dbo.MANPROG.MPMESDIC,T.TCDESCRI,T.TCCODICE,'' as IMAZIRIF +,(select top 1 CTIMPCHI from [R80_MARROCCO_TEST].dbo.LIFTAMCONMAST where CTCODCLI=IMULTCLI and CTFLSTAT='A' order by CTDATREG desc) as chiamata +,(select top 1 CTIMPVIA from [R80_MARROCCO_TEST].dbo.LIFTAMCONMAST where CTCODCLI=IMULTCLI and CTFLSTAT='A' order by CTDATREG desc) as spe_viaggio +,(select top 1 costo_ordinario from API_TECNICI where TCCODICE=T.TCCODICE) as costo_ordinario +,(select top 1 costo_notturno from API_TECNICI where TCCODICE=T.TCCODICE) as costo_notturno +,(select top 1 costo_straordinario from API_TECNICI where TCCODICE=T.TCCODICE) as costo_straordinario +,(select top 1 costo_festivo from API_TECNICI where TCCODICE=T.TCCODICE) as costo_festivo + +FROM [R80_MARROCCO_TEST].dbo.MANPROG INNER JOIN [R80_MARROCCO_TEST].dbo.MIMPIANTI ON [R80_MARROCCO_TEST].dbo.MANPROG.MPCODAZI = [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMCODAZI AND [R80_MARROCCO_TEST].dbo.MANPROG.MPCODIMP = [R80_MARROCCO_TEST].dbo.MIMPIANTI.IMCODIMP +LEFT OUTER JOIN [R80_MARROCCO_TEST].dbo.CODINTE ON [R80_MARROCCO_TEST].dbo.MANPROG.MPCODINT = [R80_MARROCCO_TEST].dbo.CODINTE.CICODICE +INNER JOIN API_TECNICI T ON MIMPIANTI.IMZONMAN=T.TDCODZON AND MANPROG.MPCODAZI=T.TCCODAZI and t.TDDATAFI>=GETDATE() +left outer join PRESA on (PICODAZI=MPCODAZI and MPCODIMP=PIMPIANTO and MPCODINT=PICODINT /*and TCCODICE=picodtec*/ and MPDATPRO=PIDATMAN) +left outer join [R80_MARROCCO_TEST].dbo.RAPP_NEW on (MANPROG.MPCODAZI=AZIENDA_CHIAMATA and MANPROG.MPCODIMP=CODICE_IMPIANTO and LTRIM(RTRIM(coalesce(TIPO_RAPPORTINO,'')))='2' and MANPROG.MPCODINT=CODICE_INTERVENTO /*and GENERATO is null*/and MPDATPRO=DATA_VALIDITA) +where MANPROG.MPDATPRO>=DATEADD(month, -3, GETDATE()) +and MANPROG.MPDATPRO<=EOMONTH(GETDATE(),0) +and LTRIM(rtrim(coalesce(GENERATO,'')))<>'S' +and MANPROG.MPCODAZI='LIFTA' +GO diff --git a/ApiPolo/SQL/CreaVisteMarrocco.txt b/ApiPolo/SQL/CreaVisteMarrocco.txt new file mode 100644 index 0000000..1d17483 --- /dev/null +++ b/ApiPolo/SQL/CreaVisteMarrocco.txt @@ -0,0 +1,222 @@ +/* +[API_CAUS_RAPP] +[API_CHIUSURE] +[API_CLIENTI] +[API_PAGAMENTI] +[API_RAPP_NEW] +[API_STO_RAPP] +[API_IMPIANTI] +[API_TECNICI] +[API_CHIAMATE] +[API_MANPROG] + +per magazzino +[API_MAG_NEW] +[API_MICOMIMP] +[API_SALDIART] +[API_SALDIART_PREZZI] +[API_STO_IMP] +*/ + +USE [R80_MARROCCO] +GO + +/****** Object: View [dbo].[API_CAUS_RAPP] Script Date: 19/01/2023 14:39:58 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE VIEW [dbo].[API_CAUS_RAPP] +AS +select CRCODICE,CRDESCRI,CRRIFATT from MARROCAUSRAPP +GO +/****** Object: View [dbo].[API_CHIUSURE] Script Date: 19/01/2023 14:40:35 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE VIEW [dbo].[API_CHIUSURE] +AS +SELECT CCCODAZI, CCCODICE, CCDESCR, cpccchk, CCFLFATT, CCFLREP, CCDESSUP, CCTIPCOD, CCGRUPPO, CCIMPINT, CCIMPMAN, CCSERINT, CCSERMAN, CCNUMORE, CCPERMAN, CORECOM, CODTOBSO, + 0 as CCRAPABI, CCRIAPRE, '' as CCCHIINT, 0 as CCRAPOBB +FROM dbo.CCHIUSA where COALESCE(CODTOBSO, '') = '' +GO +/****** Object: View [dbo].[API_CLIENTI] Script Date: 19/01/2023 14:40:54 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + + +CREATE VIEW [dbo].[API_CLIENTI] +AS +SELECT ANTIPCON, ANCODICE, AN_EMAIL,ANCODFIS,ANPARIVA,ANINDIRI, ANTELEFO, ANNUMCEL, AN_EMPEC,ANDESCRI,ANNUMLIS +FROM dbo.MARROCONTI +WHERE (ANTIPCON = 'C') +GO +/****** Object: View [dbo].[API_PAGAMENTI] Script Date: 19/01/2023 14:41:21 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE VIEW [dbo].[API_PAGAMENTI] +AS +select PACODICE,PADESCRI from MARROPAG_AMEN +GO +/****** Object: View [dbo].[API_RAPP_NEW] Script Date: 19/01/2023 14:42:20 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE VIEW [dbo].[API_RAPP_NEW] +AS +SELECT SERIALE_RAPPORTINO, TIPO_RAPPORTINO, AZIENDA_IMPIANTO, CODICE_IMPIANTO, AZIENDA_CHIAMATA, SERIALE_CHIAMATA, SERIALE_COMMESSA, DATA_RAPPORTINO, ORA_INI_RAPPORTINO, + MIN_INI_RAPPORTINO, ORA_FIN_RAPPORTINO, MIN_FIN_RAPPORTINO, CODICE_CHIUSURA_1, CODICE_CHIUSURA_2, CODICE_CHIUSURA_3, CODICE_CHIUSURA_4, CODICE_CHIUSURA_5, + CODICE_CHIUSURA_6, CODICE_CHIUSURA_7, CODICE_CHIUSURA_8, CODICE_CHIUSURA_9, CODICE_CHIUSURA_10, DESCRIZIONE_INTERVENTO, STATO_FINALE, GENERATO, AZIENDA_TECNICO, + CODICE_TECNICO, RIFIUTATA, FIRMA, INCARICO, DATA_VALIDITA, IMMAGINE, '' as SER_BUONO,'' as CODICE_INTERVENTO, + DIFETTI_RISCONTRATI, LAVORO_ESEGUITO, ESITO_INTERVENTO,NOTE_ESITO, NOTE_INTERVENTO,NUOVO_CONTRATTO, ORE_LAVORO, CAUSALE, MATERIALE, DIRITTO_CHIAMATA, MANODOPERA, SPESE_VIAGGIO, + PAGAMENTO, ANTICIPO, TOTALE, NOTE_PAGAMENTO, TIPO_INTERVENTO, RAFOTO1, RAFOTO2, RAFOTO3, RAFOTO4, RAFOTO5, RAFOTO6, RAFOTO7, RAFOTO8, RAFOTO9, RAFOTO10 +FROM dbo.RAPP_NEW +GO +/****** Object: View [dbo].[API_STO_RAPP] Script Date: 19/01/2023 14:43:07 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE VIEW [dbo].[API_STO_RAPP] +AS select RAPPMAST.RACAURAP,RAPPMAST.RAAZIIMP,RAPPMAST.RACODIMP,RAPPMAST.RATIPCLI,RAPPMAST.RACODCLI,RAPPMAST.RANUMRAP,RAPPMAST.RAALFRAP,RAPPMAST.RADATRAP,RAPPMAST.RAAZITE1, +RAPPMAST.RACODTE1,CAST(RAPPMAST.RADESINT AS CHAR(250)) as RADESINT,CAST(RAPPMAST.RANOTINT AS CHAR(250)) as RANOTINT,RAPPMAST.RADESCRI +from MARRORAPPMAST RAPPMAST +GO +/****** Object: View [dbo].[API_IMPIANTI] Script Date: 19/01/2023 14:43:30 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE VIEW [dbo].[API_IMPIANTI] +AS +SELECT dbo.MIMPIANTI.IMCODAZI, dbo.MIMPIANTI.IMCODIMP, dbo.MIMPIANTI.IMDESCRI, dbo.MIMPIANTI.IMTIPOIM, dbo.MIMPIANTI.IMMATRIC, dbo.MIMPIANTI.IMNUMIMP, dbo.MIMPIANTI.IMULTCLI, + dbo.MIMPIANTI.IMULTDCL, dbo.MIMPIANTI.IMULTAMM, dbo.MIMPIANTI.IMULTDAM, dbo.MIMPIANTI.IMULTTAM, dbo.MIMPIANTI.IMINDIRI1, dbo.MIMPIANTI.IMINDIRI2, dbo.MIMPIANTI.IMINDIRI3, + dbo.MIMPIANTI.IMINDIRI4, dbo.MIMPIANTI.IMINDIRI5, dbo.MIMPIANTI.IMLOCALI, dbo.MIMPIANTI.IMCODCAP, dbo.MIMPIANTI.IMCOMUNE, dbo.MIMPIANTI.IMPROVIN, dbo.MIMPIANTI.IMCODNAZ, + dbo.MIMPIANTI.IMUBICAZ, dbo.MIMPIANTI.IMZONMAN, dbo.MIMPIANTI.IMFLPUPR, dbo.MIMPIANTI.UTDC, dbo.MIMPIANTI.UTDV, dbo.MIMPIANTI.IMPIAMAN, dbo.MIMPIANTI.IMDATATT, dbo.MIMPIANTI.IMZONCHI, + dbo.MIMPIANTI.IMZONSUP, dbo.MIMPIANTI.IMDAINMA, dbo.MIMPIANTI.IMDAFIMA, dbo.MIMPIANTI.IMDATCOS, dbo.MIMPIANTI.IMTELESO, + dbo.API_CLIENTI.AN_EMAIL +FROM dbo.MIMPIANTI INNER JOIN + dbo.API_CLIENTI ON dbo.MIMPIANTI.IMULTCLI = dbo.API_CLIENTI.ANCODICE +GO +/****** Object: View [dbo].[API_TECNICI] Script Date: 19/01/2023 14:44:10 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE VIEW [dbo].[API_TECNICI] +AS +SELECT dbo.TECNICI.TCCODICE, dbo.TECNICI.TCDESCRI, dbo.TECNICI.TCTELEF1, dbo.TECNICI.TCCHIAM, dbo.TECNICI.TCMANUT, dbo.TECNICI.TCCODAZI, dbo.TECNICI.TCSUPER, dbo.TECNICI.TCUSER, dbo.TECNICI.TCPWD, + dbo.TECDISP.TDCODZON, dbo.TECDISP.TDDATAIN, dbo.TECDISP.TDDATAFI,TCCOOR as costo_ordinario,TCCONO as costo_notturno,TCCOST as costo_straordinario,TCCOFE as costo_festivo +FROM dbo.TECNICI INNER JOIN + dbo.TECDISP ON dbo.TECNICI.TCCODICE = dbo.TECDISP.TDCODTEC AND dbo.TECNICI.TCCODAZI = dbo.TECDISP.TDCODAZI +GO +/****** Object: View [dbo].[API_CHIAMATE] Script Date: 19/01/2023 14:44:37 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE VIEW [dbo].[API_CHIAMATE] +AS +select +ic.SERIALE_RAPPORTINO as ser_rapp_ic,ic.TIPO_RAPPORTINO as tipo_rapp_ic,/*pc.GENERATO,pc.RIFIUTATA,*/ic.INCARICO as ic, +rif.SERIALE_RAPPORTINO as ser_rapp_rif,rif.TIPO_RAPPORTINO as tipo_rapp_rif,/*rif.GENERATO,*/rif.RIFIUTATA as rif,/*rif.INCARICO,*/ +chiu.SERIALE_RAPPORTINO as ser_rapp_chiu,chiu.TIPO_RAPPORTINO as tipo_rapp_chiu,chiu.SER_BUONO as ser_buono_chiu, +'' as err_title,''as err_detail,'' as err_status_code, +dbo.CHIAMATE.CHCODAZI, dbo.CHIAMATE.CHSERIAL, dbo.CHIAMATE.CHCODESE, dbo.CHIAMATE.CHTIPO, dbo.CHIAMATE.CHNUMERO, dbo.CHIAMATE.CHDATA, dbo.CHIAMATE.CHORA, dbo.CHIAMATE.CHMIN, +dbo.CHIAMATE.CHOPASS, dbo.CHIAMATE.CHOPCHI, dbo.CHIAMATE.CHCODIMP, dbo.CHIAMATE.CHAZIIMP, dbo.CHIAMATE.CHSTATO, dbo.CHIAMATE.CHDTAPP, dbo.CHIAMATE.CHORAAPI, dbo.CHIAMATE.CHMINAPI, +dbo.CHIAMATE.CHORAAPF, dbo.CHIAMATE.CHMINAPF, dbo.CHIAMATE.CHRIFER, dbo.CHIAMATE.CHTELEF, dbo.CHIAMATE.CHCODSEG, dbo.CHIAMATE.CHSTOPI, dbo.CHIAMATE.CHNOTE, dbo.CHIAMATE.CHDTASS, +dbo.CHIAMATE.CHORASS, dbo.CHIAMATE.CHMINASS, dbo.CHIAMATE.CHDTCHI, dbo.CHIAMATE.CHORACHI, dbo.CHIAMATE.CHMINCHI, dbo.CHIAMATE.CHDTLIN, dbo.CHIAMATE.CHORALI, dbo.CHIAMATE.CHMINLI, +dbo.CHIAMATE.CHDTLFI, dbo.CHIAMATE.CHORALF, dbo.CHIAMATE.CHMINLF, dbo.CHIAMATE.cpccchk, dbo.CHIAMATE.CHNRAP1, dbo.CHIAMATE.CHSRAP1, dbo.CHIAMATE.CHNRAP2, dbo.CHIAMATE.CHSRAP2, +dbo.CHIAMATE.CHMODRAC, dbo.CHIAMATE.CHPRGANN, dbo.CHIAMATE.UTCC, dbo.CHIAMATE.UTCV, dbo.CHIAMATE.CHIMPMAN, dbo.CHIAMATE.CHPERMAN, dbo.CHIAMATE.CHFLSTIM, dbo.CHIAMATE.CHFLESTE,CHIAMATE.CHTCHIAM as TCCODICE, +dbo.CHIAMATE.CHSEREXT, dbo.API_IMPIANTI.IMDESCRI, dbo.API_IMPIANTI.IMTIPOIM, dbo.API_IMPIANTI.IMMATRIC, dbo.API_IMPIANTI.IMNUMIMP, dbo.API_IMPIANTI.IMULTAMM, dbo.API_IMPIANTI.IMULTDAM, +dbo.API_IMPIANTI.IMULTTAM, dbo.API_IMPIANTI.IMINDIRI1, dbo.API_IMPIANTI.IMINDIRI2, dbo.API_IMPIANTI.IMINDIRI3, dbo.API_IMPIANTI.IMINDIRI4, dbo.API_IMPIANTI.IMINDIRI5, dbo.API_IMPIANTI.IMLOCALI, +dbo.API_IMPIANTI.IMCODCAP, dbo.API_IMPIANTI.IMCOMUNE, dbo.API_IMPIANTI.IMPROVIN, dbo.API_IMPIANTI.IMCODNAZ, dbo.API_IMPIANTI.IMUBICAZ, dbo.API_IMPIANTI.IMZONMAN, dbo.API_IMPIANTI.IMFLPUPR, +dbo.API_IMPIANTI.IMZONCHI, dbo.API_IMPIANTI.IMZONSUP, dbo.API_IMPIANTI.IMDAINMA, dbo.API_IMPIANTI.IMDAFIMA, dbo.API_IMPIANTI.IMDATCOS, dbo.API_IMPIANTI.IMTELESO, dbo.API_IMPIANTI.AN_EMAIL, +dbo.API_IMPIANTI.IMULTCLI, dbo.MARROCONTI.ANCODICE, dbo.MARROCONTI.ANTIPCON, dbo.MARROCONTI.ANDESCRI, dbo.MARROCONTI.ANTELEFO, dbo.CODSEGN.CSDESCR, dbo.CHIAMATE.CHTCHIAM + +,(select top 1 tcdescri from API_TECNICI where TCCODICE=CHIAMATE.CHTCHIAM) as TCDESCRI +,(select top 1 CTIMPCHI from MARROMCONMAST where CTCODCLI=ANCODICE and CTFLSTAT='A' order by CTDATREG desc) as chiamata +,(select top 1 CTIMPVIA from MARROMCONMAST where CTCODCLI=ANCODICE and CTFLSTAT='A' order by CTDATREG desc) as spe_viaggio +,(select top 1 costo_ordinario from API_TECNICI where TCCODICE=CHIAMATE.CHTCHIAM) as costo_ordinario +,(select top 1 costo_notturno from API_TECNICI where TCCODICE=CHIAMATE.CHTCHIAM) as costo_notturno +,(select top 1 costo_straordinario from API_TECNICI where TCCODICE=CHIAMATE.CHTCHIAM) as costo_straordinario +,(select top 1 costo_festivo from API_TECNICI where TCCODICE=CHIAMATE.CHTCHIAM) as costo_festivo +from CHIAMATE +left outer join RAPP_NEW as ic on (ic.SERIALE_CHIAMATA=CHSERIAL and ic.AZIENDA_CHIAMATA=CHCODAZI and ic.CODICE_TECNICO=CHTCHIAM and LTRIM(RTRIM(coalesce(ic.TIPO_RAPPORTINO,'')))='' /*and ic.GENERATO is NULL*/ and (ic.RIFIUTATA='N' )) +left outer join RAPP_NEW as rif on (rif.SERIALE_CHIAMATA=CHSERIAL and rif.AZIENDA_CHIAMATA=CHCODAZI and rif.CODICE_TECNICO=CHTCHIAM and LTRIM(RTRIM(coalesce(rif.TIPO_RAPPORTINO,'')))='' /*and rif.GENERATO is NULL*/ and (rif.RIFIUTATA='S' )) +left outer join RAPP_NEW as chiu on (chiu.SERIALE_CHIAMATA=CHSERIAL and chiu.AZIENDA_CHIAMATA=CHCODAZI and chiu.CODICE_TECNICO=CHTCHIAM and LTRIM(RTRIM(coalesce(chiu.TIPO_RAPPORTINO,'')))='3' /*and chiu.GENERATO is NULL*/ ) +left outer join CODSEGN ON dbo.CODSEGN.CSCODICE = dbo.CHIAMATE.CHCODSEG AND dbo.CODSEGN.CSCODAZI = dbo.CHIAMATE.CHCODAZI +LEFT OUTER JOIN dbo.MARROCONTI +INNER JOIN dbo.API_IMPIANTI ON dbo.MARROCONTI.ANCODICE = dbo.API_IMPIANTI.IMULTCLI AND dbo.MARROCONTI.ANTIPCON = 'C' ON dbo.CHIAMATE.CHAZIIMP = dbo.API_IMPIANTI.IMCODAZI AND dbo.CHIAMATE.CHCODIMP = dbo.API_IMPIANTI.IMCODIMP + +where 1=1 +and dbo.CHIAMATE.CHSTATO = 'C' +and CHIAMATE.CHDATA>=DATEADD(month, -3, GETDATE()) +and CHIAMATE.CHDATA<=DATEADD(month, 3, GETDATE()) +--and dbo.CHIAMATE.CHSERIAL='0000282320' +--and CHIAMATE.CHTCHIAM='002' and CHIAMATE.CHCODAZI='MARRO' +GO + +/****** Object: View [dbo].[API_MANPROG] Script Date: 19/01/2023 14:45:46 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE VIEW [dbo].[API_MANPROG] +AS + +SELECT +PRESA.PIMPIANTO,PRESA.PICODINT,PRESA.PIDATMAN +,RAPP_NEW.SERIALE_RAPPORTINO,RAPP_NEW.SER_BUONO,RAPP_NEW.GENERATO,RAPP_NEW.CODICE_INTERVENTO +,'' as err_title,''as err_detail,'' as err_status_code +,dbo.MANPROG.MPCODAZI AS CTCODAZI, dbo.MANPROG.MPCODIMP AS CTCODIMP, dbo.MANPROG.MPCODINT AS CTCODINT, dbo.CODINTE.CIDESCRI AS CTDESINT, dbo.MANPROG.MPDATPRO AS CTDATPRO, + dbo.MIMPIANTI.IMDESCRI, dbo.MIMPIANTI.IMTIPOIM, dbo.MIMPIANTI.IMMATRIC, dbo.MIMPIANTI.IMNUMIMP, dbo.MIMPIANTI.IMULTDAM, dbo.MIMPIANTI.IMULTAMM, dbo.MIMPIANTI.IMINDIRI1, dbo.MIMPIANTI.IMINDIRI2, + dbo.MIMPIANTI.IMINDIRI3, dbo.MIMPIANTI.IMINDIRI4, dbo.MIMPIANTI.IMINDIRI5, dbo.MIMPIANTI.IMLOCALI, dbo.MIMPIANTI.IMCODCAP, dbo.MIMPIANTI.IMCOMUNE, dbo.MIMPIANTI.IMPROVIN, dbo.MIMPIANTI.IMCODNAZ, + dbo.MIMPIANTI.IMUBICAZ, dbo.MIMPIANTI.IMZONMAN, dbo.MIMPIANTI.IMRIFERI, dbo.MIMPIANTI.IMZONCHI, dbo.MIMPIANTI.IMZONSUP, + dbo.MIMPIANTI.IMULTTAM as TELEFONO1,dbo.MIMPIANTI.IMULTFAM as TELEFONO2,dbo.MIMPIANTI.IMULTCLI as CLIENTE, + dbo.MANPROG.MPMESGEN, dbo.MANPROG.MPMESFEB, dbo.MANPROG.MPMESMAR, dbo.MANPROG.MPMESAPR, dbo.MANPROG.MPMESMAG, dbo.MANPROG.MPMESLUG, + dbo.MANPROG.MPMESGIU, dbo.MANPROG.MPMESAGO, dbo.MANPROG.MPMESSET, dbo.MANPROG.MPMESOTT, dbo.MANPROG.MPMESNOV, dbo.MANPROG.MPMESDIC, + T.TCDESCRI,T.TCCODICE +,(select top 1 CTIMPCHI from MARROMCONMAST where CTCODCLI=IMULTCLI and CTFLSTAT='A' order by CTDATREG desc) as chiamata +,(select top 1 CTIMPVIA from MARROMCONMAST where CTCODCLI=IMULTCLI and CTFLSTAT='A' order by CTDATREG desc) as spe_viaggio +,(select top 1 costo_ordinario from API_TECNICI where TCCODICE=T.TCCODICE) as costo_ordinario +,(select top 1 costo_notturno from API_TECNICI where TCCODICE=T.TCCODICE) as costo_notturno +,(select top 1 costo_straordinario from API_TECNICI where TCCODICE=T.TCCODICE) as costo_straordinario +,(select top 1 costo_festivo from API_TECNICI where TCCODICE=T.TCCODICE) as costo_festivo + +FROM dbo.MANPROG INNER JOIN dbo.MIMPIANTI ON dbo.MANPROG.MPCODAZI = dbo.MIMPIANTI.IMCODAZI AND dbo.MANPROG.MPCODIMP = dbo.MIMPIANTI.IMCODIMP +LEFT OUTER JOIN dbo.CODINTE ON dbo.MANPROG.MPCODINT = dbo.CODINTE.CICODICE +INNER JOIN API_TECNICI T ON MIMPIANTI.IMZONMAN=T.TDCODZON AND MANPROG.MPCODAZI=T.TCCODAZI and t.TDDATAFI>=GETDATE() +left outer join PRESA on (PICODAZI=MPCODAZI and MPCODIMP=PIMPIANTO and MPCODINT=PICODINT /*and TCCODICE=picodtec*/ and MPDATPRO=PIDATMAN) +left outer join RAPP_NEW on (MANPROG.MPCODAZI=AZIENDA_CHIAMATA and MANPROG.MPCODIMP=CODICE_IMPIANTO and LTRIM(RTRIM(coalesce(TIPO_RAPPORTINO,'')))='2' and MANPROG.MPCODINT=CODICE_INTERVENTO /*and GENERATO is null*/and MPDATPRO=DATA_VALIDITA) +where MANPROG.MPDATPRO>=DATEADD(month, -3, GETDATE()) +--and MANPROG.MPDATPRO<=DATEADD(month, 2, GETDATE()) +and MANPROG.MPDATPRO<=EOMONTH(GETDATE(),0) +and LTRIM(rtrim(coalesce(GENERATO,'')))<>'S' + +GO \ No newline at end of file diff --git a/ApiPolo/SQL/Discovery_1_8.txt b/ApiPolo/SQL/Discovery_1_8.txt new file mode 100644 index 0000000..c40d839 --- /dev/null +++ b/ApiPolo/SQL/Discovery_1_8.txt @@ -0,0 +1,266 @@ +USE [TEST_APP_NEW] +GO + +/****** Object: View [dbo].[API_CAUS_RAPP] Script Date: 22/03/2023 14:15:42 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_CAUS_RAPP] +AS +select CRCODICE,CRDESCRI,CRRIFATT from DISCOCAUSRAPP +GO +/****** Object: View [dbo].[API_CHIUSURE] Script Date: 22/03/2023 14:18:36 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_CHIUSURE] +AS +SELECT CCCODAZI, CCCODICE, CCDESCR, cpccchk, CCFLFATT, CCFLREP, CCDESSUP, CCTIPCOD, CCGRUPPO, CCIMPINT, CCIMPMAN, CCSERINT, CCSERMAN, CCNUMORE, CCPERMAN, CORECOM, CODTOBSO, + 0 as CCRAPABI, CCRIAPRE, '' as CCCHIINT, 0 as CCRAPOBB +FROM dbo.CCHIUSA where COALESCE(CODTOBSO, '') = '' and coalesce(CCCODICE,'')<>'' +GO +/****** Object: View [dbo].[API_CLIENTI] Script Date: 22/03/2023 14:19:54 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_CLIENTI] +AS +SELECT ANTIPCON, ANCODICE, AN_EMAIL,ANCODFIS,ANPARIVA,ANINDIRI, ANTELEFO, ANNUMCEL, AN_EMPEC,ANDESCRI,ANNUMLIS +FROM dbo.DISCOCONTI +WHERE (ANTIPCON = 'C') +GO +/****** Object: View [dbo].[API_PAGAMENTI] Script Date: 22/03/2023 14:20:28 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_PAGAMENTI] +AS +select PACODICE,PADESCRI from DISCOPAG_AMEN +GO +/****** Object: View [dbo].[API_RAPP_NEW] Script Date: 22/03/2023 14:21:13 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_RAPP_NEW] +AS +SELECT SERIALE_RAPPORTINO, TIPO_RAPPORTINO, AZIENDA_IMPIANTO, CODICE_IMPIANTO, AZIENDA_CHIAMATA, SERIALE_CHIAMATA, SERIALE_COMMESSA, DATA_RAPPORTINO, ORA_INI_RAPPORTINO, + MIN_INI_RAPPORTINO, ORA_FIN_RAPPORTINO, MIN_FIN_RAPPORTINO, CODICE_CHIUSURA_1, CODICE_CHIUSURA_2, CODICE_CHIUSURA_3, CODICE_CHIUSURA_4, CODICE_CHIUSURA_5, + CODICE_CHIUSURA_6, CODICE_CHIUSURA_7, CODICE_CHIUSURA_8, CODICE_CHIUSURA_9, CODICE_CHIUSURA_10, DESCRIZIONE_INTERVENTO, STATO_FINALE, GENERATO, AZIENDA_TECNICO, + CODICE_TECNICO, RIFIUTATA, FIRMA, INCARICO, DATA_VALIDITA, IMMAGINE, SER_BUONO,CODICE_INTERVENTO, + + '' as DIFETTI_RISCONTRATI, '' as LAVORO_ESEGUITO, '' as ESITO_INTERVENTO,'' as NOTE_ESITO, '' as NOTE_INTERVENTO,'' as NUOVO_CONTRATTO, 0.00 as ORE_LAVORO, '' as CAUSALE, + 0.00 as MATERIALE, 0.00 as DIRITTO_CHIAMATA, 0.00 as MANODOPERA, 0.00 as SPESE_VIAGGIO, + '' as PAGAMENTO, 0.00 as ANTICIPO, 0.00 as TOTALE, '' as NOTE_PAGAMENTO, '' as TIPO_INTERVENTO, '' as RAFOTO1, '' as RAFOTO2, '' as RAFOTO3, '' as RAFOTO4, '' as RAFOTO5, + '' as RAFOTO6, '' as RAFOTO7, '' as RAFOTO8, '' as RAFOTO9, '' as RAFOTO10, + DATA_EFFETTIVA +FROM dbo.RAPP_NEW +GO +/****** Object: View [dbo].[API_STO_RAPP] Script Date: 22/03/2023 14:22:26 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + + +ALTER VIEW [dbo].[API_STO_RAPP] +AS + +select +PICODINT as codice_intervento, +PIDATMAN as data_manutenzione +,CODINTE.CIDESCRI,CIDESSUP, +TCCODICE,TCDESCRI,DATA_RAPPORTINO +, STATO_FINALE,DESCRIZIONE_INTERVENTO,FIRMA +,SERIALE_CHIAMATA,TIPO_RAPPORTINO,CHCODSEG as codice_segnalazione,SER_BUONO, +--campi rappmast +'' as NOTE_ESITO,'' as ESITO_INTERVENTO, +--fine campi rappmast +'' as DIFETTI_RISCONTRATI,'' as LAVORO_ESEGUITO,'' as NOTE_INTERVENTO +,0.00 as ORE_LAVORO,0.00 as MATERIALE,0.00 as DIRITTO_CHIAMATA,0.00 as ANTICIPO, 0.00 as MANODOPERA, 0.00 as SPESE_VIAGGIO,'' as pagamento,CODICE_IMPIANTO, +0.00 as TOTALE,'' as NOTE_PAGAMENTO,'' as TIPO_INTERVENTO,GENERATO,AZIENDA_TECNICO,AZIENDA_IMPIANTO,AZIENDA_CHIAMATA + +,CODICE_CHIUSURA_1,CODICE_CHIUSURA_2,CODICE_CHIUSURA_3,CODICE_CHIUSURA_4,CODICE_CHIUSURA_5, +CODICE_CHIUSURA_6,CODICE_CHIUSURA_7,CODICE_CHIUSURA_8,CODICE_CHIUSURA_9,CODICE_CHIUSURA_10 +,SERIALE_RAPPORTINO + +,DATA_EFFETTIVA +,IMINDIRI1 as indirizzo_tipo ,IMINDIRI2 as indirizzo,IMINDIRI3 as indirizzo_num ,IMINDIRI4 as indirizzo_num2,IMINDIRI5 as indirizzo_scala +,(select CCDESCR from CCHIUSA where CCCODAZI='DISCO' and CCCODICE=CODICE_CHIUSURA_1) as cc1 +,(select CCDESCR from CCHIUSA where CCCODAZI='DISCO' and CCCODICE=CODICE_CHIUSURA_2) as cc2 +,(select CCDESCR from CCHIUSA where CCCODAZI='DISCO' and CCCODICE=CODICE_CHIUSURA_3) as cc3 +,(select CCDESCR from CCHIUSA where CCCODAZI='DISCO' and CCCODICE=CODICE_CHIUSURA_4) as cc4 +,(select CCDESCR from CCHIUSA where CCCODAZI='DISCO' and CCCODICE=CODICE_CHIUSURA_5) as cc5 +,(select CCDESCR from CCHIUSA where CCCODAZI='DISCO' and CCCODICE=CODICE_CHIUSURA_6) as cc6 +,(select CCDESCR from CCHIUSA where CCCODAZI='DISCO' and CCCODICE=CODICE_CHIUSURA_7) as cc7 +,(select CCDESCR from CCHIUSA where CCCODAZI='DISCO' and CCCODICE=CODICE_CHIUSURA_8) as cc8 +,(select CCDESCR from CCHIUSA where CCCODAZI='DISCO' and CCCODICE=CODICE_CHIUSURA_9) as cc9 +,(select CCDESCR from CCHIUSA where CCCODAZI='DISCO' and CCCODICE=CODICE_CHIUSURA_10) as cc10 + +,(select CCDESSUP from CCHIUSA where CCCODAZI='DISCO' and CCCODICE=CODICE_CHIUSURA_1) as ccds1 +,(select CCDESSUP from CCHIUSA where CCCODAZI='DISCO' and CCCODICE=CODICE_CHIUSURA_2) as ccds2 +,(select CCDESSUP from CCHIUSA where CCCODAZI='DISCO' and CCCODICE=CODICE_CHIUSURA_3) as ccds3 +,(select CCDESSUP from CCHIUSA where CCCODAZI='DISCO' and CCCODICE=CODICE_CHIUSURA_4) as ccds4 +,(select CCDESSUP from CCHIUSA where CCCODAZI='DISCO' and CCCODICE=CODICE_CHIUSURA_5) as ccds5 +,(select CCDESSUP from CCHIUSA where CCCODAZI='DISCO' and CCCODICE=CODICE_CHIUSURA_6) as ccds6 +,(select CCDESSUP from CCHIUSA where CCCODAZI='DISCO' and CCCODICE=CODICE_CHIUSURA_7) as ccds7 +,(select CCDESSUP from CCHIUSA where CCCODAZI='DISCO' and CCCODICE=CODICE_CHIUSURA_8) as ccds8 +,(select CCDESSUP from CCHIUSA where CCCODAZI='DISCO' and CCCODICE=CODICE_CHIUSURA_9) as ccds9 +,(select CCDESSUP from CCHIUSA where CCCODAZI='DISCO' and CCCODICE=CODICE_CHIUSURA_10) as ccds10 + +from DISCORAPPMAST RAPPMAST left outer join RAPP_NEW on RASERIAL=SERIALE_RAPPORTINO +left outer join TECNICI on RACODTE1=TCCODICE and TCCODAZI='DISCO' +left outer join CHIAMATE on CHCODAZI='DISCO' and CHSERIAL=SERIALE_CHIAMATA and TIPO_RAPPORTINO='3' +left outer join PIPRESA on PIMPIANTO=CODICE_IMPIANTO and PICODINT=CODICE_INTERVENTO and PICODAZI='DISCO' and PIDATMAN=DATA_EFFETTIVA +LEFT OUTER JOIN CODINTE ON PICODINT = dbo.CODINTE.CICODICE +LEFT OUTER JOIN dbo.MIMPIANTI ON AZIENDA_IMPIANTO = dbo.MIMPIANTI.IMCODAZI AND CODICE_IMPIANTO = dbo.MIMPIANTI.IMCODIMP +where SERIALE_RAPPORTINO is not null +and DATA_RAPPORTINO>=DATEADD(month, -2, GETDATE()) +GO +/****** Object: View [dbo].[API_IMPIANTI] Script Date: 22/03/2023 14:26:02 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_IMPIANTI] +AS +SELECT dbo.MIMPIANTI.IMCODAZI, dbo.MIMPIANTI.IMCODIMP, dbo.MIMPIANTI.IMDESCRI, dbo.MIMPIANTI.IMTIPOIM, dbo.MIMPIANTI.IMMATRIC, dbo.MIMPIANTI.IMNUMIMP, dbo.MIMPIANTI.IMULTCLI, + dbo.MIMPIANTI.IMULTDCL, dbo.MIMPIANTI.IMULTAMM, dbo.MIMPIANTI.IMULTDAM, dbo.MIMPIANTI.IMULTTAM, dbo.MIMPIANTI.IMINDIRI1, dbo.MIMPIANTI.IMINDIRI2, dbo.MIMPIANTI.IMINDIRI3, + dbo.MIMPIANTI.IMINDIRI4, dbo.MIMPIANTI.IMINDIRI5, dbo.MIMPIANTI.IMLOCALI, dbo.MIMPIANTI.IMCODCAP, dbo.MIMPIANTI.IMCOMUNE, dbo.MIMPIANTI.IMPROVIN, dbo.MIMPIANTI.IMCODNAZ, + dbo.MIMPIANTI.IMUBICAZ, dbo.MIMPIANTI.IMZONMAN, dbo.MIMPIANTI.IMFLPUPR, dbo.MIMPIANTI.UTDC, dbo.MIMPIANTI.UTDV, dbo.MIMPIANTI.IMPIAMAN, dbo.MIMPIANTI.IMDATATT, dbo.MIMPIANTI.IMZONCHI, + dbo.MIMPIANTI.IMZONSUP, dbo.MIMPIANTI.IMDAINMA, dbo.MIMPIANTI.IMDAFIMA, dbo.MIMPIANTI.IMDATCOS, dbo.MIMPIANTI.IMTELESO, + dbo.API_CLIENTI.AN_EMAIL,dbo.MIMPIANTI.IMAZIRIF,dbo.MIMPIANTI.IMREFREF +FROM dbo.MIMPIANTI INNER JOIN + dbo.API_CLIENTI ON dbo.MIMPIANTI.IMULTCLI = dbo.API_CLIENTI.ANCODICE +GO +/****** Object: View [dbo].[API_TECNICI] Script Date: 22/03/2023 14:27:11 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_TECNICI] +AS +SELECT dbo.TECNICI.TCCODICE, dbo.TECNICI.TCDESCRI, dbo.TECNICI.TCTELEF1, dbo.TECNICI.TCCHIAM, dbo.TECNICI.TCMANUT, dbo.TECNICI.TCCODAZI, dbo.TECNICI.TCSUPER, dbo.TECNICI.TCUSER, dbo.TECNICI.TCPWD, + dbo.TECDISP.TDCODZON, dbo.TECDISP.TDDATAIN, dbo.TECDISP.TDDATAFI,TCCOOR as costo_ordinario,TCCONO as costo_notturno,TCCOST as costo_straordinario,TCCOFE as costo_festivo +FROM dbo.TECNICI INNER JOIN + dbo.TECDISP ON dbo.TECNICI.TCCODICE = dbo.TECDISP.TDCODTEC AND dbo.TECNICI.TCCODAZI = dbo.TECDISP.TDCODAZI +GO +/****** Object: View [dbo].[API_CHIAMATE] Script Date: 20/03/2023 08:58:18 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_CHIAMATE] +AS +select +ic.SERIALE_RAPPORTINO as ser_rapp_ic,ic.TIPO_RAPPORTINO as tipo_rapp_ic,/*pc.GENERATO,pc.RIFIUTATA,*/ic.INCARICO as ic, +rif.SERIALE_RAPPORTINO as ser_rapp_rif,rif.TIPO_RAPPORTINO as tipo_rapp_rif,/*rif.GENERATO,*/rif.RIFIUTATA as rif,/*rif.INCARICO,*/ +chiu.SERIALE_RAPPORTINO as ser_rapp_chiu,chiu.TIPO_RAPPORTINO as tipo_rapp_chiu,chiu.SER_BUONO as ser_buono_chiu, +'' as err_title,''as err_detail,'' as err_status_code, +dbo.CHIAMATE.CHCODAZI, dbo.CHIAMATE.CHSERIAL, dbo.CHIAMATE.CHCODESE, dbo.CHIAMATE.CHTIPO, dbo.CHIAMATE.CHNUMERO, dbo.CHIAMATE.CHDATA, dbo.CHIAMATE.CHORA, dbo.CHIAMATE.CHMIN, +dbo.CHIAMATE.CHOPASS, dbo.CHIAMATE.CHOPCHI, dbo.CHIAMATE.CHCODIMP, dbo.CHIAMATE.CHAZIIMP, dbo.CHIAMATE.CHSTATO, dbo.CHIAMATE.CHDTAPP, dbo.CHIAMATE.CHORAAPI, dbo.CHIAMATE.CHMINAPI, +dbo.CHIAMATE.CHORAAPF, dbo.CHIAMATE.CHMINAPF, dbo.CHIAMATE.CHRIFER, dbo.CHIAMATE.CHTELEF, dbo.CHIAMATE.CHCODSEG, dbo.CHIAMATE.CHSTOPI, dbo.CHIAMATE.CHNOTE, dbo.CHIAMATE.CHDTASS, +dbo.CHIAMATE.CHORASS, dbo.CHIAMATE.CHMINASS, dbo.CHIAMATE.CHDTCHI, dbo.CHIAMATE.CHORACHI, dbo.CHIAMATE.CHMINCHI, dbo.CHIAMATE.CHDTLIN, dbo.CHIAMATE.CHORALI, dbo.CHIAMATE.CHMINLI, +dbo.CHIAMATE.CHDTLFI, dbo.CHIAMATE.CHORALF, dbo.CHIAMATE.CHMINLF, dbo.CHIAMATE.cpccchk, dbo.CHIAMATE.CHNRAP1, dbo.CHIAMATE.CHSRAP1, dbo.CHIAMATE.CHNRAP2, dbo.CHIAMATE.CHSRAP2, +dbo.CHIAMATE.CHMODRAC, dbo.CHIAMATE.CHPRGANN, dbo.CHIAMATE.UTCC, dbo.CHIAMATE.UTCV, dbo.CHIAMATE.CHIMPMAN, dbo.CHIAMATE.CHPERMAN, dbo.CHIAMATE.CHFLSTIM, dbo.CHIAMATE.CHFLESTE,CHIAMATE.CHTCHIAM as TCCODICE, +dbo.CHIAMATE.CHSEREXT, dbo.API_IMPIANTI.IMDESCRI, dbo.API_IMPIANTI.IMTIPOIM, dbo.API_IMPIANTI.IMMATRIC, dbo.API_IMPIANTI.IMNUMIMP, dbo.API_IMPIANTI.IMULTAMM, dbo.API_IMPIANTI.IMULTDAM, +dbo.API_IMPIANTI.IMULTTAM, dbo.API_IMPIANTI.IMINDIRI1, dbo.API_IMPIANTI.IMINDIRI2, dbo.API_IMPIANTI.IMINDIRI3, dbo.API_IMPIANTI.IMINDIRI4, dbo.API_IMPIANTI.IMINDIRI5, dbo.API_IMPIANTI.IMLOCALI, +dbo.API_IMPIANTI.IMCODCAP, dbo.API_IMPIANTI.IMCOMUNE, dbo.API_IMPIANTI.IMPROVIN, dbo.API_IMPIANTI.IMCODNAZ, dbo.API_IMPIANTI.IMUBICAZ, dbo.API_IMPIANTI.IMZONMAN, dbo.API_IMPIANTI.IMFLPUPR, +dbo.API_IMPIANTI.IMZONCHI, dbo.API_IMPIANTI.IMZONSUP, dbo.API_IMPIANTI.IMDAINMA, dbo.API_IMPIANTI.IMDAFIMA, dbo.API_IMPIANTI.IMDATCOS, dbo.API_IMPIANTI.IMTELESO, dbo.API_IMPIANTI.AN_EMAIL, +dbo.API_IMPIANTI.IMULTCLI, dbo.DISCOCONTI.ANCODICE, dbo.DISCOCONTI.ANTIPCON, dbo.DISCOCONTI.ANDESCRI, dbo.DISCOCONTI.ANTELEFO, dbo.CODSEGN.CSDESCR, dbo.CHIAMATE.CHTCHIAM +,dbo.API_IMPIANTI.IMAZIRIF as IMAZIRIF,dbo.API_IMPIANTI.IMREFREF +,(select top 1 tcdescri from API_TECNICI where TCCODICE=CHIAMATE.CHTCHIAM) as TCDESCRI +,(select top 1 CTIMPCHI from DISCOMCONMAST where CTCODCLI=ANCODICE and CTFLSTAT='A' order by CTDATREG desc) as chiamata +,(select top 1 CTIMPVIA from DISCOMCONMAST where CTCODCLI=ANCODICE and CTFLSTAT='A' order by CTDATREG desc) as spe_viaggio +,(select top 1 costo_ordinario from API_TECNICI where TCCODICE=CHIAMATE.CHTCHIAM) as costo_ordinario +,(select top 1 costo_notturno from API_TECNICI where TCCODICE=CHIAMATE.CHTCHIAM) as costo_notturno +,(select top 1 costo_straordinario from API_TECNICI where TCCODICE=CHIAMATE.CHTCHIAM) as costo_straordinario +,(select top 1 costo_festivo from API_TECNICI where TCCODICE=CHIAMATE.CHTCHIAM) as costo_festivo +from CHIAMATE +left outer join RAPP_NEW as ic on (ic.SERIALE_CHIAMATA=CHSERIAL and ic.AZIENDA_CHIAMATA=CHCODAZI and ic.CODICE_TECNICO=CHTCHIAM and LTRIM(RTRIM(coalesce(ic.TIPO_RAPPORTINO,'')))='' /*and ic.GENERATO is NULL*/ and (ic.RIFIUTATA='N' )) +left outer join RAPP_NEW as rif on (rif.SERIALE_CHIAMATA=CHSERIAL and rif.AZIENDA_CHIAMATA=CHCODAZI and rif.CODICE_TECNICO=CHTCHIAM and LTRIM(RTRIM(coalesce(rif.TIPO_RAPPORTINO,'')))='' /*and rif.GENERATO is NULL*/ and (rif.RIFIUTATA='S' )) +left outer join RAPP_NEW as chiu on (chiu.SERIALE_CHIAMATA=CHSERIAL and chiu.AZIENDA_CHIAMATA=CHCODAZI and chiu.CODICE_TECNICO=CHTCHIAM and LTRIM(RTRIM(coalesce(chiu.TIPO_RAPPORTINO,'')))='3' /*and chiu.GENERATO is NULL*/ ) +left outer join CODSEGN ON dbo.CODSEGN.CSCODICE = dbo.CHIAMATE.CHCODSEG AND dbo.CODSEGN.CSCODAZI = dbo.CHIAMATE.CHCODAZI +LEFT OUTER JOIN dbo.DISCOCONTI +INNER JOIN dbo.API_IMPIANTI ON dbo.DISCOCONTI.ANCODICE = dbo.API_IMPIANTI.IMULTCLI AND dbo.DISCOCONTI.ANTIPCON = 'C' ON dbo.CHIAMATE.CHAZIIMP = dbo.API_IMPIANTI.IMCODAZI AND dbo.CHIAMATE.CHCODIMP = dbo.API_IMPIANTI.IMCODIMP + +where 1=1 +and dbo.CHIAMATE.CHSTATO = 'C' +and CHIAMATE.CHDATA>=DATEADD(month, -3, GETDATE()) +and CHIAMATE.CHDATA<=DATEADD(month, 3, GETDATE()) + +GO +/****** Object: View [dbo].[API_MANPROG] Script Date: 20/03/2023 08:59:11 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_MANPROG] +AS + +SELECT +PRESA.PIMPIANTO,PRESA.PICODINT,PRESA.PIDATMAN +,RAPP_NEW.SERIALE_RAPPORTINO,RAPP_NEW.SER_BUONO,RAPP_NEW.GENERATO,RAPP_NEW.CODICE_INTERVENTO +,'' as err_title,''as err_detail,'' as err_status_code +,dbo.MANPROG.MPCODAZI AS CTCODAZI, dbo.MANPROG.MPCODIMP AS CTCODIMP, dbo.MANPROG.MPCODINT AS CTCODINT, dbo.CODINTE.CIDESCRI AS CTDESINT, dbo.MANPROG.MPDATPRO AS CTDATPRO, +dbo.MIMPIANTI.IMDESCRI, dbo.MIMPIANTI.IMTIPOIM, dbo.MIMPIANTI.IMMATRIC, dbo.MIMPIANTI.IMNUMIMP, dbo.MIMPIANTI.IMULTDAM, dbo.MIMPIANTI.IMULTAMM, dbo.MIMPIANTI.IMINDIRI1, dbo.MIMPIANTI.IMINDIRI2, +dbo.MIMPIANTI.IMINDIRI3, dbo.MIMPIANTI.IMINDIRI4, dbo.MIMPIANTI.IMINDIRI5, dbo.MIMPIANTI.IMLOCALI, dbo.MIMPIANTI.IMCODCAP, dbo.MIMPIANTI.IMCOMUNE, dbo.MIMPIANTI.IMPROVIN, dbo.MIMPIANTI.IMCODNAZ, +dbo.MIMPIANTI.IMUBICAZ, dbo.MIMPIANTI.IMZONMAN, dbo.MIMPIANTI.IMRIFERI, dbo.MIMPIANTI.IMZONCHI, dbo.MIMPIANTI.IMZONSUP, +dbo.MIMPIANTI.IMULTTAM as TELEFONO1,dbo.MIMPIANTI.IMULTFAM as TELEFONO2,dbo.MIMPIANTI.IMULTCLI as CLIENTE, +dbo.MANPROG.MPMESGEN, dbo.MANPROG.MPMESFEB, dbo.MANPROG.MPMESMAR, dbo.MANPROG.MPMESAPR, dbo.MANPROG.MPMESMAG, dbo.MANPROG.MPMESLUG, +dbo.MANPROG.MPMESGIU, dbo.MANPROG.MPMESAGO, dbo.MANPROG.MPMESSET, dbo.MANPROG.MPMESOTT, dbo.MANPROG.MPMESNOV, dbo.MANPROG.MPMESDIC, +T.TCDESCRI,T.TCCODICE,dbo.API_IMPIANTI.IMAZIRIF as IMAZIRIF,dbo.MIMPIANTI.IMREFREF +,(select top 1 CTIMPCHI from DISCOMCONMAST where CTCODCLI=IMULTCLI and CTFLSTAT='A' order by CTDATREG desc) as chiamata +,(select top 1 CTIMPVIA from DISCOMCONMAST where CTCODCLI=IMULTCLI and CTFLSTAT='A' order by CTDATREG desc) as spe_viaggio +,(select top 1 costo_ordinario from API_TECNICI where TCCODICE=T.TCCODICE) as costo_ordinario +,(select top 1 costo_notturno from API_TECNICI where TCCODICE=T.TCCODICE) as costo_notturno +,(select top 1 costo_straordinario from API_TECNICI where TCCODICE=T.TCCODICE) as costo_straordinario +,(select top 1 costo_festivo from API_TECNICI where TCCODICE=T.TCCODICE) as costo_festivo + +FROM dbo.MANPROG INNER JOIN dbo.MIMPIANTI ON dbo.MANPROG.MPCODAZI = dbo.MIMPIANTI.IMCODAZI AND dbo.MANPROG.MPCODIMP = dbo.MIMPIANTI.IMCODIMP +LEFT OUTER JOIN dbo.CODINTE ON dbo.MANPROG.MPCODINT = dbo.CODINTE.CICODICE +INNER JOIN API_TECNICI T ON MIMPIANTI.IMZONMAN=T.TDCODZON AND MANPROG.MPCODAZI=T.TCCODAZI and t.TDDATAFI>=GETDATE() +left outer join PIPRESA as PRESA on (PICODAZI=MPCODAZI and MPCODIMP=PIMPIANTO and MPCODINT=PICODINT and TCCODICE=picodtec) +left outer join RAPP_NEW on (MANPROG.MPCODAZI=AZIENDA_CHIAMATA and MANPROG.MPCODIMP=CODICE_IMPIANTO and LTRIM(RTRIM(coalesce(TIPO_RAPPORTINO,'')))='2' and MANPROG.MPCODINT=CODICE_INTERVENTO /*and GENERATO is null*/and MPDATPRO=DATA_VALIDITA) +where MANPROG.MPDATPRO>=DATEADD(month, -3, GETDATE()) +and MANPROG.MPDATPRO<=EOMONTH(GETDATE(),0) +and LTRIM(rtrim(coalesce(GENERATO,'')))<>'S' +GO +/****** Object: View [dbo].[API_SOSTITUZIONI] Script Date: 20/03/2023 09:01:39 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE VIEW [dbo].[API_SOSTITUZIONI] +AS +SELECT [TSCODAZI],[TSCODTEC],[TSCODZON],[TSDATAIN],[TSDATAFI],[TSCODSOS] + FROM [dbo].[TECSOS] + where [TSDATAIN]<=DATEADD(DAY, -1, GETDATE()) + and [TSDATAFI]>=DATEADD(DAY, 1, GETDATE()) + and [TSCODAZI]='DISCO' +GO \ No newline at end of file diff --git a/ApiPolo/SQL/Gitoga_1_8.txt b/ApiPolo/SQL/Gitoga_1_8.txt new file mode 100644 index 0000000..3f6c747 --- /dev/null +++ b/ApiPolo/SQL/Gitoga_1_8.txt @@ -0,0 +1,314 @@ +USE [R80_GITSR] +GO + +/****** Object: View [dbo].[API_CAUS_RAPP] Script Date: 20/03/2023 09:52:57 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_CAUS_RAPP] +AS +select CRCODICE,CRDESCRI,CRRIFATT from [R80_MARROCCO].dbo.GITSRCAUSRAPP +GO +/****** Object: View [dbo].[API_CHIUSURE] Script Date: 20/03/2023 09:53:46 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_CHIUSURE] +AS +SELECT CCCODAZI, CCCODICE, CCDESCR, cpccchk, CCFLFATT, CCFLREP, CCDESSUP, CCTIPCOD, CCGRUPPO, CCIMPINT, CCIMPMAN, CCSERINT, CCSERMAN, CCNUMORE, CCPERMAN, CORECOM, CODTOBSO, + 0 as CCRAPABI, CCRIAPRE, '' as CCCHIINT, 0 as CCRAPOBB +FROM [R80_MARROCCO].dbo.CCHIUSA where COALESCE(CODTOBSO, '') = '' and CCCODAZI='GITSR' +GO +/****** Object: View [dbo].[API_CLIENTI] Script Date: 20/03/2023 09:54:39 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_CLIENTI] +AS +SELECT ANTIPCON, ANCODICE, AN_EMAIL,ANCODFIS,ANPARIVA,ANINDIRI, ANTELEFO, ANNUMCEL, AN_EMPEC,ANDESCRI,ANNUMLIS +FROM [R80_MARROCCO].dbo.GITSRCONTI +WHERE (ANTIPCON = 'C') +GO +/****** Object: View [dbo].[API_PAGAMENTI] Script Date: 20/03/2023 09:55:24 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_PAGAMENTI] +AS +select PACODICE,PADESCRI from [R80_MARROCCO].dbo.GITSRPAG_AMEN +GO +/****** Object: View [dbo].[API_RAPP_NEW] Script Date: 20/03/2023 09:56:43 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_RAPP_NEW] +AS +SELECT SERIALE_RAPPORTINO, TIPO_RAPPORTINO, AZIENDA_IMPIANTO, CODICE_IMPIANTO, AZIENDA_CHIAMATA, SERIALE_CHIAMATA, SERIALE_COMMESSA, DATA_RAPPORTINO, ORA_INI_RAPPORTINO, + MIN_INI_RAPPORTINO, ORA_FIN_RAPPORTINO, MIN_FIN_RAPPORTINO, CODICE_CHIUSURA_1, CODICE_CHIUSURA_2, CODICE_CHIUSURA_3, CODICE_CHIUSURA_4, CODICE_CHIUSURA_5, + CODICE_CHIUSURA_6, CODICE_CHIUSURA_7, CODICE_CHIUSURA_8, CODICE_CHIUSURA_9, CODICE_CHIUSURA_10, DESCRIZIONE_INTERVENTO, STATO_FINALE, GENERATO, AZIENDA_TECNICO, + CODICE_TECNICO, RIFIUTATA, FIRMA, INCARICO, DATA_VALIDITA, IMMAGINE, '' as SER_BUONO,'' as CODICE_INTERVENTO, + DIFETTI_RISCONTRATI, LAVORO_ESEGUITO, ESITO_INTERVENTO,NOTE_ESITO, NOTE_INTERVENTO,NUOVO_CONTRATTO, ORE_LAVORO, CAUSALE, MATERIALE, DIRITTO_CHIAMATA, MANODOPERA, SPESE_VIAGGIO, + PAGAMENTO, ANTICIPO, TOTALE, NOTE_PAGAMENTO, TIPO_INTERVENTO, RAFOTO1, RAFOTO2, RAFOTO3, RAFOTO4, RAFOTO5, RAFOTO6, RAFOTO7, RAFOTO8, RAFOTO9, RAFOTO10 +FROM [R80_MARROCCO].dbo.RAPP_NEW where AZIENDA_IMPIANTO='GITSR' +GO +/****** Object: View [dbo].[API_STO_RAPP] Script Date: 20/03/2023 09:57:39 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_STO_RAPP] +AS +select + +PICODINT as codice_intervento, +PIDATMAN as data_manutenzione +,CODINTE.CIDESCRI,CIDESSUP, +TCCODICE,TCDESCRI,/*RAPPMAST.NOTE_ESITO,*/'' as NOTE_ESITO,DATA_RAPPORTINO +, STATO_FINALE,/*RAPPMAST.ESITO_INTERVENTO,*/'' as ESITO_INTERVENTO,DESCRIZIONE_INTERVENTO,FIRMA +,SERIALE_CHIAMATA,TIPO_RAPPORTINO,CHCODSEG as codice_segnalazione,SER_BUONO,DIFETTI_RISCONTRATI,LAVORO_ESEGUITO,NOTE_INTERVENTO +,ORE_LAVORO,MATERIALE,DIRITTO_CHIAMATA,ANTICIPO, MANODOPERA, SPESE_VIAGGIO,pagamento,CODICE_IMPIANTO, +TOTALE,NOTE_PAGAMENTO,TIPO_INTERVENTO,GENERATO,AZIENDA_TECNICO,AZIENDA_IMPIANTO,AZIENDA_CHIAMATA + +,CODICE_CHIUSURA_1,CODICE_CHIUSURA_2,CODICE_CHIUSURA_3,CODICE_CHIUSURA_4,CODICE_CHIUSURA_5, +CODICE_CHIUSURA_6,CODICE_CHIUSURA_7,CODICE_CHIUSURA_8,CODICE_CHIUSURA_9,CODICE_CHIUSURA_10 +,SERIALE_RAPPORTINO + +,DATA_EFFETTIVA +,IMINDIRI1 as indirizzo_tipo ,IMINDIRI2 as indirizzo,IMINDIRI3 as indirizzo_num ,IMINDIRI4 as indirizzo_num2,IMINDIRI5 as indirizzo_scala +,(select CCDESCR from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_1) as cc1 +,(select CCDESCR from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_2) as cc2 +,(select CCDESCR from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_3) as cc3 +,(select CCDESCR from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_4) as cc4 +,(select CCDESCR from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_5) as cc5 +,(select CCDESCR from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_6) as cc6 +,(select CCDESCR from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_7) as cc7 +,(select CCDESCR from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_8) as cc8 +,(select CCDESCR from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_9) as cc9 +,(select CCDESCR from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_10) as cc10 + +,(select CCDESSUP from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_1) as ccds1 +,(select CCDESSUP from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_2) as ccds2 +,(select CCDESSUP from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_3) as ccds3 +,(select CCDESSUP from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_4) as ccds4 +,(select CCDESSUP from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_5) as ccds5 +,(select CCDESSUP from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_6) as ccds6 +,(select CCDESSUP from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_7) as ccds7 +,(select CCDESSUP from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_8) as ccds8 +,(select CCDESSUP from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_9) as ccds9 +,(select CCDESSUP from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='GITSR' and CCCODICE=CODICE_CHIUSURA_10) as ccds10 + +from [R80_MARROCCO].dbo.GITSRRAPPMAST RAPPMAST left outer join [R80_MARROCCO].dbo.RAPP_NEW on RASERIAL=SERIALE_RAPPORTINO +left outer join [R80_MARROCCO].dbo.TECNICI on RACODTE1=TCCODICE and TCCODAZI='GITSR' +left outer join [R80_MARROCCO].dbo.CHIAMATE on CHCODAZI='GITSR' and CHSERIAL=SERIALE_CHIAMATA and TIPO_RAPPORTINO='3' +left outer join [R80_MARROCCO].dbo.PIPRESA on PIMPIANTO=CODICE_IMPIANTO and PICODINT=CODICE_INTERVENTO and PICODAZI='GITSR' and PIDATMAN=DATA_EFFETTIVA +LEFT OUTER JOIN [R80_MARROCCO].dbo.CODINTE ON PICODINT = [R80_MARROCCO].dbo.CODINTE.CICODICE +LEFT OUTER JOIN [R80_MARROCCO].dbo.MIMPIANTI ON AZIENDA_IMPIANTO = [R80_MARROCCO].dbo.MIMPIANTI.IMCODAZI AND CODICE_IMPIANTO = [R80_MARROCCO].dbo.MIMPIANTI.IMCODIMP +where SERIALE_RAPPORTINO is not null +and DATA_RAPPORTINO>=DATEADD(month, -2, GETDATE()) +GO +/****** Object: View [dbo].[API_IMPIANTI] Script Date: 20/03/2023 10:01:23 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_IMPIANTI] +AS +SELECT +[R80_MARROCCO].dbo.MIMPIANTI.IMCODAZI, [R80_MARROCCO].dbo.MIMPIANTI.IMCODIMP, [R80_MARROCCO].dbo.MIMPIANTI.IMDESCRI, [R80_MARROCCO].dbo.MIMPIANTI.IMTIPOIM, +[R80_MARROCCO].dbo.MIMPIANTI.IMMATRIC, [R80_MARROCCO].dbo.MIMPIANTI.IMNUMIMP, [R80_MARROCCO].dbo.MIMPIANTI.IMULTCLI, +[R80_MARROCCO].dbo.MIMPIANTI.IMULTDCL, [R80_MARROCCO].dbo.MIMPIANTI.IMULTAMM, [R80_MARROCCO].dbo.MIMPIANTI.IMULTDAM, [R80_MARROCCO].dbo.MIMPIANTI.IMULTTAM, +[R80_MARROCCO].dbo.MIMPIANTI.IMINDIRI1, [R80_MARROCCO].dbo.MIMPIANTI.IMINDIRI2, [R80_MARROCCO].dbo.MIMPIANTI.IMINDIRI3, +[R80_MARROCCO].dbo.MIMPIANTI.IMINDIRI4, [R80_MARROCCO].dbo.MIMPIANTI.IMINDIRI5, [R80_MARROCCO].dbo.MIMPIANTI.IMLOCALI, [R80_MARROCCO].dbo.MIMPIANTI.IMCODCAP, +[R80_MARROCCO].dbo.MIMPIANTI.IMCOMUNE, [R80_MARROCCO].dbo.MIMPIANTI.IMPROVIN, [R80_MARROCCO].dbo.MIMPIANTI.IMCODNAZ, +[R80_MARROCCO].dbo.MIMPIANTI.IMUBICAZ, [R80_MARROCCO].dbo.MIMPIANTI.IMZONMAN, [R80_MARROCCO].dbo.MIMPIANTI.IMFLPUPR, [R80_MARROCCO].dbo.MIMPIANTI.UTDC, +[R80_MARROCCO].dbo.MIMPIANTI.UTDV, [R80_MARROCCO].dbo.MIMPIANTI.IMPIAMAN, [R80_MARROCCO].dbo.MIMPIANTI.IMDATATT, [R80_MARROCCO].dbo.MIMPIANTI.IMZONCHI, +[R80_MARROCCO].dbo.MIMPIANTI.IMZONSUP, [R80_MARROCCO].dbo.MIMPIANTI.IMDAINMA, [R80_MARROCCO].dbo.MIMPIANTI.IMDAFIMA, +[R80_MARROCCO].dbo.MIMPIANTI.IMDATCOS, [R80_MARROCCO].dbo.MIMPIANTI.IMTELESO, [R80_MARROCCO].dbo.API_CLIENTI.AN_EMAIL,'' as IMAZIRIF,[R80_MARROCCO].dbo.MIMPIANTI.IMREFREF +FROM [R80_MARROCCO].dbo.MIMPIANTI INNER JOIN + [R80_MARROCCO].dbo.API_CLIENTI ON [R80_MARROCCO].dbo.MIMPIANTI.IMULTCLI = [R80_MARROCCO].dbo.API_CLIENTI.ANCODICE +where [R80_MARROCCO].dbo.MIMPIANTI.IMCODAZI='GITSR' + +GO +/****** Object: View [dbo].[API_TECNICI] Script Date: 20/03/2023 10:02:53 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_TECNICI] +AS +SELECT +[R80_MARROCCO].dbo.TECNICI.TCCODICE, [R80_MARROCCO].dbo.TECNICI.TCDESCRI, [R80_MARROCCO].dbo.TECNICI.TCTELEF1, [R80_MARROCCO].dbo.TECNICI.TCCHIAM, [R80_MARROCCO].dbo.TECNICI.TCMANUT, +[R80_MARROCCO].dbo.TECNICI.TCCODAZI, [R80_MARROCCO].dbo.TECNICI.TCSUPER, [R80_MARROCCO].dbo.TECNICI.TCUSER, [R80_MARROCCO].dbo.TECNICI.TCPWD, +[R80_MARROCCO].dbo.TECDISP.TDCODZON, [R80_MARROCCO].dbo.TECDISP.TDDATAIN, [R80_MARROCCO].dbo.TECDISP.TDDATAFI,TCCOOR as costo_ordinario,TCCONO as costo_notturno, +TCCOST as costo_straordinario,TCCOFE as costo_festivo +FROM +[R80_MARROCCO].dbo.TECNICI INNER JOIN +[R80_MARROCCO].dbo.TECDISP ON [R80_MARROCCO].dbo.TECNICI.TCCODICE = [R80_MARROCCO].dbo.TECDISP.TDCODTEC AND [R80_MARROCCO].dbo.TECNICI.TCCODAZI = [R80_MARROCCO].dbo.TECDISP.TDCODAZI +GO +/****** Object: View [dbo].[API_CHIAMATE] Script Date: 20/03/2023 10:05:01 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_CHIAMATE] +AS +select +ic.SERIALE_RAPPORTINO as ser_rapp_ic,ic.TIPO_RAPPORTINO as tipo_rapp_ic,/*pc.GENERATO,pc.RIFIUTATA,*/ic.INCARICO as ic, +rif.SERIALE_RAPPORTINO as ser_rapp_rif,rif.TIPO_RAPPORTINO as tipo_rapp_rif,/*rif.GENERATO,*/rif.RIFIUTATA as rif,/*rif.INCARICO,*/ +chiu.SERIALE_RAPPORTINO as ser_rapp_chiu,chiu.TIPO_RAPPORTINO as tipo_rapp_chiu,chiu.SER_BUONO as ser_buono_chiu, +'' as err_title,''as err_detail,'' as err_status_code, +[R80_MARROCCO].dbo.CHIAMATE.CHCODAZI, [R80_MARROCCO].dbo.CHIAMATE.CHSERIAL, [R80_MARROCCO].dbo.CHIAMATE.CHCODESE, [R80_MARROCCO].dbo.CHIAMATE.CHTIPO, +[R80_MARROCCO].dbo.CHIAMATE.CHNUMERO, [R80_MARROCCO].dbo.CHIAMATE.CHDATA, [R80_MARROCCO].dbo.CHIAMATE.CHORA, [R80_MARROCCO].dbo.CHIAMATE.CHMIN, +[R80_MARROCCO].dbo.CHIAMATE.CHOPASS, [R80_MARROCCO].dbo.CHIAMATE.CHOPCHI, [R80_MARROCCO].dbo.CHIAMATE.CHCODIMP, [R80_MARROCCO].dbo.CHIAMATE.CHAZIIMP, +[R80_MARROCCO].dbo.CHIAMATE.CHSTATO, [R80_MARROCCO].dbo.CHIAMATE.CHDTAPP, [R80_MARROCCO].dbo.CHIAMATE.CHORAAPI, [R80_MARROCCO].dbo.CHIAMATE.CHMINAPI, +[R80_MARROCCO].dbo.CHIAMATE.CHORAAPF, [R80_MARROCCO].dbo.CHIAMATE.CHMINAPF, [R80_MARROCCO].dbo.CHIAMATE.CHRIFER, [R80_MARROCCO].dbo.CHIAMATE.CHTELEF, +[R80_MARROCCO].dbo.CHIAMATE.CHCODSEG, [R80_MARROCCO].dbo.CHIAMATE.CHSTOPI, [R80_MARROCCO].dbo.CHIAMATE.CHNOTE, [R80_MARROCCO].dbo.CHIAMATE.CHDTASS, +[R80_MARROCCO].dbo.CHIAMATE.CHORASS, [R80_MARROCCO].dbo.CHIAMATE.CHMINASS, [R80_MARROCCO].dbo.CHIAMATE.CHDTCHI, [R80_MARROCCO].dbo.CHIAMATE.CHORACHI, +[R80_MARROCCO].dbo.CHIAMATE.CHMINCHI, [R80_MARROCCO].dbo.CHIAMATE.CHDTLIN, [R80_MARROCCO].dbo.CHIAMATE.CHORALI, [R80_MARROCCO].dbo.CHIAMATE.CHMINLI, +[R80_MARROCCO].dbo.CHIAMATE.CHDTLFI, [R80_MARROCCO].dbo.CHIAMATE.CHORALF, [R80_MARROCCO].dbo.CHIAMATE.CHMINLF, [R80_MARROCCO].dbo.CHIAMATE.cpccchk, +[R80_MARROCCO].dbo.CHIAMATE.CHNRAP1, [R80_MARROCCO].dbo.CHIAMATE.CHSRAP1, [R80_MARROCCO].dbo.CHIAMATE.CHNRAP2, [R80_MARROCCO].dbo.CHIAMATE.CHSRAP2, +[R80_MARROCCO].dbo.CHIAMATE.CHMODRAC, [R80_MARROCCO].dbo.CHIAMATE.CHPRGANN, [R80_MARROCCO].dbo.CHIAMATE.UTCC, [R80_MARROCCO].dbo.CHIAMATE.UTCV, +[R80_MARROCCO].dbo.CHIAMATE.CHIMPMAN, [R80_MARROCCO].dbo.CHIAMATE.CHPERMAN, [R80_MARROCCO].dbo.CHIAMATE.CHFLSTIM, [R80_MARROCCO].dbo.CHIAMATE.CHFLESTE, +[R80_MARROCCO].dbo.CHIAMATE.CHTCHIAM as TCCODICE, [R80_MARROCCO].dbo.CHIAMATE.CHSEREXT, API_IMPIANTI.IMDESCRI, API_IMPIANTI.IMTIPOIM, +API_IMPIANTI.IMMATRIC, API_IMPIANTI.IMNUMIMP, API_IMPIANTI.IMULTAMM, API_IMPIANTI.IMULTDAM, +API_IMPIANTI.IMULTTAM, API_IMPIANTI.IMINDIRI1, API_IMPIANTI.IMINDIRI2, API_IMPIANTI.IMINDIRI3, +API_IMPIANTI.IMINDIRI4, API_IMPIANTI.IMINDIRI5, API_IMPIANTI.IMLOCALI, +API_IMPIANTI.IMCODCAP, API_IMPIANTI.IMCOMUNE, API_IMPIANTI.IMPROVIN, API_IMPIANTI.IMCODNAZ, +API_IMPIANTI.IMUBICAZ, API_IMPIANTI.IMZONMAN, API_IMPIANTI.IMFLPUPR, API_IMPIANTI.IMZONCHI, +API_IMPIANTI.IMZONSUP, API_IMPIANTI.IMDAINMA, API_IMPIANTI.IMDAFIMA, API_IMPIANTI.IMDATCOS, +API_IMPIANTI.IMTELESO, API_IMPIANTI.AN_EMAIL,API_IMPIANTI.IMULTCLI, [R80_MARROCCO].dbo.GITSRCONTI.ANCODICE, +[R80_MARROCCO].dbo.GITSRCONTI.ANTIPCON, [R80_MARROCCO].dbo.GITSRCONTI.ANDESCRI, [R80_MARROCCO].dbo.GITSRCONTI.ANTELEFO, [R80_MARROCCO].dbo.CODSEGN.CSDESCR, [R80_MARROCCO].dbo.CHIAMATE.CHTCHIAM +,'' as IMAZIRIF,dbo.API_IMPIANTI.IMREFREF +,(select top 1 tcdescri from dbo.API_TECNICI where TCCODICE=CHIAMATE.CHTCHIAM) as TCDESCRI +,(select top 1 CTIMPCHI from [R80_MARROCCO].dbo.GITSRMCONMAST where CTCODCLI=ANCODICE and CTFLSTAT='A' order by CTDATREG desc) as chiamata +,(select top 1 CTIMPVIA from [R80_MARROCCO].dbo.GITSRMCONMAST where CTCODCLI=ANCODICE and CTFLSTAT='A' order by CTDATREG desc) as spe_viaggio +,(select top 1 costo_ordinario from API_TECNICI where TCCODICE=CHIAMATE.CHTCHIAM) as costo_ordinario +,(select top 1 costo_notturno from API_TECNICI where TCCODICE=CHIAMATE.CHTCHIAM) as costo_notturno +,(select top 1 costo_straordinario from API_TECNICI where TCCODICE=CHIAMATE.CHTCHIAM) as costo_straordinario +,(select top 1 costo_festivo from API_TECNICI where TCCODICE=CHIAMATE.CHTCHIAM) as costo_festivo +from [R80_MARROCCO].dbo.CHIAMATE +left outer join [R80_MARROCCO].dbo.RAPP_NEW as ic on (ic.SERIALE_CHIAMATA=CHSERIAL and ic.AZIENDA_CHIAMATA=CHCODAZI and ic.CODICE_TECNICO=CHTCHIAM and LTRIM(RTRIM(coalesce(ic.TIPO_RAPPORTINO,'')))='' /*and ic.GENERATO is NULL*/ and (ic.RIFIUTATA='N' )) +left outer join [R80_MARROCCO].dbo.RAPP_NEW as rif on (rif.SERIALE_CHIAMATA=CHSERIAL and rif.AZIENDA_CHIAMATA=CHCODAZI and rif.CODICE_TECNICO=CHTCHIAM and LTRIM(RTRIM(coalesce(rif.TIPO_RAPPORTINO,'')))='' /*and rif.GENERATO is NULL*/ and (rif.RIFIUTATA='S' )) +left outer join [R80_MARROCCO].dbo.RAPP_NEW as chiu on (chiu.SERIALE_CHIAMATA=CHSERIAL and chiu.AZIENDA_CHIAMATA=CHCODAZI and chiu.CODICE_TECNICO=CHTCHIAM and LTRIM(RTRIM(coalesce(chiu.TIPO_RAPPORTINO,'')))='3' /*and chiu.GENERATO is NULL*/ ) +left outer join [R80_MARROCCO].dbo.CODSEGN ON [R80_MARROCCO].dbo.CODSEGN.CSCODICE = [R80_MARROCCO].dbo.CHIAMATE.CHCODSEG AND [R80_MARROCCO].dbo.CODSEGN.CSCODAZI = [R80_MARROCCO].dbo.CHIAMATE.CHCODAZI +LEFT OUTER JOIN [R80_MARROCCO].dbo.GITSRCONTI +INNER JOIN dbo.API_IMPIANTI ON [R80_MARROCCO].dbo.GITSRCONTI.ANCODICE = dbo.API_IMPIANTI.IMULTCLI AND [R80_MARROCCO].dbo.GITSRCONTI.ANTIPCON = 'C' ON [R80_MARROCCO].dbo.CHIAMATE.CHAZIIMP = dbo.API_IMPIANTI.IMCODAZI AND [R80_MARROCCO].dbo.CHIAMATE.CHCODIMP = dbo.API_IMPIANTI.IMCODIMP + +where 1=1 +and [R80_MARROCCO].dbo.CHIAMATE.CHSTATO = 'C' +and [R80_MARROCCO].dbo.CHIAMATE.CHDATA>=DATEADD(month, -3, GETDATE()) +and [R80_MARROCCO].dbo.CHIAMATE.CHDATA<=DATEADD(month, 3, GETDATE()) +and [R80_MARROCCO].dbo.CHIAMATE.CHCODAZI='GITSR' +GO +/****** Object: View [dbo].[API_MANPROG] Script Date: 20/03/2023 10:07:55 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_MANPROG] +AS + +select +[PIMPIANTO] + ,[PICODINT] + ,[PIDATMAN] + ,[SERIALE_RAPPORTINO] + ,[SER_BUONO] + ,[GENERATO] + ,[CODICE_INTERVENTO] + ,[err_title] + ,[err_detail] + ,[err_status_code] + ,[CTCODAZI] + ,[CTCODIMP] + ,[CTCODINT] + ,[CTDESINT] + ,[CTDATPRO] + ,[IMDESCRI] + ,[IMTIPOIM] + ,[IMMATRIC] + ,[IMNUMIMP] + ,[IMULTDAM] + ,[IMULTAMM] + ,[IMINDIRI1] + ,[IMINDIRI2] + ,[IMINDIRI3] + ,[IMINDIRI4] + ,[IMINDIRI5] + ,[IMLOCALI] + ,[IMCODCAP] + ,[IMCOMUNE] + ,[IMPROVIN] + ,[IMCODNAZ] + ,[IMUBICAZ] + ,[IMZONMAN] + ,[IMRIFERI] + ,[IMZONCHI] + ,[IMZONSUP] + ,[TELEFONO1] + ,[TELEFONO2] + ,[CLIENTE] + ,[MPMESGEN] + ,[MPMESFEB] + ,[MPMESMAR] + ,[MPMESAPR] + ,[MPMESMAG] + ,[MPMESLUG] + ,[MPMESGIU] + ,[MPMESAGO] + ,[MPMESSET] + ,[MPMESOTT] + ,[MPMESNOV] + ,[MPMESDIC] + ,[TCDESCRI] + ,[TCCODICE] + ,[IMAZIRIF] + ,IMREFREF + ,[chiamata] + ,[spe_viaggio] + ,[costo_ordinario] + ,[costo_notturno] + ,[costo_straordinario] + ,[costo_festivo] +from [R80_MARROCCO].dbo.API_MANPROG where CTCODAZI='GITSR' +GO +/****** Object: View [dbo].[API_SOSTITUZIONI] Script Date: 20/03/2023 10:56:17 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_SOSTITUZIONI] +AS +SELECT [TSCODAZI],[TSCODTEC],[TSCODZON],[TSDATAIN],[TSDATAFI],[TSCODSOS] + FROM [R80_MARROCCO].[dbo].[TECSOS] + where [TSDATAIN]<=DATEADD(DAY, -1, GETDATE()) + and [TSDATAFI]>=DATEADD(DAY, 1, GETDATE()) + and [TSCODAZI]='GITSR' +GO \ No newline at end of file diff --git a/ApiPolo/SQL/Lifta_1_8.txt b/ApiPolo/SQL/Lifta_1_8.txt new file mode 100644 index 0000000..17e2513 --- /dev/null +++ b/ApiPolo/SQL/Lifta_1_8.txt @@ -0,0 +1,308 @@ +USE [R80_LIFTA] +GO + +/****** Object: View [dbo].[API_CAUS_RAPP] Script Date: 20/03/2023 10:59:22 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_CAUS_RAPP] +AS +select CRCODICE,CRDESCRI,CRRIFATT from [R80_MARROCCO].dbo.LIFTACAUSRAPP +GO +/****** Object: View [dbo].[API_CHIUSURE] Script Date: 20/03/2023 11:00:14 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_CHIUSURE] +AS +SELECT CCCODAZI, CCCODICE, CCDESCR, cpccchk, CCFLFATT, CCFLREP, CCDESSUP, CCTIPCOD, CCGRUPPO, CCIMPINT, CCIMPMAN, CCSERINT, CCSERMAN, CCNUMORE, CCPERMAN, CORECOM, CODTOBSO, + 0 as CCRAPABI, CCRIAPRE, '' as CCCHIINT, 0 as CCRAPOBB +FROM [R80_MARROCCO].dbo.CCHIUSA where COALESCE(CODTOBSO, '') = '' and CCCODAZI='LIFTA' +GO +/****** Object: View [dbo].[API_CLIENTI] Script Date: 20/03/2023 11:01:43 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_CLIENTI] +AS +SELECT ANTIPCON, ANCODICE, AN_EMAIL,ANCODFIS,ANPARIVA,ANINDIRI, ANTELEFO, ANNUMCEL, AN_EMPEC,ANDESCRI,ANNUMLIS +FROM [R80_MARROCCO].dbo.LIFTACONTI +WHERE (ANTIPCON = 'C') +GO +/****** Object: View [dbo].[API_RAPP_NEW] Script Date: 20/03/2023 11:02:19 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_RAPP_NEW] +AS +SELECT SERIALE_RAPPORTINO, TIPO_RAPPORTINO, AZIENDA_IMPIANTO, CODICE_IMPIANTO, AZIENDA_CHIAMATA, SERIALE_CHIAMATA, SERIALE_COMMESSA, DATA_RAPPORTINO, ORA_INI_RAPPORTINO, + MIN_INI_RAPPORTINO, ORA_FIN_RAPPORTINO, MIN_FIN_RAPPORTINO, CODICE_CHIUSURA_1, CODICE_CHIUSURA_2, CODICE_CHIUSURA_3, CODICE_CHIUSURA_4, CODICE_CHIUSURA_5, + CODICE_CHIUSURA_6, CODICE_CHIUSURA_7, CODICE_CHIUSURA_8, CODICE_CHIUSURA_9, CODICE_CHIUSURA_10, DESCRIZIONE_INTERVENTO, STATO_FINALE, GENERATO, AZIENDA_TECNICO, + CODICE_TECNICO, RIFIUTATA, FIRMA, INCARICO, DATA_VALIDITA, IMMAGINE, '' as SER_BUONO,'' as CODICE_INTERVENTO, + DIFETTI_RISCONTRATI, LAVORO_ESEGUITO, ESITO_INTERVENTO,NOTE_ESITO, NOTE_INTERVENTO,NUOVO_CONTRATTO, ORE_LAVORO, CAUSALE, MATERIALE, DIRITTO_CHIAMATA, MANODOPERA, SPESE_VIAGGIO, + PAGAMENTO, ANTICIPO, TOTALE, NOTE_PAGAMENTO, TIPO_INTERVENTO, RAFOTO1, RAFOTO2, RAFOTO3, RAFOTO4, RAFOTO5, RAFOTO6, RAFOTO7, RAFOTO8, RAFOTO9, RAFOTO10 +FROM [R80_MARROCCO].dbo.RAPP_NEW where AZIENDA_IMPIANTO='LIFTA' +GO +/****** Object: View [dbo].[API_STO_RAPP] Script Date: 20/03/2023 11:03:30 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + + +ALTER VIEW [dbo].[API_STO_RAPP] +AS + +select +PICODINT as codice_intervento, +PIDATMAN as data_manutenzione +,CODINTE.CIDESCRI,CIDESSUP, +TCCODICE,TCDESCRI,/*RAPPMAST.NOTE_ESITO,*/'' as NOTE_ESITO,DATA_RAPPORTINO +, STATO_FINALE,/*RAPPMAST.ESITO_INTERVENTO,*/'' as ESITO_INTERVENTO,DESCRIZIONE_INTERVENTO,FIRMA +,SERIALE_CHIAMATA,TIPO_RAPPORTINO,CHCODSEG as codice_segnalazione,SER_BUONO,DIFETTI_RISCONTRATI,LAVORO_ESEGUITO,NOTE_INTERVENTO +,ORE_LAVORO,MATERIALE,DIRITTO_CHIAMATA,ANTICIPO, MANODOPERA, SPESE_VIAGGIO,pagamento,CODICE_IMPIANTO, +TOTALE,NOTE_PAGAMENTO,TIPO_INTERVENTO,GENERATO,AZIENDA_TECNICO,AZIENDA_IMPIANTO,AZIENDA_CHIAMATA + +,CODICE_CHIUSURA_1,CODICE_CHIUSURA_2,CODICE_CHIUSURA_3,CODICE_CHIUSURA_4,CODICE_CHIUSURA_5, +CODICE_CHIUSURA_6,CODICE_CHIUSURA_7,CODICE_CHIUSURA_8,CODICE_CHIUSURA_9,CODICE_CHIUSURA_10 +,SERIALE_RAPPORTINO + +,DATA_EFFETTIVA +,IMINDIRI1 as indirizzo_tipo ,IMINDIRI2 as indirizzo,IMINDIRI3 as indirizzo_num ,IMINDIRI4 as indirizzo_num2,IMINDIRI5 as indirizzo_scala +,(select CCDESCR from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_1) as cc1 +,(select CCDESCR from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_2) as cc2 +,(select CCDESCR from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_3) as cc3 +,(select CCDESCR from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_4) as cc4 +,(select CCDESCR from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_5) as cc5 +,(select CCDESCR from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_6) as cc6 +,(select CCDESCR from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_7) as cc7 +,(select CCDESCR from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_8) as cc8 +,(select CCDESCR from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_9) as cc9 +,(select CCDESCR from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_10) as cc10 + +,(select CCDESSUP from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_1) as ccds1 +,(select CCDESSUP from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_2) as ccds2 +,(select CCDESSUP from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_3) as ccds3 +,(select CCDESSUP from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_4) as ccds4 +,(select CCDESSUP from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_5) as ccds5 +,(select CCDESSUP from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_6) as ccds6 +,(select CCDESSUP from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_7) as ccds7 +,(select CCDESSUP from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_8) as ccds8 +,(select CCDESSUP from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_9) as ccds9 +,(select CCDESSUP from [R80_MARROCCO].dbo.CCHIUSA where CCCODAZI='LIFTA' and CCCODICE=CODICE_CHIUSURA_10) as ccds10 + +from [R80_MARROCCO].dbo.LIFTARAPPMAST RAPPMAST left outer join [R80_MARROCCO].dbo.RAPP_NEW on RASERIAL=SERIALE_RAPPORTINO +left outer join [R80_MARROCCO].dbo.TECNICI on RACODTE1=TCCODICE and TCCODAZI='LIFTA' +left outer join [R80_MARROCCO].dbo.CHIAMATE on CHCODAZI='LIFTA' and CHSERIAL=SERIALE_CHIAMATA and TIPO_RAPPORTINO='3' +left outer join [R80_MARROCCO].dbo.PIPRESA on PIMPIANTO=CODICE_IMPIANTO and PICODINT=CODICE_INTERVENTO and PICODAZI='LIFTA' and PIDATMAN=DATA_EFFETTIVA +LEFT OUTER JOIN [R80_MARROCCO].dbo.CODINTE ON PICODINT = [R80_MARROCCO].dbo.CODINTE.CICODICE +LEFT OUTER JOIN [R80_MARROCCO].dbo.MIMPIANTI ON AZIENDA_IMPIANTO = [R80_MARROCCO].dbo.MIMPIANTI.IMCODAZI AND CODICE_IMPIANTO = [R80_MARROCCO].dbo.MIMPIANTI.IMCODIMP +where SERIALE_RAPPORTINO is not null +and DATA_RAPPORTINO>=DATEADD(month, -2, GETDATE()) +GO +/****** Object: View [dbo].[API_IMPIANTI] Script Date: 20/03/2023 11:06:39 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_IMPIANTI] +AS +SELECT +[R80_MARROCCO].dbo.MIMPIANTI.IMCODAZI, [R80_MARROCCO].dbo.MIMPIANTI.IMCODIMP, [R80_MARROCCO].dbo.MIMPIANTI.IMDESCRI, [R80_MARROCCO].dbo.MIMPIANTI.IMTIPOIM, +[R80_MARROCCO].dbo.MIMPIANTI.IMMATRIC, [R80_MARROCCO].dbo.MIMPIANTI.IMNUMIMP, [R80_MARROCCO].dbo.MIMPIANTI.IMULTCLI, +[R80_MARROCCO].dbo.MIMPIANTI.IMULTDCL, [R80_MARROCCO].dbo.MIMPIANTI.IMULTAMM, [R80_MARROCCO].dbo.MIMPIANTI.IMULTDAM, [R80_MARROCCO].dbo.MIMPIANTI.IMULTTAM, +[R80_MARROCCO].dbo.MIMPIANTI.IMINDIRI1, [R80_MARROCCO].dbo.MIMPIANTI.IMINDIRI2, [R80_MARROCCO].dbo.MIMPIANTI.IMINDIRI3, +[R80_MARROCCO].dbo.MIMPIANTI.IMINDIRI4, [R80_MARROCCO].dbo.MIMPIANTI.IMINDIRI5, [R80_MARROCCO].dbo.MIMPIANTI.IMLOCALI, [R80_MARROCCO].dbo.MIMPIANTI.IMCODCAP, +[R80_MARROCCO].dbo.MIMPIANTI.IMCOMUNE, [R80_MARROCCO].dbo.MIMPIANTI.IMPROVIN, [R80_MARROCCO].dbo.MIMPIANTI.IMCODNAZ, +[R80_MARROCCO].dbo.MIMPIANTI.IMUBICAZ, [R80_MARROCCO].dbo.MIMPIANTI.IMZONMAN, [R80_MARROCCO].dbo.MIMPIANTI.IMFLPUPR, [R80_MARROCCO].dbo.MIMPIANTI.UTDC, +[R80_MARROCCO].dbo.MIMPIANTI.UTDV, [R80_MARROCCO].dbo.MIMPIANTI.IMPIAMAN, [R80_MARROCCO].dbo.MIMPIANTI.IMDATATT, [R80_MARROCCO].dbo.MIMPIANTI.IMZONCHI, +[R80_MARROCCO].dbo.MIMPIANTI.IMZONSUP, [R80_MARROCCO].dbo.MIMPIANTI.IMDAINMA, [R80_MARROCCO].dbo.MIMPIANTI.IMDAFIMA, +[R80_MARROCCO].dbo.MIMPIANTI.IMDATCOS, [R80_MARROCCO].dbo.MIMPIANTI.IMTELESO, [R80_MARROCCO].dbo.API_CLIENTI.AN_EMAIL,'' as IMAZIRIF +,[R80_MARROCCO].dbo.MIMPIANTI.IMREFREF +FROM +[R80_MARROCCO].dbo.MIMPIANTI INNER JOIN +[R80_MARROCCO].dbo.API_CLIENTI ON [R80_MARROCCO].dbo.MIMPIANTI.IMULTCLI = [R80_MARROCCO].dbo.API_CLIENTI.ANCODICE +where [R80_MARROCCO].dbo.MIMPIANTI.IMCODAZI='LIFTA' +GO +/****** Object: View [dbo].[API_TECNICI] Script Date: 20/03/2023 11:07:26 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_TECNICI] +AS +SELECT +[R80_MARROCCO].dbo.TECNICI.TCCODICE, [R80_MARROCCO].dbo.TECNICI.TCDESCRI, [R80_MARROCCO].dbo.TECNICI.TCTELEF1, [R80_MARROCCO].dbo.TECNICI.TCCHIAM, [R80_MARROCCO].dbo.TECNICI.TCMANUT, +[R80_MARROCCO].dbo.TECNICI.TCCODAZI, [R80_MARROCCO].dbo.TECNICI.TCSUPER, [R80_MARROCCO].dbo.TECNICI.TCUSER, [R80_MARROCCO].dbo.TECNICI.TCPWD, +[R80_MARROCCO].dbo.TECDISP.TDCODZON, [R80_MARROCCO].dbo.TECDISP.TDDATAIN, [R80_MARROCCO].dbo.TECDISP.TDDATAFI,TCCOOR as costo_ordinario,TCCONO as costo_notturno, +TCCOST as costo_straordinario,TCCOFE as costo_festivo +FROM +[R80_MARROCCO].dbo.TECNICI INNER JOIN +[R80_MARROCCO].dbo.TECDISP ON [R80_MARROCCO].dbo.TECNICI.TCCODICE = [R80_MARROCCO].dbo.TECDISP.TDCODTEC AND [R80_MARROCCO].dbo.TECNICI.TCCODAZI = [R80_MARROCCO].dbo.TECDISP.TDCODAZI +GO +/****** Object: View [dbo].[API_CHIAMATE] Script Date: 20/03/2023 11:11:13 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_CHIAMATE] +AS +select +ic.SERIALE_RAPPORTINO as ser_rapp_ic,ic.TIPO_RAPPORTINO as tipo_rapp_ic,/*pc.GENERATO,pc.RIFIUTATA,*/ic.INCARICO as ic, +rif.SERIALE_RAPPORTINO as ser_rapp_rif,rif.TIPO_RAPPORTINO as tipo_rapp_rif,/*rif.GENERATO,*/rif.RIFIUTATA as rif,/*rif.INCARICO,*/ +chiu.SERIALE_RAPPORTINO as ser_rapp_chiu,chiu.TIPO_RAPPORTINO as tipo_rapp_chiu,chiu.SER_BUONO as ser_buono_chiu, +'' as err_title,''as err_detail,'' as err_status_code, +[R80_MARROCCO].dbo.CHIAMATE.CHCODAZI, [R80_MARROCCO].dbo.CHIAMATE.CHSERIAL, [R80_MARROCCO].dbo.CHIAMATE.CHCODESE, [R80_MARROCCO].dbo.CHIAMATE.CHTIPO, +[R80_MARROCCO].dbo.CHIAMATE.CHNUMERO, [R80_MARROCCO].dbo.CHIAMATE.CHDATA, [R80_MARROCCO].dbo.CHIAMATE.CHORA, [R80_MARROCCO].dbo.CHIAMATE.CHMIN, +[R80_MARROCCO].dbo.CHIAMATE.CHOPASS, [R80_MARROCCO].dbo.CHIAMATE.CHOPCHI, [R80_MARROCCO].dbo.CHIAMATE.CHCODIMP, [R80_MARROCCO].dbo.CHIAMATE.CHAZIIMP, +[R80_MARROCCO].dbo.CHIAMATE.CHSTATO, [R80_MARROCCO].dbo.CHIAMATE.CHDTAPP, [R80_MARROCCO].dbo.CHIAMATE.CHORAAPI, [R80_MARROCCO].dbo.CHIAMATE.CHMINAPI, +[R80_MARROCCO].dbo.CHIAMATE.CHORAAPF, [R80_MARROCCO].dbo.CHIAMATE.CHMINAPF, [R80_MARROCCO].dbo.CHIAMATE.CHRIFER, [R80_MARROCCO].dbo.CHIAMATE.CHTELEF, +[R80_MARROCCO].dbo.CHIAMATE.CHCODSEG, [R80_MARROCCO].dbo.CHIAMATE.CHSTOPI, [R80_MARROCCO].dbo.CHIAMATE.CHNOTE, [R80_MARROCCO].dbo.CHIAMATE.CHDTASS, +[R80_MARROCCO].dbo.CHIAMATE.CHORASS, [R80_MARROCCO].dbo.CHIAMATE.CHMINASS, [R80_MARROCCO].dbo.CHIAMATE.CHDTCHI, [R80_MARROCCO].dbo.CHIAMATE.CHORACHI, +[R80_MARROCCO].dbo.CHIAMATE.CHMINCHI, [R80_MARROCCO].dbo.CHIAMATE.CHDTLIN, [R80_MARROCCO].dbo.CHIAMATE.CHORALI, [R80_MARROCCO].dbo.CHIAMATE.CHMINLI, +[R80_MARROCCO].dbo.CHIAMATE.CHDTLFI, [R80_MARROCCO].dbo.CHIAMATE.CHORALF, [R80_MARROCCO].dbo.CHIAMATE.CHMINLF, [R80_MARROCCO].dbo.CHIAMATE.cpccchk, +[R80_MARROCCO].dbo.CHIAMATE.CHNRAP1, [R80_MARROCCO].dbo.CHIAMATE.CHSRAP1, [R80_MARROCCO].dbo.CHIAMATE.CHNRAP2, [R80_MARROCCO].dbo.CHIAMATE.CHSRAP2, +[R80_MARROCCO].dbo.CHIAMATE.CHMODRAC, [R80_MARROCCO].dbo.CHIAMATE.CHPRGANN, [R80_MARROCCO].dbo.CHIAMATE.UTCC, [R80_MARROCCO].dbo.CHIAMATE.UTCV, +[R80_MARROCCO].dbo.CHIAMATE.CHIMPMAN, [R80_MARROCCO].dbo.CHIAMATE.CHPERMAN, [R80_MARROCCO].dbo.CHIAMATE.CHFLSTIM, [R80_MARROCCO].dbo.CHIAMATE.CHFLESTE, +[R80_MARROCCO].dbo.CHIAMATE.CHTCHIAM as TCCODICE, [R80_MARROCCO].dbo.CHIAMATE.CHSEREXT, API_IMPIANTI.IMDESCRI, API_IMPIANTI.IMTIPOIM, +API_IMPIANTI.IMMATRIC, API_IMPIANTI.IMNUMIMP, API_IMPIANTI.IMULTAMM, API_IMPIANTI.IMULTDAM, +API_IMPIANTI.IMULTTAM, API_IMPIANTI.IMINDIRI1, API_IMPIANTI.IMINDIRI2, API_IMPIANTI.IMINDIRI3, +API_IMPIANTI.IMINDIRI4, API_IMPIANTI.IMINDIRI5, API_IMPIANTI.IMLOCALI, +API_IMPIANTI.IMCODCAP, API_IMPIANTI.IMCOMUNE, API_IMPIANTI.IMPROVIN, API_IMPIANTI.IMCODNAZ, +API_IMPIANTI.IMUBICAZ, API_IMPIANTI.IMZONMAN, API_IMPIANTI.IMFLPUPR, API_IMPIANTI.IMZONCHI, +API_IMPIANTI.IMZONSUP, API_IMPIANTI.IMDAINMA, API_IMPIANTI.IMDAFIMA, API_IMPIANTI.IMDATCOS, +API_IMPIANTI.IMTELESO, API_IMPIANTI.AN_EMAIL,API_IMPIANTI.IMULTCLI, [R80_MARROCCO].dbo.LIFTACONTI.ANCODICE, +[R80_MARROCCO].dbo.LIFTACONTI.ANTIPCON, [R80_MARROCCO].dbo.LIFTACONTI.ANDESCRI, [R80_MARROCCO].dbo.LIFTACONTI.ANTELEFO, [R80_MARROCCO].dbo.CODSEGN.CSDESCR, [R80_MARROCCO].dbo.CHIAMATE.CHTCHIAM +,'' as IMAZIRIF,API_IMPIANTI.IMREFREF +,(select top 1 tcdescri from dbo.API_TECNICI where TCCODICE=CHIAMATE.CHTCHIAM) as TCDESCRI +,(select top 1 CTIMPCHI from [R80_MARROCCO].dbo.LIFTAMCONMAST where CTCODCLI=ANCODICE and CTFLSTAT='A' order by CTDATREG desc) as chiamata +,(select top 1 CTIMPVIA from [R80_MARROCCO].dbo.LIFTAMCONMAST where CTCODCLI=ANCODICE and CTFLSTAT='A' order by CTDATREG desc) as spe_viaggio +,(select top 1 costo_ordinario from API_TECNICI where TCCODICE=CHIAMATE.CHTCHIAM) as costo_ordinario +,(select top 1 costo_notturno from API_TECNICI where TCCODICE=CHIAMATE.CHTCHIAM) as costo_notturno +,(select top 1 costo_straordinario from API_TECNICI where TCCODICE=CHIAMATE.CHTCHIAM) as costo_straordinario +,(select top 1 costo_festivo from API_TECNICI where TCCODICE=CHIAMATE.CHTCHIAM) as costo_festivo +from [R80_MARROCCO].dbo.CHIAMATE +left outer join [R80_MARROCCO].dbo.RAPP_NEW as ic on (ic.SERIALE_CHIAMATA=CHSERIAL and ic.AZIENDA_CHIAMATA=CHCODAZI and ic.CODICE_TECNICO=CHTCHIAM and LTRIM(RTRIM(coalesce(ic.TIPO_RAPPORTINO,'')))='' /*and ic.GENERATO is NULL*/ and (ic.RIFIUTATA='N' )) +left outer join [R80_MARROCCO].dbo.RAPP_NEW as rif on (rif.SERIALE_CHIAMATA=CHSERIAL and rif.AZIENDA_CHIAMATA=CHCODAZI and rif.CODICE_TECNICO=CHTCHIAM and LTRIM(RTRIM(coalesce(rif.TIPO_RAPPORTINO,'')))='' /*and rif.GENERATO is NULL*/ and (rif.RIFIUTATA='S' )) +left outer join [R80_MARROCCO].dbo.RAPP_NEW as chiu on (chiu.SERIALE_CHIAMATA=CHSERIAL and chiu.AZIENDA_CHIAMATA=CHCODAZI and chiu.CODICE_TECNICO=CHTCHIAM and LTRIM(RTRIM(coalesce(chiu.TIPO_RAPPORTINO,'')))='3' /*and chiu.GENERATO is NULL*/ ) +left outer join [R80_MARROCCO].dbo.CODSEGN ON [R80_MARROCCO].dbo.CODSEGN.CSCODICE = [R80_MARROCCO].dbo.CHIAMATE.CHCODSEG AND [R80_MARROCCO].dbo.CODSEGN.CSCODAZI = [R80_MARROCCO].dbo.CHIAMATE.CHCODAZI +LEFT OUTER JOIN [R80_MARROCCO].dbo.LIFTACONTI +INNER JOIN dbo.API_IMPIANTI ON [R80_MARROCCO].dbo.LIFTACONTI.ANCODICE = dbo.API_IMPIANTI.IMULTCLI AND [R80_MARROCCO].dbo.LIFTACONTI.ANTIPCON = 'C' ON [R80_MARROCCO].dbo.CHIAMATE.CHAZIIMP = dbo.API_IMPIANTI.IMCODAZI AND [R80_MARROCCO].dbo.CHIAMATE.CHCODIMP = dbo.API_IMPIANTI.IMCODIMP + +where 1=1 +and [R80_MARROCCO].dbo.CHIAMATE.CHSTATO = 'C' +and [R80_MARROCCO].dbo.CHIAMATE.CHDATA>=DATEADD(month, -3, GETDATE()) +and [R80_MARROCCO].dbo.CHIAMATE.CHDATA<=DATEADD(month, 3, GETDATE()) +and [R80_MARROCCO].dbo.CHIAMATE.CHCODAZI='LIFTA' + +GO +/****** Object: View [dbo].[API_MANPROG] Script Date: 20/03/2023 11:19:13 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_MANPROG] +AS + +select + + [PIMPIANTO] + ,[PICODINT] + ,[PIDATMAN] + ,[SERIALE_RAPPORTINO] + ,[SER_BUONO] + ,[GENERATO] + ,[CODICE_INTERVENTO] + ,[err_title] + ,[err_detail] + ,[err_status_code] + ,[CTCODAZI] + ,[CTCODIMP] + ,[CTCODINT] + ,[CTDESINT] + ,[CTDATPRO] + ,[IMDESCRI] + ,[IMTIPOIM] + ,[IMMATRIC] + ,[IMNUMIMP] + ,[IMULTDAM] + ,[IMULTAMM] + ,[IMINDIRI1] + ,[IMINDIRI2] + ,[IMINDIRI3] + ,[IMINDIRI4] + ,[IMINDIRI5] + ,[IMLOCALI] + ,[IMCODCAP] + ,[IMCOMUNE] + ,[IMPROVIN] + ,[IMCODNAZ] + ,[IMUBICAZ] + ,[IMZONMAN] + ,[IMRIFERI] + ,[IMZONCHI] + ,[IMZONSUP] + ,[TELEFONO1] + ,[TELEFONO2] + ,[CLIENTE] + ,[MPMESGEN] + ,[MPMESFEB] + ,[MPMESMAR] + ,[MPMESAPR] + ,[MPMESMAG] + ,[MPMESLUG] + ,[MPMESGIU] + ,[MPMESAGO] + ,[MPMESSET] + ,[MPMESOTT] + ,[MPMESNOV] + ,[MPMESDIC] + ,[TCDESCRI] + ,[TCCODICE] + ,[IMAZIRIF] + ,IMREFREF + ,[chiamata] + ,[spe_viaggio] + ,[costo_ordinario] + ,[costo_notturno] + ,[costo_straordinario] + ,[costo_festivo] +from [R80_MARROCCO].dbo.API_MANPROG where CTCODAZI='LIFTA' + +GO +/****** Object: View [dbo].[API_SOSTITUZIONI] Script Date: 20/03/2023 10:56:17 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_SOSTITUZIONI] +AS +SELECT [TSCODAZI],[TSCODTEC],[TSCODZON],[TSDATAIN],[TSDATAFI],[TSCODSOS] + FROM [R80_MARROCCO].[dbo].[TECSOS] + where [TSDATAIN]<=DATEADD(DAY, -1, GETDATE()) + and [TSDATAFI]>=DATEADD(DAY, 1, GETDATE()) + and [TSCODAZI]='LIFTA' +GO \ No newline at end of file diff --git a/ApiPolo/SQL/Marrocco_1_8.txt b/ApiPolo/SQL/Marrocco_1_8.txt new file mode 100644 index 0000000..34898f6 --- /dev/null +++ b/ApiPolo/SQL/Marrocco_1_8.txt @@ -0,0 +1,323 @@ +USE [R80_MARROCCO] +GO + +/****** Object: View [dbo].[API_CAUS_RAPP] Script Date: 20/03/2023 08:50:56 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_CAUS_RAPP] +AS +select CRCODICE,CRDESCRI,CRRIFATT from MARROCAUSRAPP +GO +/****** Object: View [dbo].[API_CHIUSURE] Script Date: 20/03/2023 08:51:12 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_CHIUSURE] +AS +SELECT CCCODAZI, CCCODICE, CCDESCR, cpccchk, CCFLFATT, CCFLREP, CCDESSUP, CCTIPCOD, CCGRUPPO, CCIMPINT, CCIMPMAN, CCSERINT, CCSERMAN, CCNUMORE, CCPERMAN, CORECOM, CODTOBSO, + 0 as CCRAPABI, CCRIAPRE, '' as CCCHIINT, 0 as CCRAPOBB +FROM dbo.CCHIUSA where COALESCE(CODTOBSO, '') = '' +GO +/****** Object: View [dbo].[API_CLIENTI] Script Date: 20/03/2023 08:52:25 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_CLIENTI] +AS +SELECT ANTIPCON, ANCODICE, AN_EMAIL,ANCODFIS,ANPARIVA,ANINDIRI, ANTELEFO, ANNUMCEL, AN_EMPEC,ANDESCRI,ANNUMLIS +FROM dbo.MARROCONTI +WHERE (ANTIPCON = 'C') +GO +/****** Object: View [dbo].[API_PAGAMENTI] Script Date: 20/03/2023 08:53:07 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_PAGAMENTI] +AS +select PACODICE,PADESCRI from MARROPAG_AMEN +GO +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +/****** Object: View [dbo].[API_RAPP_NEW] Script Date: 20/03/2023 08:53:42 ******/ +ALTER VIEW [dbo].[API_RAPP_NEW] +AS +SELECT SERIALE_RAPPORTINO, TIPO_RAPPORTINO, AZIENDA_IMPIANTO, CODICE_IMPIANTO, AZIENDA_CHIAMATA, SERIALE_CHIAMATA, SERIALE_COMMESSA, DATA_RAPPORTINO, ORA_INI_RAPPORTINO, + MIN_INI_RAPPORTINO, ORA_FIN_RAPPORTINO, MIN_FIN_RAPPORTINO, CODICE_CHIUSURA_1, CODICE_CHIUSURA_2, CODICE_CHIUSURA_3, CODICE_CHIUSURA_4, CODICE_CHIUSURA_5, + CODICE_CHIUSURA_6, CODICE_CHIUSURA_7, CODICE_CHIUSURA_8, CODICE_CHIUSURA_9, CODICE_CHIUSURA_10, DESCRIZIONE_INTERVENTO, STATO_FINALE, GENERATO, AZIENDA_TECNICO, + CODICE_TECNICO, RIFIUTATA, FIRMA, INCARICO, DATA_VALIDITA, IMMAGINE, '' as SER_BUONO,'' as CODICE_INTERVENTO, + DIFETTI_RISCONTRATI, LAVORO_ESEGUITO, ESITO_INTERVENTO,NOTE_ESITO, NOTE_INTERVENTO,NUOVO_CONTRATTO, ORE_LAVORO, CAUSALE, MATERIALE, DIRITTO_CHIAMATA, MANODOPERA, SPESE_VIAGGIO, + PAGAMENTO, ANTICIPO, TOTALE, NOTE_PAGAMENTO, TIPO_INTERVENTO, RAFOTO1, RAFOTO2, RAFOTO3, RAFOTO4, RAFOTO5, RAFOTO6, RAFOTO7, RAFOTO8, RAFOTO9, RAFOTO10 +FROM dbo.RAPP_NEW +GO +/****** Object: View [dbo].[API_STO_RAPP] Script Date: 20/03/2023 08:54:55 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_STO_RAPP] +AS +select + +PICODINT as codice_intervento, +PIDATMAN as data_manutenzione +,CODINTE.CIDESCRI,CIDESSUP, +TCCODICE,TCDESCRI,/*RAPPMAST.NOTE_ESITO,*/'' as NOTE_ESITO,DATA_RAPPORTINO +, STATO_FINALE,/*RAPPMAST.ESITO_INTERVENTO,*/'' as ESITO_INTERVENTO,DESCRIZIONE_INTERVENTO,FIRMA +,SERIALE_CHIAMATA,TIPO_RAPPORTINO,CHCODSEG as codice_segnalazione,SER_BUONO,DIFETTI_RISCONTRATI,LAVORO_ESEGUITO,NOTE_INTERVENTO +,ORE_LAVORO,MATERIALE,DIRITTO_CHIAMATA,ANTICIPO, MANODOPERA, SPESE_VIAGGIO,pagamento,CODICE_IMPIANTO, +TOTALE,NOTE_PAGAMENTO,TIPO_INTERVENTO,GENERATO,AZIENDA_TECNICO,AZIENDA_IMPIANTO,AZIENDA_CHIAMATA + +,CODICE_CHIUSURA_1,CODICE_CHIUSURA_2,CODICE_CHIUSURA_3,CODICE_CHIUSURA_4,CODICE_CHIUSURA_5, +CODICE_CHIUSURA_6,CODICE_CHIUSURA_7,CODICE_CHIUSURA_8,CODICE_CHIUSURA_9,CODICE_CHIUSURA_10 +,SERIALE_RAPPORTINO + +,DATA_EFFETTIVA +,IMINDIRI1 as indirizzo_tipo ,IMINDIRI2 as indirizzo,IMINDIRI3 as indirizzo_num ,IMINDIRI4 as indirizzo_num2,IMINDIRI5 as indirizzo_scala +,(select CCDESCR from CCHIUSA where CCCODAZI='MARRO' and CCCODICE=CODICE_CHIUSURA_1) as cc1 +,(select CCDESCR from CCHIUSA where CCCODAZI='MARRO' and CCCODICE=CODICE_CHIUSURA_2) as cc2 +,(select CCDESCR from CCHIUSA where CCCODAZI='MARRO' and CCCODICE=CODICE_CHIUSURA_3) as cc3 +,(select CCDESCR from CCHIUSA where CCCODAZI='MARRO' and CCCODICE=CODICE_CHIUSURA_4) as cc4 +,(select CCDESCR from CCHIUSA where CCCODAZI='MARRO' and CCCODICE=CODICE_CHIUSURA_5) as cc5 +,(select CCDESCR from CCHIUSA where CCCODAZI='MARRO' and CCCODICE=CODICE_CHIUSURA_6) as cc6 +,(select CCDESCR from CCHIUSA where CCCODAZI='MARRO' and CCCODICE=CODICE_CHIUSURA_7) as cc7 +,(select CCDESCR from CCHIUSA where CCCODAZI='MARRO' and CCCODICE=CODICE_CHIUSURA_8) as cc8 +,(select CCDESCR from CCHIUSA where CCCODAZI='MARRO' and CCCODICE=CODICE_CHIUSURA_9) as cc9 +,(select CCDESCR from CCHIUSA where CCCODAZI='MARRO' and CCCODICE=CODICE_CHIUSURA_10) as cc10 + +,(select CCDESSUP from CCHIUSA where CCCODAZI='MARRO' and CCCODICE=CODICE_CHIUSURA_1) as ccds1 +,(select CCDESSUP from CCHIUSA where CCCODAZI='MARRO' and CCCODICE=CODICE_CHIUSURA_2) as ccds2 +,(select CCDESSUP from CCHIUSA where CCCODAZI='MARRO' and CCCODICE=CODICE_CHIUSURA_3) as ccds3 +,(select CCDESSUP from CCHIUSA where CCCODAZI='MARRO' and CCCODICE=CODICE_CHIUSURA_4) as ccds4 +,(select CCDESSUP from CCHIUSA where CCCODAZI='MARRO' and CCCODICE=CODICE_CHIUSURA_5) as ccds5 +,(select CCDESSUP from CCHIUSA where CCCODAZI='MARRO' and CCCODICE=CODICE_CHIUSURA_6) as ccds6 +,(select CCDESSUP from CCHIUSA where CCCODAZI='MARRO' and CCCODICE=CODICE_CHIUSURA_7) as ccds7 +,(select CCDESSUP from CCHIUSA where CCCODAZI='MARRO' and CCCODICE=CODICE_CHIUSURA_8) as ccds8 +,(select CCDESSUP from CCHIUSA where CCCODAZI='MARRO' and CCCODICE=CODICE_CHIUSURA_9) as ccds9 +,(select CCDESSUP from CCHIUSA where CCCODAZI='MARRO' and CCCODICE=CODICE_CHIUSURA_10) as ccds10 + +from MARRORAPPMAST RAPPMAST left outer join RAPP_NEW on RASERIAL=SERIALE_RAPPORTINO +left outer join TECNICI on RACODTE1=TCCODICE and TCCODAZI='MARRO' +left outer join CHIAMATE on CHCODAZI='MARRO' and CHSERIAL=SERIALE_CHIAMATA and TIPO_RAPPORTINO='3' +--left outer join MANPROG on MPCODAZI='MARRO'and MPCODIMP=CODICE_IMPIANTO and MPDATSTO=DATA_VALIDITA /*and MPDATSTO=DATA_EFFETTIVA*/ and TIPO_RAPPORTINO='2' and MPCODINT=CODICE_INTERVENTO +left outer join PIPRESA on PIMPIANTO=CODICE_IMPIANTO and PICODINT=CODICE_INTERVENTO and PICODAZI='MARRO' and PIDATMAN=DATA_EFFETTIVA +LEFT OUTER JOIN CODINTE ON PICODINT = dbo.CODINTE.CICODICE +LEFT OUTER JOIN dbo.MIMPIANTI ON AZIENDA_IMPIANTO = dbo.MIMPIANTI.IMCODAZI AND CODICE_IMPIANTO = dbo.MIMPIANTI.IMCODIMP +where SERIALE_RAPPORTINO is not null +and DATA_RAPPORTINO>=DATEADD(month, -2, GETDATE()) + +GO +/****** Object: View [dbo].[API_IMPIANTI] Script Date: 20/03/2023 08:56:34 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_IMPIANTI] +AS +SELECT dbo.MIMPIANTI.IMCODAZI, dbo.MIMPIANTI.IMCODIMP, dbo.MIMPIANTI.IMDESCRI, dbo.MIMPIANTI.IMTIPOIM, dbo.MIMPIANTI.IMMATRIC, dbo.MIMPIANTI.IMNUMIMP, dbo.MIMPIANTI.IMULTCLI, + dbo.MIMPIANTI.IMULTDCL, dbo.MIMPIANTI.IMULTAMM, dbo.MIMPIANTI.IMULTDAM, dbo.MIMPIANTI.IMULTTAM, dbo.MIMPIANTI.IMINDIRI1, dbo.MIMPIANTI.IMINDIRI2, dbo.MIMPIANTI.IMINDIRI3, + dbo.MIMPIANTI.IMINDIRI4, dbo.MIMPIANTI.IMINDIRI5, dbo.MIMPIANTI.IMLOCALI, dbo.MIMPIANTI.IMCODCAP, dbo.MIMPIANTI.IMCOMUNE, dbo.MIMPIANTI.IMPROVIN, dbo.MIMPIANTI.IMCODNAZ, + dbo.MIMPIANTI.IMUBICAZ, dbo.MIMPIANTI.IMZONMAN, dbo.MIMPIANTI.IMFLPUPR, dbo.MIMPIANTI.UTDC, dbo.MIMPIANTI.UTDV, dbo.MIMPIANTI.IMPIAMAN, dbo.MIMPIANTI.IMDATATT, dbo.MIMPIANTI.IMZONCHI, + dbo.MIMPIANTI.IMZONSUP, dbo.MIMPIANTI.IMDAINMA, dbo.MIMPIANTI.IMDAFIMA, dbo.MIMPIANTI.IMDATCOS, dbo.MIMPIANTI.IMTELESO, + dbo.API_CLIENTI.AN_EMAIL,dbo.MIMPIANTI.IMREFREF +FROM dbo.MIMPIANTI INNER JOIN + dbo.API_CLIENTI ON dbo.MIMPIANTI.IMULTCLI = dbo.API_CLIENTI.ANCODICE +GO +/****** Object: View [dbo].[API_TECNICI] Script Date: 20/03/2023 08:57:38 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_TECNICI] +AS +SELECT dbo.TECNICI.TCCODICE, dbo.TECNICI.TCDESCRI, dbo.TECNICI.TCTELEF1, dbo.TECNICI.TCCHIAM, dbo.TECNICI.TCMANUT, dbo.TECNICI.TCCODAZI, dbo.TECNICI.TCSUPER, dbo.TECNICI.TCUSER, dbo.TECNICI.TCPWD, + dbo.TECDISP.TDCODZON, dbo.TECDISP.TDDATAIN, dbo.TECDISP.TDDATAFI,TCCOOR as costo_ordinario,TCCONO as costo_notturno,TCCOST as costo_straordinario,TCCOFE as costo_festivo +FROM dbo.TECNICI INNER JOIN + dbo.TECDISP ON dbo.TECNICI.TCCODICE = dbo.TECDISP.TDCODTEC AND dbo.TECNICI.TCCODAZI = dbo.TECDISP.TDCODAZI +GO +/****** Object: View [dbo].[API_CHIAMATE] Script Date: 20/03/2023 08:58:18 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_CHIAMATE] +AS +select +ic.SERIALE_RAPPORTINO as ser_rapp_ic,ic.TIPO_RAPPORTINO as tipo_rapp_ic,/*pc.GENERATO,pc.RIFIUTATA,*/ic.INCARICO as ic, +rif.SERIALE_RAPPORTINO as ser_rapp_rif,rif.TIPO_RAPPORTINO as tipo_rapp_rif,/*rif.GENERATO,*/rif.RIFIUTATA as rif,/*rif.INCARICO,*/ +chiu.SERIALE_RAPPORTINO as ser_rapp_chiu,chiu.TIPO_RAPPORTINO as tipo_rapp_chiu,chiu.SER_BUONO as ser_buono_chiu, +'' as err_title,''as err_detail,'' as err_status_code, +dbo.CHIAMATE.CHCODAZI, dbo.CHIAMATE.CHSERIAL, dbo.CHIAMATE.CHCODESE, dbo.CHIAMATE.CHTIPO, dbo.CHIAMATE.CHNUMERO, dbo.CHIAMATE.CHDATA, dbo.CHIAMATE.CHORA, dbo.CHIAMATE.CHMIN, +dbo.CHIAMATE.CHOPASS, dbo.CHIAMATE.CHOPCHI, dbo.CHIAMATE.CHCODIMP, dbo.CHIAMATE.CHAZIIMP, dbo.CHIAMATE.CHSTATO, dbo.CHIAMATE.CHDTAPP, dbo.CHIAMATE.CHORAAPI, dbo.CHIAMATE.CHMINAPI, +dbo.CHIAMATE.CHORAAPF, dbo.CHIAMATE.CHMINAPF, dbo.CHIAMATE.CHRIFER, dbo.CHIAMATE.CHTELEF, dbo.CHIAMATE.CHCODSEG, dbo.CHIAMATE.CHSTOPI, dbo.CHIAMATE.CHNOTE, dbo.CHIAMATE.CHDTASS, +dbo.CHIAMATE.CHORASS, dbo.CHIAMATE.CHMINASS, dbo.CHIAMATE.CHDTCHI, dbo.CHIAMATE.CHORACHI, dbo.CHIAMATE.CHMINCHI, dbo.CHIAMATE.CHDTLIN, dbo.CHIAMATE.CHORALI, dbo.CHIAMATE.CHMINLI, +dbo.CHIAMATE.CHDTLFI, dbo.CHIAMATE.CHORALF, dbo.CHIAMATE.CHMINLF, dbo.CHIAMATE.cpccchk, dbo.CHIAMATE.CHNRAP1, dbo.CHIAMATE.CHSRAP1, dbo.CHIAMATE.CHNRAP2, dbo.CHIAMATE.CHSRAP2, +dbo.CHIAMATE.CHMODRAC, dbo.CHIAMATE.CHPRGANN, dbo.CHIAMATE.UTCC, dbo.CHIAMATE.UTCV, dbo.CHIAMATE.CHIMPMAN, dbo.CHIAMATE.CHPERMAN, dbo.CHIAMATE.CHFLSTIM, dbo.CHIAMATE.CHFLESTE,CHIAMATE.CHTCHIAM as TCCODICE, +dbo.CHIAMATE.CHSEREXT, dbo.API_IMPIANTI.IMDESCRI, dbo.API_IMPIANTI.IMTIPOIM, dbo.API_IMPIANTI.IMMATRIC, dbo.API_IMPIANTI.IMNUMIMP, dbo.API_IMPIANTI.IMULTAMM, dbo.API_IMPIANTI.IMULTDAM, +dbo.API_IMPIANTI.IMULTTAM, dbo.API_IMPIANTI.IMINDIRI1, dbo.API_IMPIANTI.IMINDIRI2, dbo.API_IMPIANTI.IMINDIRI3, dbo.API_IMPIANTI.IMINDIRI4, dbo.API_IMPIANTI.IMINDIRI5, dbo.API_IMPIANTI.IMLOCALI, +dbo.API_IMPIANTI.IMCODCAP, dbo.API_IMPIANTI.IMCOMUNE, dbo.API_IMPIANTI.IMPROVIN, dbo.API_IMPIANTI.IMCODNAZ, dbo.API_IMPIANTI.IMUBICAZ, dbo.API_IMPIANTI.IMZONMAN, dbo.API_IMPIANTI.IMFLPUPR, +dbo.API_IMPIANTI.IMZONCHI, dbo.API_IMPIANTI.IMZONSUP, dbo.API_IMPIANTI.IMDAINMA, dbo.API_IMPIANTI.IMDAFIMA, dbo.API_IMPIANTI.IMDATCOS, dbo.API_IMPIANTI.IMTELESO, dbo.API_IMPIANTI.AN_EMAIL, +dbo.API_IMPIANTI.IMULTCLI, dbo.MARROCONTI.ANCODICE, dbo.MARROCONTI.ANTIPCON, dbo.MARROCONTI.ANDESCRI, dbo.MARROCONTI.ANTELEFO, dbo.CODSEGN.CSDESCR, dbo.CHIAMATE.CHTCHIAM +,'' as IMAZIRIF,dbo.API_IMPIANTI.IMREFREF +,(select top 1 tcdescri from API_TECNICI where TCCODICE=CHIAMATE.CHTCHIAM) as TCDESCRI +,(select top 1 CTIMPCHI from MARROMCONMAST where CTCODCLI=ANCODICE and CTFLSTAT='A' order by CTDATREG desc) as chiamata +,(select top 1 CTIMPVIA from MARROMCONMAST where CTCODCLI=ANCODICE and CTFLSTAT='A' order by CTDATREG desc) as spe_viaggio +,(select top 1 costo_ordinario from API_TECNICI where TCCODICE=CHIAMATE.CHTCHIAM) as costo_ordinario +,(select top 1 costo_notturno from API_TECNICI where TCCODICE=CHIAMATE.CHTCHIAM) as costo_notturno +,(select top 1 costo_straordinario from API_TECNICI where TCCODICE=CHIAMATE.CHTCHIAM) as costo_straordinario +,(select top 1 costo_festivo from API_TECNICI where TCCODICE=CHIAMATE.CHTCHIAM) as costo_festivo +from CHIAMATE +left outer join RAPP_NEW as ic on (ic.SERIALE_CHIAMATA=CHSERIAL and ic.AZIENDA_CHIAMATA=CHCODAZI and ic.CODICE_TECNICO=CHTCHIAM and LTRIM(RTRIM(coalesce(ic.TIPO_RAPPORTINO,'')))='' /*and ic.GENERATO is NULL*/ and (ic.RIFIUTATA='N' )) +left outer join RAPP_NEW as rif on (rif.SERIALE_CHIAMATA=CHSERIAL and rif.AZIENDA_CHIAMATA=CHCODAZI and rif.CODICE_TECNICO=CHTCHIAM and LTRIM(RTRIM(coalesce(rif.TIPO_RAPPORTINO,'')))='' /*and rif.GENERATO is NULL*/ and (rif.RIFIUTATA='S' )) +left outer join RAPP_NEW as chiu on (chiu.SERIALE_CHIAMATA=CHSERIAL and chiu.AZIENDA_CHIAMATA=CHCODAZI and chiu.CODICE_TECNICO=CHTCHIAM and LTRIM(RTRIM(coalesce(chiu.TIPO_RAPPORTINO,'')))='3' /*and chiu.GENERATO is NULL*/ ) +left outer join CODSEGN ON dbo.CODSEGN.CSCODICE = dbo.CHIAMATE.CHCODSEG AND dbo.CODSEGN.CSCODAZI = dbo.CHIAMATE.CHCODAZI +LEFT OUTER JOIN dbo.MARROCONTI +INNER JOIN dbo.API_IMPIANTI ON dbo.MARROCONTI.ANCODICE = dbo.API_IMPIANTI.IMULTCLI AND dbo.MARROCONTI.ANTIPCON = 'C' ON dbo.CHIAMATE.CHAZIIMP = dbo.API_IMPIANTI.IMCODAZI AND dbo.CHIAMATE.CHCODIMP = dbo.API_IMPIANTI.IMCODIMP + +where 1=1 +and dbo.CHIAMATE.CHSTATO = 'C' +and CHIAMATE.CHDATA>=DATEADD(month, -3, GETDATE()) +and CHIAMATE.CHDATA<=DATEADD(month, 3, GETDATE()) + +GO +/****** Object: View [dbo].[API_MANPROG] Script Date: 20/03/2023 08:59:11 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_MANPROG] +AS + +SELECT +PRESA.PIMPIANTO,PRESA.PICODINT,PRESA.PIDATMAN +,RAPP_NEW.SERIALE_RAPPORTINO,RAPP_NEW.SER_BUONO,RAPP_NEW.GENERATO,RAPP_NEW.CODICE_INTERVENTO +,'' as err_title,''as err_detail,'' as err_status_code +,dbo.MANPROG.MPCODAZI AS CTCODAZI, dbo.MANPROG.MPCODIMP AS CTCODIMP, dbo.MANPROG.MPCODINT AS CTCODINT, dbo.CODINTE.CIDESCRI AS CTDESINT, dbo.MANPROG.MPDATPRO AS CTDATPRO, + dbo.MIMPIANTI.IMDESCRI, dbo.MIMPIANTI.IMTIPOIM, dbo.MIMPIANTI.IMMATRIC, dbo.MIMPIANTI.IMNUMIMP, dbo.MIMPIANTI.IMULTDAM, dbo.MIMPIANTI.IMULTAMM, dbo.MIMPIANTI.IMINDIRI1, dbo.MIMPIANTI.IMINDIRI2, + dbo.MIMPIANTI.IMINDIRI3, dbo.MIMPIANTI.IMINDIRI4, dbo.MIMPIANTI.IMINDIRI5, dbo.MIMPIANTI.IMLOCALI, dbo.MIMPIANTI.IMCODCAP, dbo.MIMPIANTI.IMCOMUNE, dbo.MIMPIANTI.IMPROVIN, dbo.MIMPIANTI.IMCODNAZ, + dbo.MIMPIANTI.IMUBICAZ, dbo.MIMPIANTI.IMZONMAN, dbo.MIMPIANTI.IMRIFERI, dbo.MIMPIANTI.IMZONCHI, dbo.MIMPIANTI.IMZONSUP, + dbo.MIMPIANTI.IMULTTAM as TELEFONO1,dbo.MIMPIANTI.IMULTFAM as TELEFONO2,dbo.MIMPIANTI.IMULTCLI as CLIENTE, + dbo.MANPROG.MPMESGEN, dbo.MANPROG.MPMESFEB, dbo.MANPROG.MPMESMAR, dbo.MANPROG.MPMESAPR, dbo.MANPROG.MPMESMAG, dbo.MANPROG.MPMESLUG, + dbo.MANPROG.MPMESGIU, dbo.MANPROG.MPMESAGO, dbo.MANPROG.MPMESSET, dbo.MANPROG.MPMESOTT, dbo.MANPROG.MPMESNOV, dbo.MANPROG.MPMESDIC, + T.TCDESCRI,T.TCCODICE,'' as IMAZIRIF,dbo.MIMPIANTI.IMREFREF +,(select top 1 CTIMPCHI from MARROMCONMAST where CTCODCLI=IMULTCLI and CTFLSTAT='A' order by CTDATREG desc) as chiamata +,(select top 1 CTIMPVIA from MARROMCONMAST where CTCODCLI=IMULTCLI and CTFLSTAT='A' order by CTDATREG desc) as spe_viaggio +,(select top 1 costo_ordinario from API_TECNICI where TCCODICE=T.TCCODICE) as costo_ordinario +,(select top 1 costo_notturno from API_TECNICI where TCCODICE=T.TCCODICE) as costo_notturno +,(select top 1 costo_straordinario from API_TECNICI where TCCODICE=T.TCCODICE) as costo_straordinario +,(select top 1 costo_festivo from API_TECNICI where TCCODICE=T.TCCODICE) as costo_festivo + +FROM dbo.MANPROG INNER JOIN dbo.MIMPIANTI ON dbo.MANPROG.MPCODAZI = dbo.MIMPIANTI.IMCODAZI AND dbo.MANPROG.MPCODIMP = dbo.MIMPIANTI.IMCODIMP +LEFT OUTER JOIN dbo.CODINTE ON dbo.MANPROG.MPCODINT = dbo.CODINTE.CICODICE +INNER JOIN API_TECNICI T ON MIMPIANTI.IMZONMAN=T.TDCODZON AND MANPROG.MPCODAZI=T.TCCODAZI and t.TDDATAFI>=GETDATE() +left outer join PRESA on (PICODAZI=MPCODAZI and MPCODIMP=PIMPIANTO and MPCODINT=PICODINT and TCCODICE=picodtec) +left outer join RAPP_NEW on (MANPROG.MPCODAZI=AZIENDA_CHIAMATA and MANPROG.MPCODIMP=CODICE_IMPIANTO and LTRIM(RTRIM(coalesce(TIPO_RAPPORTINO,'')))='2' and MANPROG.MPCODINT=CODICE_INTERVENTO /*and GENERATO is null*/and MPDATPRO=DATA_VALIDITA) +where MANPROG.MPDATPRO>=DATEADD(month, -3, GETDATE()) +and MANPROG.MPDATPRO<=EOMONTH(GETDATE(),0) +and LTRIM(rtrim(coalesce(GENERATO,'')))<>'S' + + + +/* +SELECT +PRESA.PIMPIANTO,PRESA.PICODINT,PRESA.PIDATMAN +,RAPP_NEW.SERIALE_RAPPORTINO,RAPP_NEW.SER_BUONO,RAPP_NEW.GENERATO,RAPP_NEW.CODICE_INTERVENTO +,'' as err_title,''as err_detail,'' as err_status_code +,dbo.MANPROG.MPCODAZI AS CTCODAZI, dbo.MANPROG.MPCODIMP AS CTCODIMP, dbo.MANPROG.MPCODINT AS CTCODINT, dbo.CODINTE.CIDESCRI AS CTDESINT, dbo.MANPROG.MPDATPRO AS CTDATPRO +, dbo.MIMPIANTI.IMDESCRI, dbo.MIMPIANTI.IMTIPOIM, dbo.MIMPIANTI.IMMATRIC, dbo.MIMPIANTI.IMNUMIMP, dbo.MIMPIANTI.IMULTDAM, dbo.MIMPIANTI.IMULTAMM, dbo.MIMPIANTI.IMINDIRI1, dbo.MIMPIANTI.IMINDIRI2 +,dbo.MIMPIANTI.IMINDIRI3, dbo.MIMPIANTI.IMINDIRI4, dbo.MIMPIANTI.IMINDIRI5, dbo.MIMPIANTI.IMLOCALI, dbo.MIMPIANTI.IMCODCAP, dbo.MIMPIANTI.IMCOMUNE, dbo.MIMPIANTI.IMPROVIN, dbo.MIMPIANTI.IMCODNAZ +,dbo.MIMPIANTI.IMUBICAZ, dbo.MIMPIANTI.IMZONMAN, SUBSTRING(dbo.MIMPIANTI.IMRIFERI,0,499) as IMRIFERI, dbo.MIMPIANTI.IMZONCHI, dbo.MIMPIANTI.IMZONSUP +,dbo.MIMPIANTI.IMULTTAM as TELEFONO1,dbo.MIMPIANTI.IMULTFAM as TELEFONO2,dbo.MIMPIANTI.IMULTCLI as CLIENTE +,dbo.MANPROG.MPMESGEN, dbo.MANPROG.MPMESFEB, dbo.MANPROG.MPMESMAR, dbo.MANPROG.MPMESAPR, dbo.MANPROG.MPMESMAG, dbo.MANPROG.MPMESLUG +,dbo.MANPROG.MPMESGIU, dbo.MANPROG.MPMESAGO, dbo.MANPROG.MPMESSET, dbo.MANPROG.MPMESOTT, dbo.MANPROG.MPMESNOV, dbo.MANPROG.MPMESDIC +,T.TCDESCRI,T.TCCODICE,'' as IMAZIRIF,dbo.MIMPIANTI.IMREFREF +,(select top 1 CTIMPCHI from MARROMCONMAST where CTCODCLI=IMULTCLI and CTFLSTAT='A' order by CTDATREG desc) as chiamata +,(select top 1 CTIMPVIA from MARROMCONMAST where CTCODCLI=IMULTCLI and CTFLSTAT='A' order by CTDATREG desc) as spe_viaggio +,(select top 1 costo_ordinario from API_TECNICI where TCCODICE=T.TCCODICE) as costo_ordinario +,(select top 1 costo_notturno from API_TECNICI where TCCODICE=T.TCCODICE) as costo_notturno +,(select top 1 costo_straordinario from API_TECNICI where TCCODICE=T.TCCODICE) as costo_straordinario +,(select top 1 costo_festivo from API_TECNICI where TCCODICE=T.TCCODICE) as costo_festivo + +FROM dbo.MANPROG INNER JOIN dbo.MIMPIANTI ON dbo.MANPROG.MPCODAZI = dbo.MIMPIANTI.IMCODAZI AND dbo.MANPROG.MPCODIMP = dbo.MIMPIANTI.IMCODIMP +LEFT OUTER JOIN dbo.CODINTE ON dbo.MANPROG.MPCODINT = dbo.CODINTE.CICODICE +INNER JOIN API_TECNICI T ON MIMPIANTI.IMZONMAN=T.TDCODZON AND MANPROG.MPCODAZI=T.TCCODAZI and t.TDDATAFI>=GETDATE() +left outer join PRESA on (PICODAZI=MPCODAZI and MPCODIMP=PIMPIANTO and MPCODINT=PICODINT and TCCODICE=picodtec) +left outer join RAPP_NEW on (MANPROG.MPCODAZI=AZIENDA_CHIAMATA and MANPROG.MPCODIMP=CODICE_IMPIANTO and LTRIM(RTRIM(coalesce(TIPO_RAPPORTINO,'')))='2' and MANPROG.MPCODINT=CODICE_INTERVENTO /*and GENERATO is null*/and MPDATPRO=DATA_VALIDITA) +where MANPROG.MPDATPRO>=DATEADD(month, -3, GETDATE()) +and MANPROG.MPDATPRO<=EOMONTH(GETDATE(),0) +and LTRIM(rtrim(coalesce(GENERATO,'')))<>'S' +and MANPROG.MPCODINT<>'QUI' +UNION +SELECT +PRESA.PIMPIANTO,PRESA.PICODINT,PRESA.PIDATMAN +,RAPP_NEW.SERIALE_RAPPORTINO,RAPP_NEW.SER_BUONO,RAPP_NEW.GENERATO,RAPP_NEW.CODICE_INTERVENTO +,'' as err_title,''as err_detail,'' as err_status_code +,dbo.MANPROG.MPCODAZI AS CTCODAZI, dbo.MANPROG.MPCODIMP AS CTCODIMP, dbo.MANPROG.MPCODINT AS CTCODINT, dbo.CODINTE.CIDESCRI AS CTDESINT, dbo.MANPROG.MPDATPRO AS CTDATPRO +,dbo.MIMPIANTI.IMDESCRI, dbo.MIMPIANTI.IMTIPOIM, dbo.MIMPIANTI.IMMATRIC, dbo.MIMPIANTI.IMNUMIMP, dbo.MIMPIANTI.IMULTDAM, dbo.MIMPIANTI.IMULTAMM, dbo.MIMPIANTI.IMINDIRI1, dbo.MIMPIANTI.IMINDIRI2 +,dbo.MIMPIANTI.IMINDIRI3, dbo.MIMPIANTI.IMINDIRI4, dbo.MIMPIANTI.IMINDIRI5, dbo.MIMPIANTI.IMLOCALI, dbo.MIMPIANTI.IMCODCAP, dbo.MIMPIANTI.IMCOMUNE, dbo.MIMPIANTI.IMPROVIN, dbo.MIMPIANTI.IMCODNAZ +,dbo.MIMPIANTI.IMUBICAZ, dbo.MIMPIANTI.IMZONMAN, SUBSTRING(dbo.MIMPIANTI.IMRIFERI,0,499) as IMRIFERI, dbo.MIMPIANTI.IMZONCHI, dbo.MIMPIANTI.IMZONSUP +,dbo.MIMPIANTI.IMULTTAM as TELEFONO1,dbo.MIMPIANTI.IMULTFAM as TELEFONO2,dbo.MIMPIANTI.IMULTCLI as CLIENTE +,dbo.MANPROG.MPMESGEN, dbo.MANPROG.MPMESFEB, dbo.MANPROG.MPMESMAR, dbo.MANPROG.MPMESAPR, dbo.MANPROG.MPMESMAG, dbo.MANPROG.MPMESLUG +,dbo.MANPROG.MPMESGIU, dbo.MANPROG.MPMESAGO, dbo.MANPROG.MPMESSET, dbo.MANPROG.MPMESOTT, dbo.MANPROG.MPMESNOV, dbo.MANPROG.MPMESDIC +,T.TCDESCRI,T.TCCODICE,'' as IMAZIRIF,dbo.MIMPIANTI.IMREFREF +,(select top 1 CTIMPCHI from MARROMCONMAST where CTCODCLI=IMULTCLI and CTFLSTAT='A' order by CTDATREG desc) as chiamata +,(select top 1 CTIMPVIA from MARROMCONMAST where CTCODCLI=IMULTCLI and CTFLSTAT='A' order by CTDATREG desc) as spe_viaggio +,(select top 1 costo_ordinario from API_TECNICI where TCCODICE=T.TCCODICE) as costo_ordinario +,(select top 1 costo_notturno from API_TECNICI where TCCODICE=T.TCCODICE) as costo_notturno +,(select top 1 costo_straordinario from API_TECNICI where TCCODICE=T.TCCODICE) as costo_straordinario +,(select top 1 costo_festivo from API_TECNICI where TCCODICE=T.TCCODICE) as costo_festivo + +FROM dbo.MANPROG INNER JOIN dbo.MIMPIANTI ON dbo.MANPROG.MPCODAZI = dbo.MIMPIANTI.IMCODAZI AND dbo.MANPROG.MPCODIMP = dbo.MIMPIANTI.IMCODIMP +LEFT OUTER JOIN dbo.CODINTE ON dbo.MANPROG.MPCODINT = dbo.CODINTE.CICODICE +INNER JOIN API_TECNICI T ON MIMPIANTI.IMZONMAN=T.TDCODZON AND MANPROG.MPCODAZI=T.TCCODAZI and t.TDDATAFI>=GETDATE() +left outer join PRESA on (PICODAZI=MPCODAZI and MPCODIMP=PIMPIANTO and MPCODINT=PICODINT and TCCODICE=picodtec) +left outer join RAPP_NEW on (MANPROG.MPCODAZI=AZIENDA_CHIAMATA and MANPROG.MPCODIMP=CODICE_IMPIANTO and LTRIM(RTRIM(coalesce(TIPO_RAPPORTINO,'')))='2' and MANPROG.MPCODINT=CODICE_INTERVENTO /*and GENERATO is null*/and MPDATPRO=DATA_VALIDITA) +where MANPROG.MPDATPRO>=DATEADD(month, -3, GETDATE()) +--and MANPROG.MPDATPRO<=EOMONTH(GETDATE(),0) +and MANPROG.MPDATPRO<=DATEADD(DAY, 14, GETDATE()) +and LTRIM(rtrim(coalesce(GENERATO,'')))<>'S' +and MANPROG.MPCODINT='QUI' +*/ + +GO +/****** Object: View [dbo].[API_SOSTITUZIONI] Script Date: 20/03/2023 09:01:39 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +ALTER VIEW [dbo].[API_SOSTITUZIONI] +AS +SELECT [TSCODAZI],[TSCODTEC],[TSCODZON],[TSDATAIN],[TSDATAFI],[TSCODSOS] + FROM [dbo].[TECSOS] + where [TSDATAIN]<=DATEADD(DAY, -1, GETDATE()) + and [TSDATAFI]>=DATEADD(DAY, 1, GETDATE()) + and [TSCODAZI]='MARRO' +GO \ No newline at end of file diff --git a/ApiPolo/SQL/_README_DISCO.txt b/ApiPolo/SQL/_README_DISCO.txt new file mode 100644 index 0000000..c2ec244 --- /dev/null +++ b/ApiPolo/SQL/_README_DISCO.txt @@ -0,0 +1,2 @@ +IMAZIRIF deve essere letto da api_IMPIANTI in API_CHIAMATE e in API_MANPROG. negli altri per far funzionare le viste lo leggo a '' +deve essere pirifazi(su Azirif)=imazirif(su Chiamate_out e Manprog_out) \ No newline at end of file diff --git a/ApiPolo/Services/CronJobService.cs b/ApiPolo/Services/CronJobService.cs new file mode 100644 index 0000000..1aaad1c --- /dev/null +++ b/ApiPolo/Services/CronJobService.cs @@ -0,0 +1,113 @@ +using Cronos; + +namespace ApiPolo.Services +{ + /// + public abstract class CronJobService : IHostedService, IDisposable + { + private System.Timers.Timer? _timer; + private readonly CronExpression _expression; + private readonly TimeZoneInfo _timeZoneInfo; + + /// + protected CronJobService(string cronExpression, TimeZoneInfo timeZoneInfo) + { + _expression = CronExpression.Parse(cronExpression); + _timeZoneInfo = timeZoneInfo; + } + + /// + public virtual async Task StartAsync(CancellationToken cancellationToken) + { + await ScheduleJob(cancellationToken); + } + + /// + protected virtual async Task ScheduleJob(CancellationToken cancellationToken) + { + var next = _expression.GetNextOccurrence(DateTimeOffset.Now, _timeZoneInfo); + if (next.HasValue) + { + var delay = next.Value - DateTimeOffset.Now; + if (delay.TotalMilliseconds <= 0) // prevent non-positive values from being passed into Timer + { + await ScheduleJob(cancellationToken); + } + _timer = new System.Timers.Timer(delay.TotalMilliseconds); + _timer.Elapsed += async (_, _) => + { + _timer.Dispose(); // reset and dispose timer + _timer = null; + + if (!cancellationToken.IsCancellationRequested) + { + await DoWork(cancellationToken); + } + + if (!cancellationToken.IsCancellationRequested) + { + await ScheduleJob(cancellationToken); // reschedule next + } + }; + _timer.Start(); + } + await Task.CompletedTask; + } + + /// + public virtual async Task DoWork(CancellationToken cancellationToken) + { + await Task.Delay(5000, cancellationToken); // do the work + } + + /// + public virtual async Task StopAsync(CancellationToken cancellationToken) + { + _timer?.Stop(); + await Task.CompletedTask; + } + + /// + public virtual void Dispose() + { + _timer?.Dispose(); + GC.SuppressFinalize(this); + } + } + + /// + public interface IScheduleConfig + { + string CronExpression { get; set; } + TimeZoneInfo TimeZoneInfo { get; set; } + } + + /// + public class ScheduleConfig : IScheduleConfig + { + public string CronExpression { get; set; } = string.Empty; + public TimeZoneInfo TimeZoneInfo { get; set; } = TimeZoneInfo.Local; + } + + /// + public static class ScheduledServiceExtensions + { + public static IServiceCollection AddCronJob(this IServiceCollection services, Action> options) where T : CronJobService + { + if (options == null) + { + throw new ArgumentNullException(nameof(options), @"Please provide Schedule Configurations."); + } + var config = new ScheduleConfig(); + options.Invoke(config); + if (string.IsNullOrWhiteSpace(config.CronExpression)) + { + throw new ArgumentNullException(nameof(ScheduleConfig.CronExpression), @"Empty Cron Expression is not allowed."); + } + + services.AddSingleton>(config); + services.AddHostedService(); + return services; + } + } +} diff --git a/ApiPolo/Services/MyCronJob1.cs b/ApiPolo/Services/MyCronJob1.cs new file mode 100644 index 0000000..0a40015 --- /dev/null +++ b/ApiPolo/Services/MyCronJob1.cs @@ -0,0 +1,664 @@ +using FirebaseAdmin.Messaging; +using FirebaseAdmin; +using Google.Apis.Auth.OAuth2; +using static ApiPolo.Controllers.PoloController; +using static Google.Apis.Requests.BatchRequest; +using System.Text; +using ApiPolo.Models; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Options; +using System.Net; +using Newtonsoft.Json; +using RestSharp; +using System.Net.Http.Headers; +using Nancy.Json; + +namespace ApiPolo.Services +{ + /* https://www.netiq.com/documentation/cloud-manager-2-5/ncm-reference/data/bexyssf.html sintassi intervalli cron */ + + /// + public class MyCronJob1 : CronJobService + { + /// Configuration + public IConfiguration Configuration { get; } + + /// Startup + private readonly ILogger _logger; + + /// Costruttore + public MyCronJob1(IScheduleConfig config, ILogger logger, IConfiguration configuration) : base(config.CronExpression, config.TimeZoneInfo) + { + _logger = logger; + Configuration = configuration; + } + + /// + public override Task StartAsync(CancellationToken cancellationToken) + { + _logger.LogInformation("MessagePushJob 1 starts."); + return base.StartAsync(cancellationToken); + } + + /// + public override Task DoWork(CancellationToken cancellationToken) + { + _logger.LogInformation("{now} MessagePushJob 1 is working.", DateTime.Now.ToString("T")); + + try + { + //cerco le notifiche da mandare + List l = readNotify(); + //List l=new List (); + + foreach (Notifiche n in l) + { + StringBuilder sb = new StringBuilder(); + sb.Append("tecnico: " + n.picodtec + " "); + sb.Append("azienda: " + n.picodazi + " "); + sb.Append("data: " + n.piserial + " "); + + _logger.LogInformation(sb.ToString()); + + } + + //se ci sono cerco il token dispositivo per l'invio + //e li metto in una lista di oggetti pronti per l'invio + + List ll = fillMex(l); + foreach (MexPush p in ll) + { + //PushFCM_Sync(p.token, "Title", p.body); + //PushFCM_SyncNew(null, "Title", "test"); + GenerateFCM_Auth_SendNotifcn(p.token); + } + + + //TODO logica di aggiornamento della tabella delle notifiche + //markNotify(ll); + + //markNotify2(l); + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + _logger.LogInformation(" MessagePushJob KO !!!! :"+errmsg, string.Empty); + } + + + return Task.CompletedTask; + } + + /// + public override Task StopAsync(CancellationToken cancellationToken) + { + _logger.LogInformation("MessagePushJob 1 is stopping."); + return base.StopAsync(cancellationToken); + } + + private List readNotify() + { + List lst = new List(); + //#region Marrocco + //var optionsBuilder = new DbContextOptionsBuilder(); + //optionsBuilder.UseSqlServer(Configuration.GetConnectionString("MARRO")); + + //using (var dbContext = new MARRO_NOTIFICHEDbContext(optionsBuilder.Options)) + //{ + // var listaNot = dbContext.Notif.Where(t => t.pidattim == null&& t.picodazi!=null && t.picodazi.Equals("MARRO") && t.picodtec!=null && t.picodtec.Equals("ZZZ")).OrderBy(t=>t.piserial).Take(1).ToList(); + + // foreach(Notifiche n in listaNot) + // { + // lst.Add(n); + // } + //} + //#endregion + + return lst; + } + + //private void markNotify(List lst) + //{ + // #region MARRO + // var optionsBuilder = new DbContextOptionsBuilder(); + // optionsBuilder.UseSqlServer(Configuration.GetConnectionString("MARRO")); + // using (var dbContext = new MARRO_NOTIFICHEDbContext(optionsBuilder.Options)) + // { + // foreach (MexPush n in lst) + // { + // Notifiche r = n.notifi; + // r.pidattim = DateTime.Now; + // dbContext.Entry(r).State = EntityState.Modified; + // dbContext.SaveChanges(); + + // } + // } + // #endregion + //} + //private void markNotify2(List lst) + //{ + // #region MARRO + // var optionsBuilder = new DbContextOptionsBuilder(); + // optionsBuilder.UseSqlServer(Configuration.GetConnectionString("MARRO")); + // using (var dbContext = new MARRO_NOTIFICHEDbContext(optionsBuilder.Options)) + // { + // foreach (Notifiche n in lst) + // { + // Notifiche r = n; + // r.pidattim = DateTime.Now; + // dbContext.Entry(r).State = EntityState.Modified; + // dbContext.SaveChanges(); + + // } + // } + // #endregion + //} + + private List fillMex(List lst) + { + List mess = new List(); + var optionsBuilder = new DbContextOptionsBuilder(); + optionsBuilder.UseSqlServer(Configuration.GetConnectionString("ApiStr")); + + + foreach(Notifiche nn in lst) + { + using (var dbContext = new TokenDbContext(optionsBuilder.Options)) + { + string rif = nn.piserial; + var t= dbContext.tok.Where(c=>c.usr.Equals(nn.picodtec)&& c.tenant.Equals(nn.picodazi)).ToList(); + + foreach (Token n in t) + { + MexPush m = new MexPush(); + m.tenant = n.tenant; + m.usr = n.usr; + m.token = n.token; + m.body = rif; + m.notifi = nn; + + mess.Add(m); + } + + //TODO logica di aggiornamento della tabella delle notifiche + } + } + + + return mess; + } + + //private void pushMex(string title,string body, string tokenDevice) + //{ + // //string log = string.Empty; + // StringBuilder sb = new StringBuilder(); + // string _title = title +"-"+ getCpccchk(4); + // string _body = body + "-" + DateTime.Now.ToString("yyyyMMddHHmmss"); + // //_logger.LogInformation("{now} MessagePushJob is working.", DateTime.Now.ToString("T")); + // try + // { + // if (FirebaseApp.DefaultInstance == null) + // { + // FirebaseApp.Create(new AppOptions() + // { + // Credential = GoogleCredential.FromFile("private_key.json") + + + // }); + // } + // //var registrationToken = "dDxUDIC3QcWytp6UeVMDyT:APA91bH9y0N7Iff39Ncv0m_EjJ-hv7YTWYaL_5P37-2dob2PRuArvpfl6kmrk10GO2eJiAQ2tVT3tZX9khUD-NPyfljGbpBn1iUyjbTpL6tDF-0IgJN960v95I4_2SWM_crtSH-ZrXAK"; + // var registrationToken = tokenDevice; + + // var message = new Message() + // { + // Apns = new ApnsConfig() + // { + // Aps = new Aps() + // { + // //Change this for the sound you would like + // Sound = "default" + // } + // }, + // Android = new AndroidConfig() + // { + // Notification = new AndroidNotification() + // { + // Sound = "default", + // Priority = NotificationPriority.MAX + + // }, + // Data = new Dictionary() + // { + // { "myData3", "1234522222" } + + // } + // }, + + // Token = registrationToken, + // Data = new Dictionary() + // { + // { "myData", "123457777" } + + // }, + // Notification = new Notification() + // { + // Title = _title, + // Body = _body + // } + + // }; + + + // string response = FirebaseMessaging.DefaultInstance.SendAsync(message).Result; + // //string response = FirebaseMessaging.DefaultInstance.SendMulticastAsync(msg2send).Result; + + // sb.AppendLine("MessagePushJob OK"); + // sb.AppendLine("response:" + response); + // sb.AppendLine("title:" + _title); + // sb.AppendLine("body:" + _body); + // sb.AppendLine("==================="); + + // _logger.LogInformation(sb.ToString()); + // } + // catch (Exception ex) + // { + // string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + // _logger.LogInformation(" MessagePushJob KO !!!! :", errmsg); + // } + // // return log; + //} + + private string PushFCM_Notification(string deviceId, string title, string body) + { + StringBuilder sb = new StringBuilder(); + string _title = title + "-" + getCpccchk(4); + string _body = body + "-" + DateTime.Now.ToString("yyyyMMddHHmmss"); + try + { + string SERVER_API_KEY = "AAAAGBwLmNY:APA91bG5GmgYcaxsU8HrOqvZbb9r82tH9RAEifgKhwoj_zwBe7qei8u3BSxMzFl9Dwykd0TWRuM7ffNe6ehhDDRUqaRPj_vKM9KreJnNrqB6f2hxjPAxzk5De2Ys437-dnSAuS_8SVJV"; + var SENDER_ID = "103549737174"; + var value = body; + WebRequest tRequest; + tRequest = WebRequest.Create("https://fcm.googleapis.com/fcm/send"); + tRequest.Method = "post"; + tRequest.Method = "post"; + tRequest.ContentType = "application/json"; + tRequest.Headers.Add(string.Format("Authorization: key={0}", SERVER_API_KEY)); + + tRequest.Headers.Add(string.Format("Sender: id={0}", SENDER_ID)); + + var msg = new + { + to = deviceId, + data = new + { + body = _body, + title = _title + } + }; + + //var serializer = new JavaScriptSerializer(); + //var json = serializer.Serialize(data); + var json = JsonConvert.SerializeObject(msg, Formatting.Indented); + + Byte[] byteArray = Encoding.UTF8.GetBytes(json); + + tRequest.ContentLength = byteArray.Length; + + Stream dataStream = tRequest.GetRequestStream(); + dataStream.Write(byteArray, 0, byteArray.Length); + dataStream.Close(); + + WebResponse tResponse = tRequest.GetResponse(); + + dataStream = tResponse.GetResponseStream(); + + StreamReader tReader = new StreamReader(dataStream); + + String sResponseFromServer = tReader.ReadToEnd(); + + + tReader.Close(); + dataStream.Close(); + tResponse.Close(); + + sb.AppendLine("MessagePushJob OK"); + sb.AppendLine("response:" + sResponseFromServer); + sb.AppendLine("title:" + _title); + sb.AppendLine("body:" + _body); + sb.AppendLine("==================="); + + _logger.LogInformation(sb.ToString()); + + return sResponseFromServer; + } + catch (Exception ex) + { + string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + _logger.LogInformation(" MessagePushJob KO !!!! :", errmsg); + return errmsg; + } + } + + private string PushFCM_Sync(string deviceId, string title, string body) + { + StringBuilder sb = new StringBuilder(); + string _title = title + "-" + getCpccchk(4); + string _body = body + "-" + DateTime.Now.ToString("yyyyMMddHHmmss"); + //try + //{ + string SERVER_API_KEY = "AAAAGBwLmNY:APA91bG5GmgYcaxsU8HrOqvZbb9r82tH9RAEifgKhwoj_zwBe7qei8u3BSxMzFl9Dwykd0TWRuM7ffNe6ehhDDRUqaRPj_vKM9KreJnNrqB6f2hxjPAxzk5De2Ys437-dnSAuS_8SVJV"; + var SENDER_ID = "103549737174"; + var value = body; + WebRequest tRequest; + tRequest = WebRequest.Create("https://fcm.googleapis.com/fcm/send"); + tRequest.Method = "post"; + tRequest.Method = "post"; + tRequest.ContentType = "application/json"; + tRequest.Headers.Add(string.Format("Authorization: key={0}", SERVER_API_KEY)); + + tRequest.Headers.Add(string.Format("Sender: id={0}", SENDER_ID)); + + var msg = new + { + to = deviceId, + data = new + { + bg_sync = true + } + }; + + //var serializer = new JavaScriptSerializer(); + //var json = serializer.Serialize(data); + var json = JsonConvert.SerializeObject(msg, Formatting.Indented); + + Byte[] byteArray = Encoding.UTF8.GetBytes(json); + + tRequest.ContentLength = byteArray.Length; + + Stream dataStream = tRequest.GetRequestStream(); + dataStream.Write(byteArray, 0, byteArray.Length); + dataStream.Close(); + + WebResponse tResponse = tRequest.GetResponse(); + + dataStream = tResponse.GetResponseStream(); + + StreamReader tReader = new StreamReader(dataStream); + + String sResponseFromServer = tReader.ReadToEnd(); + + + tReader.Close(); + dataStream.Close(); + tResponse.Close(); + + sb.AppendLine("MessagePushJob Sync OK"); + sb.AppendLine("response:" + sResponseFromServer); + sb.AppendLine("==================="); + + _logger.LogInformation(sb.ToString()); + + return sResponseFromServer; + //} + //catch (Exception ex) + //{ + // string errmsg = ex.InnerException != null ? ex.InnerException.Message : ex.Message; + // _logger.LogInformation(" MessagePushJob KO !!!! :", errmsg); + // return errmsg; + //} + } + + #region HTTP V1 API FCM Auth & Send Notification To Mobile //notify FCM Code + + public class Data + { + + public string body + { + get; + set; + } + + public string title + { + get; + set; + } + + public string key_1 + { + get; + set; + } + + public string key_2 + { + get; + set; + } + + } + + public class Message + { + + public string token + { + get; + set; + } + + public Data data + { + get; + set; + } + + public Notification notification + { + get; + set; + } + + } + + public class Notification + { + + public string title + { + get; + set; + } + + public string body + { + get; + set; + } + + } + + public class Root + { + + public Message message + { + get; + set; + } + + } + + public void GenerateFCM_Auth_SendNotifcn(string deviceID) + + { + //----------Generating Bearer token for FCM--------------- + + string fileName = Path.Combine(Directory.GetCurrentDirectory(), "apipolo-952c6-firebase-adminsdk-tioa9-fbb9ba6d66.json") ; //Download from Firebase Console ServiceAccount + + string scopes = "https://www.googleapis.com/auth/firebase.messaging"; + var bearertoken = ""; // Bearer Token in this variable + using (var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read)) + { + + bearertoken = GoogleCredential + .FromStream(stream) // Loads key file + .CreateScoped(scopes) // Gathers scopes requested + .UnderlyingCredential // Gets the credentials + .GetAccessTokenForRequestAsync().Result; // Gets the Access Token + + } + _logger.LogInformation("bearertoken: " + bearertoken); + ///--------Calling FCM----------------------------- + + var clientHandler = new HttpClientHandler(); + var client = new HttpClient(clientHandler); + + client.BaseAddress = new Uri("https://fcm.googleapis.com/v1/projects/apipolo-952c6/messages:send"); // FCM HttpV1 API + + client.DefaultRequestHeaders.Accept.Clear(); + client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); + + //client.DefaultRequestHeaders.Accept.Add("Authorization", "Bearer " + bearertoken); + client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", bearertoken); // Authorization Token in this variable + + //---------------Assigning Of data To Model -------------- + + Root rootObj = new Root(); + rootObj.message = new Message(); + + //rootObj.message.token = "dfYGNx8lTtuCIJZCDKg4WU:APA91bHVY4tBrXKOvnqJvWA5s2By_8Nt8XyRnadDkuGey0C3E45CoasJUUACVp0PCgNkZcXiDnA2WAfX1jfJXcPgM5L6EJFa4IAOccj_GR0uRBO9gXOcwNkh6dSYWb6fOvGFHhuSEoXz"; //FCM Token id + rootObj.message.token = deviceID; + + rootObj.message.data = new Data(); + rootObj.message.data.title = "Data Title"; + rootObj.message.data.body = "Data Body"; + rootObj.message.data.key_1 = "Sample Key"; + rootObj.message.data.key_2 = "Sample Key2"; + rootObj.message.notification = new Notification(); + rootObj.message.notification.title = "Notify Title"; + rootObj.message.notification.body = "Notify Body"; + + //-------------Convert Model To JSON ---------------------- + + var jsonObj = new JavaScriptSerializer().Serialize(rootObj); + + //------------------------Calling Of FCM Notify API------------------- + + var data = new StringContent(jsonObj, Encoding.UTF8, "application/json"); + data.Headers.ContentType = new MediaTypeHeaderValue("application/json"); + + var response = client.PostAsync("https://fcm.googleapis.com/v1/projects/apipolo-952c6/messages:send", data).Result; // Calling The FCM httpv1 API + + //---------- Deserialize Json Response from API ---------------------------------- + + var jsonResponse = response.Content.ReadAsStringAsync().Result; + _logger.LogInformation("RESPONSE: "+jsonResponse); + var responseObj = new JavaScriptSerializer().DeserializeObject(jsonResponse); + + } + + #endregion + + + + + + //private async Task getAuthToken() + //{ + // var scopes = new string[] { "https://www.googleapis.com/auth/firebase.messaging" }; + // var path = Path.Combine(Directory.GetCurrentDirectory(), "apipolo-952c6-firebase-adminsdk-tioa9-fbb9ba6d66.json"); + // var cred = GoogleCredential.FromFile(path).CreateScoped(scopes); + // var token = await cred.UnderlyingCredential.GetAccessTokenForRequestAsync(); + // return token; + //} + //private (bool, T) SendRequest(string url, object requestBody = null, Method method = Method.Post) + //{ + // ServicePointManager.Expect100Continue = true; + // ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; + + // RestClient client = new(url); + // var request = new RestRequest(); + // var token = getAuthToken().Result; + // request.AddHeader("Content-Type", "application/json"); + // request.AddHeader("Authorization", $"Bearer {token}"); + // request.AddHeader("access_token_auth", "true"); + // request.AddHeader("project_id", "SENDER_ID"); + // request.Method = Method.Post; + + + // if (requestBody != null) + // { + // request.AddJsonBody(JsonConvert.SerializeObject(requestBody)); + // } + // RestResponse iResponse = client.Execute(request); + + // if (iResponse.StatusCode != HttpStatusCode.OK) + // { + // return (false, default(T)); + // } + // else + // { + // try + // { + // return (true, JsonConvert.DeserializeObject(iResponse.Content)); + // } + // catch (Exception) + // { + // return (false, default(T)); + // } + // } + //} + + //public NotificationMessageResponse sendMessageToGroup(string notification_key, object notification, object data) + //{ + // var requestObj = new + // { + // token = notification_key, //to + // data = data, + // notification = notification, + // apns = new + // { + // payload = new + // { + // aps = new + // { + // alert = notification, + // sound = "default", + // badge = 1, + // data + // } + // } + // } + // }; + // var baseUrl = "https://fcm.googleapis.com/v1/projects/{PROJECT_ID}/messages:send"; + // var resp = SendRequest(baseUrl, requestObj); + // return resp.Item2; + //} + + private class MexPush + { + /// tenant azienda + public string? tenant { get; set; } + + /// utente login + public string? usr { get; set; } + + /// token device + public string? token { get; set; } + + /// title + public string? title { get; set; } + + /// body + public string? body { get; set; } + + /// not + public Notifiche? notifi { get; set; } + } + + } +} diff --git a/ApiPolo/Startup.cs b/ApiPolo/Startup.cs new file mode 100644 index 0000000..38b3d6d --- /dev/null +++ b/ApiPolo/Startup.cs @@ -0,0 +1,207 @@ +using ApiPolo.Models; +using Microsoft.EntityFrameworkCore; +using Microsoft.OpenApi.Models; +using ApiPolo.Services; +using ApiPolo.Models.VT_dbcontext; +using ApiPolo.Interfaces; +//using ApiPolo.Data; +using Api_VT.Models; +using Api_VT.Models.VT_dbcontext; + +namespace ApiPolo +{ + /// Startup + public class Startup + { + /// Configuration + public IConfiguration Configuration { get; } + /// Startup + public Startup(IConfiguration configuration) + { + Configuration = configuration; + } + /// ConfigureServices + public void ConfigureServices(IServiceCollection services) + { + try + { + const int commandTimeoutInSeconds = 300; + services.AddControllers(); + services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("ApiStr"))); + services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("ApiStr"))); + + #region VIRTUAL TASK + services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("VIRTUAL_TASK") + , options => { options.CommandTimeout(commandTimeoutInSeconds); } + )); + services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("VIRTUAL_TASK") + , options => { options.CommandTimeout(commandTimeoutInSeconds); } + )); + services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("VIRTUAL_TASK") + , options => { options.CommandTimeout(commandTimeoutInSeconds); } + )); + services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("VIRTUAL_TASK") + , options => { options.CommandTimeout(commandTimeoutInSeconds); } + )); + services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("VIRTUAL_TASK") + , options => { options.CommandTimeout(commandTimeoutInSeconds); } + )); + services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("VIRTUAL_TASK") + , options => { options.CommandTimeout(commandTimeoutInSeconds); } + )); + services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("VIRTUAL_TASK") + , options => { options.CommandTimeout(commandTimeoutInSeconds); } + )); + services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("VIRTUAL_TASK") + , options => { options.CommandTimeout(commandTimeoutInSeconds); } + )); + services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("VIRTUAL_TASK") + , options => { options.CommandTimeout(commandTimeoutInSeconds); } + )); + services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("VIRTUAL_TASK") + , options => { options.CommandTimeout(commandTimeoutInSeconds); } + )); + services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("VIRTUAL_TASK") + , options => { options.CommandTimeout(commandTimeoutInSeconds); } + )); + services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("VIRTUAL_TASK") + , options => { options.CommandTimeout(commandTimeoutInSeconds); } + )); + services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("VIRTUAL_TASK") + , options => { options.CommandTimeout(commandTimeoutInSeconds); } + )); + services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("VIRTUAL_TASK") + , options => { options.CommandTimeout(commandTimeoutInSeconds); } + )); + services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("VIRTUAL_TASK") + , options => { options.CommandTimeout(commandTimeoutInSeconds); } + )); + services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("VIRTUAL_TASK") + , options => { options.CommandTimeout(commandTimeoutInSeconds); } + )); + services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("VIRTUAL_TASK") + , options => { options.CommandTimeout(commandTimeoutInSeconds); } + )); + services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("VIRTUAL_TASK") + , options => { options.CommandTimeout(commandTimeoutInSeconds); } + )); + services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("VIRTUAL_TASK") + , options => { options.CommandTimeout(commandTimeoutInSeconds); } + )); + services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("VIRTUAL_TASK") + , options => { options.CommandTimeout(commandTimeoutInSeconds); } + )); + services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("VIRTUAL_TASK") + , options => { options.CommandTimeout(commandTimeoutInSeconds); } + )); + services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("VIRTUAL_TASK") + , options => { options.CommandTimeout(commandTimeoutInSeconds); } + )); + services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("VIRTUAL_TASK") + , options => { options.CommandTimeout(commandTimeoutInSeconds); } + )); + services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("VIRTUAL_TASK") + , options => { options.CommandTimeout(commandTimeoutInSeconds); } + )); + services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("VIRTUAL_TASK") + , options => { options.CommandTimeout(commandTimeoutInSeconds); } + )); + services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("VIRTUAL_TASK") + , options => { options.CommandTimeout(commandTimeoutInSeconds); } + )); + services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("VIRTUAL_TASK") + , options => { options.CommandTimeout(commandTimeoutInSeconds); } + )); + services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("VIRTUAL_TASK") + , options => { options.CommandTimeout(commandTimeoutInSeconds); } + )); + services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("VIRTUAL_TASK") + , options => { options.CommandTimeout(commandTimeoutInSeconds); } + )); + services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("VIRTUAL_TASK") + , options => { options.CommandTimeout(commandTimeoutInSeconds); } + )); + services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("VIRTUAL_TASK") + , options => { options.CommandTimeout(commandTimeoutInSeconds); } + )); + + #endregion + + //TEST + + //services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("MARAS") + // , options => { options.CommandTimeout(commandTimeoutInSeconds); } + // )); + //services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("MARRO") + // , options => { options.CommandTimeout(commandTimeoutInSeconds); } + // )); + + + // FACTORY MUTI-TENANT + services.AddScoped(); + + + services.AddSwaggerGen(gen => + { + + gen.ResolveConflictingActions(apiDescription => apiDescription.First()); + //gen.SwaggerDoc("v1", new OpenApiInfo { Title = "POLO API WS2016", Version = "v3.3" }); + DateTime oggi = DateTime.Now; + string dt = oggi.ToString(); + gen.SwaggerDoc("v1", new OpenApiInfo { Title = "POLO API - v.app 1.30", Version = dt }); + + var filePath = Path.Combine(System.AppContext.BaseDirectory, "ApiPolo.xml"); + gen.IncludeXmlComments(filePath); + }); + + //services.AddCronJob(c => + //{ + // c.TimeZoneInfo = TimeZoneInfo.Local; + // //c.CronExpression = @"*/10 * * * *"; + + // c.CronExpression = @"* * * * *"; + //}); + + services.AddLogging(opt => + { + opt.AddConsole(c => + { + c.TimestampFormat = "[yyyy-MM-dd HH:mm:ss] "; + }); + }); + + } + catch (Exception ex) { + Console.WriteLine(ex.Message); + } + } + + /// Configure:This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + public void Configure(IApplicationBuilder app, IWebHostEnvironment env) + { + if (env.IsDevelopment() || env.IsProduction()) + { + //app.UseDeveloperExceptionPage(); + app.UseSwagger(); + //app.UseSwaggerUI(); + app.UseSwaggerUI(c => + { + c.SwaggerEndpoint("/swagger/v1/swagger.json", "POLO API V2"); + + }); + //app.UseHttpsRedirection(); + } + + app.UseRouting(); + + app.UseAuthentication(); + app.UseAuthorization(); + + app.UseEndpoints(endpoints => + { + endpoints.MapControllers(); + }); + app.UseStaticFiles(); + } + } +} diff --git a/ApiPolo/Storico versioni.txt b/ApiPolo/Storico versioni.txt new file mode 100644 index 0000000..a9b923b --- /dev/null +++ b/ApiPolo/Storico versioni.txt @@ -0,0 +1,8 @@ +verione 1.13 + +- gestione rapportino da commessa o da impianto: l'app diventa in grado di inserire chiamate (Chiamate, seriale chiamate, num progressivo chiamate e presa in carico) e poi restituisce +la chiamata appena inserita per poterla poi lavorare come una normale chiamata e farne il buono. + +- aggiunta la gestione da Api della parte del buono che descrive l'impianto, al solito in formato html + campo riferimento_impianto su Chiamate_out +************************************************************************************* \ No newline at end of file diff --git a/ApiPolo/api_VT-952c6-firebase-adminsdk-tioa9-fbb9ba6d66.json b/ApiPolo/api_VT-952c6-firebase-adminsdk-tioa9-fbb9ba6d66.json new file mode 100644 index 0000000..67f837e --- /dev/null +++ b/ApiPolo/api_VT-952c6-firebase-adminsdk-tioa9-fbb9ba6d66.json @@ -0,0 +1,13 @@ +{ + "type": "service_account", + "project_id": "apipolo-952c6", + "private_key_id": "fbb9ba6d66d83350f3b982036d8da40580180426", + "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDaTP2pnqO/zjXd\nPPE3217BcCKlGPd4jemA2YQSHvfPMMFWAxb7JuBbg+vf+POpJrv2hhDbUFncctNI\nUP/esH+bFs2UiR6ApI+pqEBltuUHdcN7mpGKos8YVQFqnQEmECm4LByDxQhe39d9\nK+0r4byllQVtmSJto0e8o1Hg4TzdXz2lQxZHk9OnaPQ18uPOq0CXuAjrqLl1+qUw\nmuighelsIfb9GA0/QHWSHt14sf08Gs9UxILSY1mHR1DXAJJ9emVJWWQMOhX2NoJo\nTycx5lERZsv9FaX+scYY16WFRondeyLoGg2n/WmXsdW1sZMREtaKiTzme+HTVl2n\n9V8PkXVbAgMBAAECggEAAtjQuKSNl586h5qy1fljWeUWON2Y5M7nFGrvgLDmv1kn\nBdl/RomoR7lBjAeeuX5FkHVehPTteP2Yj0Z5P2bHVq3aGERoGE+ibpMD8SBoRwv8\nYn5CY1FAq7vHf1rBQTL9qvYxQzLDdIo/gAYwFSQQxil5Ahopd6mSu4Z3KyiZZj+o\nJBPwskiVaT5h387n2WpjdC9z6Q6TZ6Nzsbu0icl1E6Oek9M3+ps8bng3pUhdwuRq\n2mn+Rd0KuUHFq4KfZGcWVyIaLGmNZ5Pw1WapEkqGDZ+AgBRcX5hO0py3lh15cxxk\nSNEJXNC5eynrN2muywnNFHx4QugTXwQNSW7qxjIXxQKBgQD8yXh0oqC3OH55mLj+\nC2sC6jWU9ofy96HTKN3UmGaLIn7rQTddzUESpD5L7CvKCW97pIe2gryIblw4M3mB\nsS0Oj3CyLRiShm5+iGinMuoYfgaKJdj6vDQmWjLHLURLmuBYma1MAT0eO6nHByDP\n7ihKo1VxKmfLzvOc8athtkrz1wKBgQDdE06140uIkfqyRLuhMI5HBPLS98GuUVU7\nw3+qeS/Y6BN5Nk70WGjV/7Cf4EmVTNEg/bXZeAr+4LOtgMYPGa2Vj2TQAxzycUSo\nYcKLQ5rO73aHEgylKxv2D1qMcEt1E3LbSczXvxJyOy9m8vykp33KhkUmry0rgWj1\nkXNiDDAaHQKBgG35uM4FcqZDjcKZDuJ3VTcPbgBAwSSTV3Pmc5vqMbKWb2EqHkxQ\n396cVf3x4ZskP7wq+GAOwLcaTESnIFWsH04WWZEqzWXx1mB2OBGFtRKywWWY0a1D\n8+w7kZvVtcCuwKvLL/nBEDX2/wX3s+7CTgUqyiFRsZaZkqLVARqhlDpBAoGAeGVq\naT4GxbKScAFkmY0i/uRgBaquDOv4WhrG7SUgfKUu7cU4zHNVbK3aF8eC608xWSEy\npuNsQZBH6gaGVnTqhtfX1DzNx+8NsBHFbCh+J5Jb34Vh45WNnbyQ2IjTX0gfNfOE\nHj7Noe4/i3ZrRpR8ug3TnRSrqdTJP2teBhiTHbUCgYEA5sWu0fGbacwzblmRZ4UM\nmNMAgeNsCL18dQMk22kj1UQvd7H88mjb+i+ojNN+yBIu45JxKuVPofrBRm9FOqxC\ntJYGXW0ujQxqrNIVOxI4zKw9E67tmaxYigTV5PX6A2l/UN2LQzVC7jRJK1CwDnpT\nZv+3uacaBhpqJS0wGCQxaik=\n-----END PRIVATE KEY-----\n", + "client_email": "firebase-adminsdk-tioa9@apipolo-952c6.iam.gserviceaccount.com", + "client_id": "110564565566804338065", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://oauth2.googleapis.com/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-tioa9%40apipolo-952c6.iam.gserviceaccount.com", + "universe_domain": "googleapis.com" +} diff --git a/ApiPolo/appsettings.Development.json b/ApiPolo/appsettings.Development.json new file mode 100644 index 0000000..0c208ae --- /dev/null +++ b/ApiPolo/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/ApiPolo/appsettings.json b/ApiPolo/appsettings.json new file mode 100644 index 0000000..4137566 --- /dev/null +++ b/ApiPolo/appsettings.json @@ -0,0 +1,67 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*", + "ConnectionStrings": { + + //connessione non sicura: Encrypt=False + + "ApiStr": "Data Source=172.25.30.1;Initial Catalog=API_POLO;User Id=sa; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", + //"ApiStr": "Data Source=MARCO_PC\\SQL_2022;Initial Catalog=API_POLO;User Id=sa; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", + + /*"FERRA": "Data Source=10.0.0.10;Initial Catalog=AHR60_FERRARI;User Id=sa; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",*/ + "FERRA": "Data Source=37.159.179.14;Initial Catalog=AHR80_TEST;User Id=AppPolo; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False;Encrypt=False;Trust Server Certificate=True", + + /*"MARRO": "Data Source=172.25.30.177;Initial Catalog=R80_MARROCCO_TEST;User Id=app; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",*/ + "MARRO": "Data Source=172.25.30.177;Initial Catalog=R80_MARROCCO;User Id=sa; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", + /*"MARRO": "Data Source=poloinformatico57.clienti.init-s.it;Initial Catalog=R80_MARROCCO;User Id=app; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",*/ + + "GITSR": "Data Source=172.25.30.177;Initial Catalog=R80_GITSR;User Id=app; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", + /*"GITSR": "Data Source=172.25.30.177;Initial Catalog=R80_GITSR_TEST;User Id=app; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",*/ + "GITSR_MARRO": "Data Source=172.25.30.177;Initial Catalog=R80_MARROCCO;User Id=app; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", + //"GITSR_MARRO": "Data Source=172.25.30.177;Initial Catalog=R80_MARROCCO_TEST;User Id=app; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", + + "LIFTA": "Data Source=172.25.30.177;Initial Catalog=R80_LIFTA;User Id=app; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", + /*"LIFTA": "Data Source=172.25.30.177;Initial Catalog=R80_LIFTA_TEST;User Id=app; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",*/ + "LIFTA_MARRO": "Data Source=172.25.30.177;Initial Catalog=R80_MARROCCO;User Id=app; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", + //"LIFTA_MARRO": "Data Source=172.25.30.177;Initial Catalog=R80_MARROCCO_TEST;User Id=app; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", + + /*"SICILIA": "Data Source=10.0.0.10;Initial Catalog=AHR_SICILIA;User Id=sa; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",*/ + "SICILIA": "Data Source=studioliuzzo.selfip.net;Initial Catalog=AHR_TEST_APP;User Id=sa; Password=1Zucchetti;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", + + /*"DISCO": "Data Source=10.0.0.10;Initial Catalog=AHR60_FERRARI_VISTE_DISCO;User Id=sa; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",*/ + /*"DISCO": "Data Source=MARCO_PC\\SQL_2022;Initial Catalog=DISCOVERY_80;User Id=sa; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",*/ + /*"DISCO": "Data Source=discoverylift.dyndns.org;Initial Catalog=DISCOVERY_80;User Id=sa; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",*/ + "DISCO": "Data Source=172.25.30.244;Initial Catalog=DISCOVERY_80;User Id=sa; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", + + "SAROM": "Data Source=37.159.179.14;Initial Catalog=AHR60_SAROM_TEST80;User Id=sa; Password=Poloinf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", + /*"SAROM": "Data Source=10.0.0.10;Initial Catalog=AHR80_SAROM;User Id=sa; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",*/ + + /*"SINER": "Data Source=10.0.0.10;Initial Catalog=AHR_SINERGO;User Id=sa; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"*/ + "SINER": "Data Source=ufficio.sinergogroup.it,31433;Initial Catalog=AHR_TECLI;User Id=sa; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", + + /*"SIET2": "Data Source=194.50.74.66;Initial Catalog=R65_SIET;User Id=sa; Password=W1ld1x42;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",*/ + "SIET2": "Data Source=172.25.30.29;Initial Catalog=R65_SIET;User Id=sa; Password=W1ld1x42;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", + + "PMS": "Data Source=10.0.0.10;Initial Catalog=PMS_DEMO;User Id=sa; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", + /*"VIRTUAL_TASK": "Data Source=MARCO_PC\\SQL_2022;Initial Catalog=VIRTUAL_TASK;User Id=sa; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",*/ + "VIRTUAL_TASK": "Data Source=172.25.30.1;Initial Catalog=VIRTUAL_TASK;User Id=sa; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", + "LIFT_WEB": "Data Source=docker1.polo;Initial Catalog= AHRW42_LIFT;User Id=sa; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", + + /*"SYSCOM": "Data Source=docker1.polo;Initial Catalog= AHRW_SYSCOM;User Id=sa; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",*/ + "SYSCOM": "Data Source=dbsql01.poloinformatico.it;Initial Catalog= AHRW_SYSCOM;User Id=syscom; Password=4@QLHV?cpVYbr+GB;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", + + "TEDESCO": "Data Source=172.25.30.38;Initial Catalog= AHR_80;User Id=sa; Password=ZS1c1l1@;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" + + //"MARAS": "Data Source=docker1.polo;Initial Catalog= AHRW_MARAS;User Id=sa; Password=p0l01nf.;Integrated Security=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False;Encrypt=False" + }, + "JWT": { + "ValidAudience": "http://localhost:4200", + "ValidIssuer": "http://localhost:61955", + "Secret": "ByYM000OLlMQG6VVVp1OH7Xzyr7gHuw1qvUC5dcGt3SNM" + } +} diff --git a/ApiPolo/loghi/disco_app2.jpg b/ApiPolo/loghi/disco_app2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..320584da01214d9ea56059d2b68eff9f11fcc434 GIT binary patch literal 41754 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

@SkDqVUYM_|AYVVY$( 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 W>xJGD>fU`g3*oL=9iZqv`2PSF%!myD literal 0 HcmV?d00001 diff --git a/ApiPolo/wwwroot/VIRTU/AZI02/AZI02_LOGO.jpg b/ApiPolo/wwwroot/VIRTU/AZI02/AZI02_LOGO.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7c34a5a139eb701d7bd16be9116d284e8965dfba GIT binary patch literal 107641 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 z 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

h+ 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 literal 0 HcmV?d00001 diff --git a/ApiPolo/wwwroot/VIRTU/AZI02/No_image.png b/ApiPolo/wwwroot/VIRTU/AZI02/No_image.png new file mode 100644 index 0000000000000000000000000000000000000000..ba2d76f588398ac8c1095fd9bc13a1564cf80c48 GIT binary patch literal 81469 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 literal 0 HcmV?d00001 diff --git a/ApiPolo/wwwroot/VIRTU/AZI02/R.png b/ApiPolo/wwwroot/VIRTU/AZI02/R.png new file mode 100644 index 0000000000000000000000000000000000000000..55fdf68c24123a2c8075ebee37a0980c61dcc522 GIT binary patch literal 116807 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 literal 0 HcmV?d00001 diff --git a/ApiPolo/wwwroot/VIRTU/AZI02/company2.png b/ApiPolo/wwwroot/VIRTU/AZI02/company2.png new file mode 100644 index 0000000000000000000000000000000000000000..112aa0d40ce6307f79067f2100568274674e41f6 GIT binary patch literal 1723 zcmZuxdpHyNAO3bdWQC~Yba+PiRZBJ3a+0~tj4^k|t!XZ&SfkFt+M*5<=FV8gEOHy; z9Cz7I_}RubI=LjN&f_}CrCgST`@YZne*XLX@g_NAkcSVc9|8azM%h`r z?7DcD&*k>*YOFc=*{;nxJGj~G?CgL*9`LRQA>Dg|IzWUNxN$+qbN9@C;N1oyMIfjf z1PM%|dRzM@W|zK@o{WJTB7pvb*)RnBntF%l%wv0jGpB3l10aupfcEOH_rR7797};y zEePvV{5W608s^yo>LRnj?yPw7Dr zS}z1P)(Y7Yf2%C$6Z*v0=G+ z_M;;&>@OYu8Byws2vx2)fychS$J^PFjW-k*KWh=|@10|YFmY5xqDD58nN79cyZgC+ z#iKoZ_P$Xa#td6~6v`dLC#K;-@ODiJM}GJpSBMu)cSzYKqsojhID?mlQkM(LnjTzd zPmaoGit|4E!Lr6IXVCBf8p6e=k2#e~`+{1q(am+SUwzT}?aVnwPUKmVi%&M{OjLqZ z;z~$$FSGP>@+fK{Rh;CmpUgb?uCKJGDMl~5$$oFhgQ!6m2L3P&V)cm1vHF&YlWX2` zF^1*ZN((7d#}#or_8#=@x;`qM|d zfvb%wz+=#-Jk=Ooal!)p=W@p|HCwix-PPY}f7sZ^sMurCbNnhX-{-+kRqYAlR}k~N zr9RHW4?ewKge9qyiF2aUAD#@&b%y6jo$$h@^tT5^UpWx0{O=}xQ`O^{%|;IO({{Eq z&&pPzvOZi$`&E)J+@BJus{t?k z`WOb!X6vVe+Gu@p)DuE7cv5cB%z?c=6<;?F-npU%3;C8+p)91?S82rQ^%F!nxC zpAN~~M-{-6y33N*F2T8l`3*pWZ}Ns|qyRNINy7NvG^jd&As=$A;Ruj?&sRQi=|}q0 z1E{3=Et*3-7f1u?y(u9eY7%wPUhZ5y`3Y3TeQ`DM(WOs5zDWH4lA0@K+@(8k zdrLpt`(vx`p1#rQv`~b5QG%V&NVtD-oe)&+A9X(irSCVgWP~I#e7R-+X&f)vT*j;O z*{Nzh<2Q7j=GREmma}(0@*Fl2ob@!fr61jO1v`;!*G3PH_pD4&QiM>{iEk0Ev_~4% zc%D7M6vitkTb>%my60w8pU%xDS4Cv2V7Ad`13ZpTofjqNM7FNTaou=3>q7?Xu~##2 z5*CGJ+#+XE>FaiuObmN7@~qilV4fz(Mk$3tgFD`vlJDKUcCBbl8`4$%bLN?iUz@Sl_^ zZPyxoa?yIEtJ>y@$hIWnmtQt0e52*t_U(G#j;R`tIlW&TuwoIT&HcV}oEhYBV%6CK zqHNR36hqy}xm^1R+7?@Ew*95~uZ`9BbK^UZ^kbRW!D&kw%hVJWYFN~$9C$Ck-?u`x z?6tL2fAo8W;4xzQrlBVLU3bXqI?CgAvfkCjbL;;)k^fiL-QNB#UVY#}7m~^O=YX=o KSaU6}Kl~d6COb+1 literal 0 HcmV?d00001 diff --git a/ApiPolo/wwwroot/VIRTU/AZI02/img2.png b/ApiPolo/wwwroot/VIRTU/AZI02/img2.png new file mode 100644 index 0000000000000000000000000000000000000000..ba2d76f588398ac8c1095fd9bc13a1564cf80c48 GIT binary patch literal 81469 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 literal 0 HcmV?d00001 diff --git a/ApiPolo/wwwroot/VIRTU/CAV00001.jpg b/ApiPolo/wwwroot/VIRTU/CAV00001.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c6673bf8d251872033289923aacab383c7ad5ea1 GIT binary patch literal 38171 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 literal 0 HcmV?d00001 diff --git a/ApiPolo/wwwroot/logo_disco.jpg b/ApiPolo/wwwroot/logo_disco.jpg new file mode 100644 index 0000000000000000000000000000000000000000..320584da01214d9ea56059d2b68eff9f11fcc434 GIT binary patch literal 41754 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 JrX_XezX3>Dv@8Gs literal 0 HcmV?d00001 diff --git a/ApiPolo/wwwroot/logo_marro.jpg b/ApiPolo/wwwroot/logo_marro.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5a0747ba6e17f476079c1c9d9844f3fbffb02401 GIT binary patch literal 21361 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 literal 0 HcmV?d00001 diff --git a/Api_VT.sln b/Api_VT.sln new file mode 100644 index 0000000..f5c4e40 --- /dev/null +++ b/Api_VT.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.1.32319.34 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Api_VT", "ApiPolo\Api_VT.csproj", "{FCB070A4-CB11-48F7-8245-A609151A95F7}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FCB070A4-CB11-48F7-8245-A609151A95F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FCB070A4-CB11-48F7-8245-A609151A95F7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FCB070A4-CB11-48F7-8245-A609151A95F7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FCB070A4-CB11-48F7-8245-A609151A95F7}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {F4BB9AEC-7FFE-4101-8B36-F1CD5AF0DCDB} + EndGlobalSection +EndGlobal