示例#1
0
        /// <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);
        }
示例#2
0
        /// <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);
        }
示例#3
0
        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);
        }
示例#4
0
        /// <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);
            }
        }
示例#5
0
        /// <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);
            }
        }
示例#6
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);
            }
        }
示例#7
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);
        }
示例#8
0
        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);
        }
示例#9
0
        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);
        }
示例#10
0
        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);
        }