TP_SEI_Project/root/ContrattoSEI/PDFGenerator/BusinessLayer/SectionAdditionsConditionChecker.cs
2025-04-15 12:10:19 +02:00

140 lines
7.6 KiB
C#

using PDFGenerator.BusinessLayer.DataSection;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
namespace PDFGenerator.BusinessLayer
{
public static class SectionAdditionsConditionChecker
{
public static bool S128AddonAsteriskAndNote(DataThread dataThread)
{
DataSetS128 dataSet = (DataSetS128)dataThread.Data.DatiSezione;
string profilioFinanziario = (string)dataSet.Tables["ProfiloRischio"].Rows[0][1];
decimal rischioMercatoMax = 0;
decimal.TryParse((string)dataSet.Tables["profiliRischioAdeguatezza"].Rows[0]["LimiteMax"], out rischioMercatoMax);
decimal rischioMercatoVal = 0;
decimal.TryParse((string)dataSet.Tables["profiliRischioAdeguatezza"].Rows[0]["ValoreBF"], out rischioMercatoVal);
decimal rischioCreditoMax = ConvertRischioClasseToDecimal((string)dataSet.Tables["profiliRischioAdeguatezza"].Rows[1]["LimiteMax"]);
decimal rischioCreditoVal = ConvertRischioClasseToDecimal((string)dataSet.Tables["profiliRischioAdeguatezza"].Rows[1]["ValoreBF"]);
bool result = S128And132NotesAndAsterisk(dataThread.TipoContratto, profilioFinanziario, rischioMercatoVal, rischioMercatoMax, rischioCreditoVal, rischioCreditoMax);
return result;
}
public static bool S132AddonNote_2nd(DataThread dataThread)
{
DataSetS132 dataSet = (DataSetS132)dataThread.Data.DatiSezione;
string profilioFinanziario = (string)dataSet.Tables["ProfiloRischio"].Rows[0][1];
decimal rischioMercatoMax = (decimal)dataSet.Tables["DatiGrafico"].Rows[0]["RischioMercatoMax"];
decimal rischioMercatoVal = (decimal)dataSet.Tables["DatiGrafico"].Rows[0]["RischioMercato"];
var rischioCreditoMaxTmp = dataSet.Tables["DatiGrafico"].Rows[0]["RischioCreditoMax"];
decimal rischioCreditoMax = rischioCreditoMaxTmp == DBNull.Value ? 0m : (decimal)rischioCreditoMaxTmp;
var rischioCreditoValTmp = dataSet.Tables["DatiGrafico"].Rows[0]["RischioCredito"];
decimal rischioCreditoVal = rischioCreditoValTmp == DBNull.Value ? 0m : (decimal)rischioCreditoValTmp;
bool result = S128And132NotesAndAsterisk(dataThread.TipoContratto, profilioFinanziario, rischioMercatoVal, rischioMercatoMax, rischioCreditoVal, rischioCreditoMax);
dataThread.IsAdequatezza = result;
return result;
}
public static bool S80BisBottomLabel(DataThread dataThread)
{
//20180917 AC aggiunto per far uscire la nota su eccessiva adeguatezza
DSS128ProfiliRischioAdeguatezza s128 = new DSS128ProfiliRischioAdeguatezza();
DataSectionResult sectionResult = s128.getDataSection(new List<SessionStruct>(), "[C6MartPeriodico].[PL_MP_S128ProfiloRischioAdeguatezza]", dataThread);
DataSetS128 dataSet = (DataSetS128) sectionResult.DatiSezione;
//DataSetS80BIS dataSet = (DataSetS80BIS)dataThread.Data.DatiSezione;
string profilioFinanziario = (string)dataSet.Tables["ProfiloRischio"].Rows[0][1];
decimal rischioMercatoMax = 0;
decimal.TryParse((string)dataSet.Tables["profiliRischioAdeguatezza"].Rows[0]["LimiteMax"], out rischioMercatoMax);
decimal rischioMercatoVal = 0;
decimal.TryParse((string)dataSet.Tables["profiliRischioAdeguatezza"].Rows[0]["ValoreBF"], out rischioMercatoVal);
decimal rischioCreditoMax = ConvertRischioClasseToDecimal((string)dataSet.Tables["profiliRischioAdeguatezza"].Rows[1]["LimiteMax"]);
decimal rischioCreditoVal = ConvertRischioClasseToDecimal((string)dataSet.Tables["profiliRischioAdeguatezza"].Rows[1]["ValoreBF"]);
bool result = S128And132NotesAndAsterisk(dataThread.TipoContratto, profilioFinanziario, rischioMercatoVal, rischioMercatoMax, rischioCreditoVal, rischioCreditoMax);
dataThread.IsAdequatezza = result;
return result;
//--20180917
//return dataThread.IsAdequatezza == true;
}
//20180917 AC aggiunto per far uscire la nota su eccessiva adeguatezza nella S170
public static bool S170BottomLabel(DataThread dataThread)
{
DSS128ProfiliRischioAdeguatezza s128 = new DSS128ProfiliRischioAdeguatezza();
DataSectionResult sectionResult = s128.getDataSection(new List<SessionStruct>(), "[C6MartPeriodico].[PL_MP_S128ProfiloRischioAdeguatezza]", dataThread);
DataSetS128 dataSet = (DataSetS128)sectionResult.DatiSezione;
string profilioFinanziario = (string)dataSet.Tables["ProfiloRischio"].Rows[0][1];
decimal rischioMercatoMax = 0;
decimal.TryParse((string)dataSet.Tables["profiliRischioAdeguatezza"].Rows[0]["LimiteMax"], out rischioMercatoMax);
decimal rischioMercatoVal = 0;
decimal.TryParse((string)dataSet.Tables["profiliRischioAdeguatezza"].Rows[0]["ValoreBF"], out rischioMercatoVal);
decimal rischioCreditoMax = ConvertRischioClasseToDecimal((string)dataSet.Tables["profiliRischioAdeguatezza"].Rows[1]["LimiteMax"]);
decimal rischioCreditoVal = ConvertRischioClasseToDecimal((string)dataSet.Tables["profiliRischioAdeguatezza"].Rows[1]["ValoreBF"]);
bool result = S128And132NotesAndAsterisk(dataThread.TipoContratto, profilioFinanziario, rischioMercatoVal, rischioMercatoMax, rischioCreditoVal, rischioCreditoMax);
dataThread.IsAdequatezza = result;
return result;
}
//--20180917
private static bool S128And132NotesAndAsterisk(TipoContratto contractType, string profilioFinanziario, decimal rischioMercatoVal, decimal rischioMercatoMax, decimal rischioCreditoVal, decimal rischioCreditoMax)
{
profilioFinanziario = profilioFinanziario.ToLower();
int useAddins = int.Parse(ConfigurationManager.AppSettings["S132AndS128ShowNotesAndAsterisk"]); // we can disable entire change in config file
//return true;
if (useAddins == 1)
{
if (rischioMercatoMax >= rischioMercatoVal && rischioCreditoMax >= rischioCreditoVal) // white area condition
{
if (profilioFinanziario.Contains("equilibrato") && rischioMercatoVal <= 2) // 2 levels condition
{
return true;
}
if (profilioFinanziario.Contains("dinamico") && rischioMercatoVal <= 4.5m) // 2 levels condition
{
return true;
}
if (profilioFinanziario.Contains("aggressivo") && rischioMercatoVal <= 9.5m) // 2 levels condition
{
return true;
}
}
return false;
}
else
{
return false;
}
}
private static decimal ConvertRischioClasseToDecimal(string value)
{
decimal result = 0;
switch (value.ToLower())
{
case "classe a":
result = 1;
break;
case "classe b":
result = 2;
break;
case "classe c":
result = 3;
break;
case "":
case null:
case "n.a.":
default:
result = 0;
break;
}
return result;
}
}
}