/// <summary> /// Quota Esente Tappa EURO = (1-[perc.rid.quota esente])* [imp.esente] * [n. giorni fraz.] /// </summary> /// <param name="Missione"></param> /// <param name="Tappa"></param> /// <returns></returns> public static decimal QuotaEsenteTappa(DataRow Missione, DataRow Tappa, CfgItineration Cfg) { double percquotaesentegg = CfgFn.GetNoNullDouble(Tappa["reductionpercentage"]); double ggfraz = GetNFrazionarioGiorni(Tappa); decimal QuotaEsente = 0; if (TappaIsItalia(Tappa)) { QuotaEsente = CfgFn.GetNoNullDecimal(Cfg.italianexemption); } else { QuotaEsente = CfgFn.GetNoNullDecimal(Cfg.foreignexemption); } if (percquotaesentegg > 1) { percquotaesentegg = 1; } decimal QuotaEsTappa = Convert.ToDecimal((1 - percquotaesentegg) * ggfraz) * QuotaEsente; QuotaEsTappa = CfgFn.RoundValuta(QuotaEsTappa); if (QuotaEsTappa > IndennitaTotale(Tappa)) { QuotaEsTappa = IndennitaTotale(Tappa); } return(QuotaEsTappa); }
/// <summary> /// Totale EURO quote esenti tappe /// </summary> /// <param name="Missione"></param> /// <param name="Tappe"></param> /// <returns></returns> public static decimal TotQuoteEsentiTappe(DataRow Missione, DataTable Tappe, CfgItineration Cfg) { decimal SUM = 0; foreach (DataRow Tappa in Tappe.Select()) { SUM += QuotaEsenteTappa(Missione, Tappa, Cfg); } return(SUM); }
public static decimal IF_QuotaEsente(DateTime Start, DateTime Stop, CfgItineration Cfg, decimal amount) { double ggfraz = IF_CalcolaFrazGiorni(Start, Stop); decimal QuotaEsente = CfgFn.GetNoNullDecimal(Cfg.foreignexemption); decimal QuotaEsTappa = Convert.ToDecimal(ggfraz) * QuotaEsente; if (QuotaEsTappa > amount) { QuotaEsTappa = amount; } return(QuotaEsTappa); }
/// <summary> /// Indennita Lorda tappa EURO /// </summary> /// <param name="Missione"></param> /// <param name="Tappa"></param> /// <returns></returns> public static decimal IndennitaLordaTappa(DataRow Missione, DataRow Tappa, CfgItineration Cfg) { decimal QuotaEsente = QuotaEsenteTappa(Missione, Tappa, Cfg); //non moltiplicata per coeff.lord. decimal IndennitaTot = IndennitaTotale(Tappa); //non moltiplicata per coeff.lord.EURO //IndennitaTot = CfgFn.RoundValuta( DecToEuro(Tappa,IndennitaTot)); //double CoeffLord = CfgFn.GetNoNullDouble(Missione["coefflord"]); decimal Imponibile = ImponibileTappa(Missione, Tappa, Cfg); if ((IndennitaTot - QuotaEsente) > 0) { return(Imponibile + QuotaEsente); } else { return(IndennitaTot); } }
/// <summary> /// Imponibile Tappa EURO = (Indennita Totale - QuotaEsente) * coeff. lordizzazione /// o 0 se negativo, ove /// Indennita Totale = [Indennita corrisposta]*[1-perc.rid.diaria]*[n.giorni fraz.] /// e /// Quota Esente = [1-perc.imp esente]*[quota esente]* [n.giorni fraz] /// </summary> /// <param name="Missione"></param> /// <param name="Tappa"></param> /// <returns></returns> public static decimal ImponibileTappa(DataRow Missione, DataRow Tappa, CfgItineration Cfg) { decimal QuotaEsente = QuotaEsenteTappa(Missione, Tappa, Cfg); decimal IndennitaTot = IndennitaTotale(Tappa); //IndennitaTot = DecToEuro(Tappa,IndennitaTot); double CoeffLord = CfgFn.GetNoNullDouble(Missione["grossfactor"]); if ((IndennitaTot - QuotaEsente) > 0) { return(CfgFn.RoundValuta( (IndennitaTot - QuotaEsente) * Convert.ToDecimal(CoeffLord) )); } else { return(0); } }
/// <summary> /// Imponibile NETTO su cui va applicata l'aliquota /// </summary> /// <param name="Spesa"></param> /// <param name="TipoSpesa"></param> /// <param name="Cfg"></param> /// <returns></returns> public static decimal IF_ImponibileSpesa(DataRow Spesa, DataTable TipoSpesa, CfgItineration Cfg) { object iditinerationrefundkind = Spesa["iditinerationrefundkind"]; if (iditinerationrefundkind == DBNull.Value) { return(0); } CQueryHelper QHC = new CQueryHelper(); DataRow[] r = TipoSpesa.Select(QHC.CmpEq("iditinerationrefundkind", iditinerationrefundkind)); if (r.Length == 0) { return(0); } if (CfgFn.GetNoNullInt32(r[0]["iditinerationrefundkindgroup"]) != 5) { return(0); //non è un rimborso forfettario } decimal IndennitaTot = CfgFn.GetNoNullDecimal(Spesa["amount"]); decimal QuotaEsente = 0; if (Spesa["starttime"] != DBNull.Value && Spesa["stoptime"] != DBNull.Value) { QuotaEsente = IF_QuotaEsente((DateTime)Spesa["starttime"], (DateTime)Spesa["stoptime"], Cfg, IndennitaTot); } if ((IndennitaTot - QuotaEsente) > 0) { return(CfgFn.RoundValuta(IndennitaTot - QuotaEsente)); } else { return(0); } }
public static void RicalcolaOreGiorniTappa(DataRow Missione, DataRow Tappa, CfgItineration Cfg) { if (Tappa["starttime"] == DBNull.Value) { return; } if (Tappa["stoptime"] == DBNull.Value) { return; } int oreestero = CfgFn.GetNoNullInt32(Cfg.foreignhours); DateTime datainizio = (DateTime)Tappa["starttime"]; DateTime datafine = (DateTime)Tappa["stoptime"]; if (datainizio.Year < 1900 || datainizio.Year > 2100) { Tappa["days"] = Convert.ToDouble(9999); Tappa["hours"] = Convert.ToDouble(0); return; } if (datafine.Year < 1900 || datafine.Year > 2100) { Tappa["days"] = Convert.ToDouble(9999); Tappa["hours"] = Convert.ToDouble(0); return; } double ddatainizio = datainizio.ToOADate(); double ddatafine = datafine.ToOADate(); int ngiorni = 0; int ngiorniparziali = Convert.ToInt32(Math.Floor(ddatafine) - Math.Ceiling(ddatainizio)); int ngiorniinteri = Convert.ToInt32(Math.Floor(ddatafine - ddatainizio)); int nore = Convert.ToInt32( Math.Floor( (ddatafine - ddatainizio - Math.Floor(ddatafine - ddatainizio)) * 24.0 + 0.5 )); if (Tappa["flagitalian"].ToString().ToLower() != "s") { double XX = (ddatainizio - Math.Floor(ddatainizio)); //int norestart=24 - Convert.ToInt32( XX*24.0); int norestart = (24 - Convert.ToInt32(XX * 24.0)) % 24; int norestop = Convert.ToInt32((ddatafine - Math.Floor(ddatafine)) * 24.0); if (Math.Floor(ddatafine) == Math.Floor(ddatainizio)) { norestart = nore; norestop = 0; ngiorniparziali = 0; } if ((norestart >= oreestero) && (norestart > 0)) { ngiorniparziali++; norestart = 0; nore = 0; } if ((norestop >= oreestero) && (norestop > 0)) { ngiorniparziali++; norestop = 0; nore = 0; } ngiorni = ngiorniparziali; if ((norestart >= oreestero) || (norestop >= oreestero)) { nore = 0; } } else { ngiorni = ngiorniinteri; } Tappa["days"] = Convert.ToDouble(ngiorni); Tappa["hours"] = Convert.ToDouble(nore); }
public static decimal TotaleImponibileNonEsenteSpese(DataTable Spesa, DataTable TipoSpesa, CfgItineration Cfg) { decimal tot = 0; CQueryHelper QHC = new CQueryHelper(); foreach (DataRow R in Spesa.Select()) { object iditinerationrefundkind = R["iditinerationrefundkind"]; if (iditinerationrefundkind == DBNull.Value) { continue; } DataRow[] r = TipoSpesa.Select(QHC.CmpEq("iditinerationrefundkind", iditinerationrefundkind)); if (r.Length == 0) { continue; } if (CfgFn.GetNoNullInt32(r[0]["iditinerationrefundkindgroup"]) != 5) { continue; //non è un rimborso forfettario } decimal IndennitaTot = CfgFn.GetNoNullDecimal(R["amount"]); decimal QuotaEsente = IF_QuotaEsente((DateTime)R["starttime"], (DateTime)R["stoptime"], Cfg, IndennitaTot); if ((IndennitaTot - QuotaEsente) > 0) { tot += CfgFn.RoundValuta(IndennitaTot - QuotaEsente); } } return(tot); }
public static decimal IF_TotQuoteImponibiliSpese(DataTable Spese, DataTable TipoSpese, CfgItineration Cfg) { decimal SUM = 0; CQueryHelper QHC = new CQueryHelper(); foreach (DataRow Spesa in Spese.Select()) { SUM += IF_ImponibileSpesa(Spesa, TipoSpese, Cfg); } return(SUM); }
public static decimal IF_TotQuoteEsentiSpese(DataTable Spese, DataTable TipoSpesa, CfgItineration Cfg) { CQueryHelper QHC = new CQueryHelper(); decimal SUM = 0; foreach (DataRow Spesa in Spese.Select()) { object iditinerationrefundkind = Spesa["iditinerationrefundkind"]; if (iditinerationrefundkind == DBNull.Value) { continue; } DataRow[] r = TipoSpesa.Select(QHC.CmpEq("iditinerationrefundkind", iditinerationrefundkind)); if (r.Length == 0) { continue; } if (CfgFn.GetNoNullInt32(r[0]["iditinerationrefundkindgroup"]) != 5) { continue; //non è un rimborso forfettario } if (Spesa["starttime"] == DBNull.Value || Spesa["stoptime"] == DBNull.Value) { continue; } SUM += IF_QuotaEsente((DateTime)Spesa["starttime"], (DateTime)Spesa["stoptime"], Cfg, CfgFn.GetNoNullDecimal(Spesa["amount"])); } return(SUM); }