Exemplo n.º 1
0
        public JsonResult InviaFlussiMensili(decimal idAnnoMeseElaborato)
        {
            List <DIPENDENTI> lDip = new List <DIPENDENTI>();

            try
            {
                using (ModelDBISE db = new ModelDBISE())
                {
                    //var te =
                    //    db.TEORICI.Where(a => a.ANNULLATO == false && a.ELABINDSISTEMAZIONE.IDLIVELLO == 1).ToList();


                    db.Database.BeginTransaction();

                    using (dtElaborazioni dte = new dtElaborazioni())
                    {
                        try
                        {
                            List <decimal> lTeorici = new List <decimal>();


                            #region Lettura dati Prima sistemazione
                            List <decimal> lt1 = (from t in db.TEORICI
                                                  where t.ANNULLATO == false &&
                                                  t.IDMESEANNOELAB == idAnnoMeseElaborato &&
                                                  t.ELABINDSISTEMAZIONE.ANNULLATO == false &&
                                                  (t.VOCI.IDVOCI == (decimal)EnumVociCedolino.Sistemazione_Lorda_086_380 ||
                                                   t.VOCI.IDVOCI == (decimal)EnumVociCedolino.Sistemazione_Richiamo_Netto_086_383 ||
                                                   t.VOCI.IDVOCI == (decimal)EnumVociCedolino.Detrazione_086_384 ||
                                                   t.VOCI.IDVOCI == (decimal)EnumVociContabili.Ind_Prima_Sist_IPS) &&
                                                  t.DIRETTO == false && t.INSERIMENTOMANUALE == false
                                                  select t.IDTEORICI).ToList();

                            if (lt1?.Any() ?? false)
                            {
                                lTeorici.AddRange(lt1);
                            }
                            #endregion

                            #region Lettura dati indennità sede estera
                            List <decimal> lt2 = (from t in db.TEORICI
                                                  where t.ANNULLATO == false && t.INSERIMENTOMANUALE == false &&
                                                  t.IDMESEANNOELAB == idAnnoMeseElaborato &&
                                                  t.ELABINDENNITA.Any(b => b.ANNULLATO == false) &&
                                                  t.DIRETTO == false &&
                                                  t.VOCI.IDTIPOLIQUIDAZIONE == (decimal)EnumTipoLiquidazione.Contabilità &&
                                                  t.VOCI.IDVOCI == (decimal)EnumVociContabili.Ind_Sede_Estera
                                                  select t.IDTEORICI).ToList();


                            if (lt2?.Any() ?? false)
                            {
                                lTeorici.AddRange(lt2);
                            }
                            #endregion


                            #region Lettura dei dati trasporto effetti
                            List <decimal> lt3 = (from t in db.TEORICI
                                                  where t.ANNULLATO == false && t.INSERIMENTOMANUALE == false &&
                                                  t.IDMESEANNOELAB == idAnnoMeseElaborato &&
                                                  t.ELABTRASPEFFETTI.ANNULLATO == false &&
                                                  t.VOCI.IDTIPOLIQUIDAZIONE == (decimal)EnumTipoLiquidazione.Paghe &&
                                                  t.VOCI.IDTIPOVOCE == (decimal)EnumTipoVoce.Software &&
                                                  t.VOCI.IDVOCI == (decimal)EnumVociCedolino.Trasp_Mass_Partenza_Rientro_162_131 &&
                                                  t.DIRETTO == false
                                                  select t.IDTEORICI).ToList();


                            if (lt3?.Any() ?? false)
                            {
                                lTeorici.AddRange(lt3);
                            }
                            #endregion

                            #region Lettura dei dati MAB
                            List <decimal> lt4 = (from a in db.TEORICI
                                                  where a.ANNULLATO == false && a.INSERIMENTOMANUALE == false &&
                                                  a.IDMESEANNOELAB == idAnnoMeseElaborato &&
                                                  a.VOCI.IDTIPOLIQUIDAZIONE == (decimal)EnumTipoLiquidazione.Contabilità &&
                                                  a.VOCI.IDVOCI == (decimal)EnumVociContabili.MAB &&
                                                  a.DIRETTO == false &&
                                                  a.ELABMAB.Any(b => b.ANNULLATO == false)
                                                  select a.IDTEORICI).ToList();

                            if (lt4?.Any() ?? false)
                            {
                                lTeorici.AddRange(lt4);
                            }
                            #endregion

                            #region Lettura dati voci manuali

                            List <decimal> lt5 = (from a in db.TEORICI
                                                  where a.ANNULLATO == false && a.INSERIMENTOMANUALE == true &&
                                                  a.IDMESEANNOELAB == idAnnoMeseElaborato &&
                                                  (a.VOCI.IDTIPOLIQUIDAZIONE == (decimal)EnumTipoLiquidazione.Paghe ||
                                                   a.VOCI.IDTIPOLIQUIDAZIONE == (decimal)EnumTipoLiquidazione.Contabilità) &&
                                                  a.DIRETTO == false &&
                                                  a.ELABORATO == false
                                                  select a.IDTEORICI).ToList();

                            if (lt5?.Any() ?? false)
                            {
                                lTeorici.AddRange(lt5);
                            }
                            #endregion

                            #region Lettura dati Richiamo
                            List <decimal> lt6 = (from t in db.TEORICI
                                                  where t.ANNULLATO == false &&
                                                  t.IDMESEANNOELAB == idAnnoMeseElaborato &&
                                                  t.ELABINDRICHIAMO.ANNULLATO == false &&
                                                  (t.VOCI.IDVOCI == (decimal)EnumVociCedolino.Rientro_Lordo_086_381 ||
                                                   t.VOCI.IDVOCI == (decimal)EnumVociCedolino.Sistemazione_Richiamo_Netto_086_383 ||
                                                   t.VOCI.IDVOCI == (decimal)EnumVociCedolino.Detrazione_086_384 ||
                                                   t.VOCI.IDVOCI == (decimal)EnumVociContabili.Ind_Richiamo_IRI) &&
                                                  t.DIRETTO == false && t.INSERIMENTOMANUALE == false
                                                  select t.IDTEORICI).ToList();

                            if (lt6?.Any() ?? false)
                            {
                                lTeorici.AddRange(lt6);
                            }
                            #endregion

                            lTeorici = lTeorici.OrderBy(a => a).ToList();

                            List <ElencoDipendentiDaCalcolareModel> ledcm = new List <ElencoDipendentiDaCalcolareModel>();

                            ledcm = dte.PrelevaDipendentiDaElaborare(idAnnoMeseElaborato).ToList();
                            if (ledcm?.Any() ?? false)
                            {
                                lDip = dte.EstrapolaDipendentiDaTeorici(lTeorici, db).ToList();

                                foreach (var edcm in ledcm)
                                {
                                    if (!lDip?.Any(a => a.IDDIPENDENTE == edcm.idDipendente) ?? false)
                                    {
                                        throw new Exception("Prima di inviare i flussi è necessario effettuare l'elaborazione di tutti i dipendenti interessati al calcolo mensile.");
                                    }
                                }

                                foreach (decimal teorico in lTeorici)
                                {
                                    using (ModelDBISE db2 = new ModelDBISE())
                                    {
                                        var dip = dte.EstrapolaDipendenteDaTeorico(teorico, db2);

                                        if (!dip.ELABORAZIONI?.Any(a => a.IDMESEANNOELAB == idAnnoMeseElaborato) ?? false)
                                        {
                                            dte.InviaFlussiMensiliCedoCont(idAnnoMeseElaborato, teorico, db2);
                                        }
                                    }
                                }

                                using (dtInvioFileFTP dtFile = new dtInvioFileFTP())
                                {
                                    dtFile.FlUpload(lTeorici);
                                }

                                using (dtDipendenti dtd = new dtDipendenti())
                                {
                                    foreach (var dip in lDip)
                                    {
                                        dte.SetPeriodoElaborazioniDipendente(dip.IDDIPENDENTE, idAnnoMeseElaborato, db);
                                        dtd.SetLastMeseElabDataInizioRicalcoli(dip.IDDIPENDENTE, idAnnoMeseElaborato, db, true);
                                    }
                                }
                                dte.ChiudiPeridoElaborazione(idAnnoMeseElaborato, db);
                                dte.EliminaTeoriciAnnullati(3);
                            }

                            db.Database.CurrentTransaction.Commit();
                        }
                        catch (Exception ex)
                        {
                            db.Database.CurrentTransaction.Rollback();
                            throw ex;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                return(Json(new { msg = "", err = ex.Message }));
            }

            return(Json(new { msg = "I flussi mensili sono stati inviati.", err = "" }));
        }