/// <summary>
        /// Inserta un CabeceraGV
        /// </summary>
        internal int Insert(Models.CabeceraGV oCabeceraGV)
        {
            try
            {
                SqlParameter[] dbparams = new SqlParameter[35] {
                    Param(enumDBFields.t431_idestado, oCabeceraGV.t431_idestado),
                    Param(enumDBFields.t420_concepto, oCabeceraGV.t420_concepto),
                    Param(enumDBFields.t001_idficepi_solicitante, oCabeceraGV.t001_idficepi_solicitante),
                    Param(enumDBFields.t314_idusuario_interesado, oCabeceraGV.t314_idusuario_interesado),
                    Param(enumDBFields.t423_idmotivo, oCabeceraGV.t423_idmotivo),
                    Param(enumDBFields.t420_justificantes, oCabeceraGV.t420_justificantes),
                    Param(enumDBFields.t305_idproyectosubnodo, oCabeceraGV.t305_idproyectosubnodo),
                    Param(enumDBFields.t422_idmoneda, oCabeceraGV.t422_idmoneda),
                    Param(enumDBFields.t420_comentarionota, oCabeceraGV.t420_comentarionota),
                    Param(enumDBFields.t420_anotaciones, oCabeceraGV.t420_anotaciones),
                    Param(enumDBFields.t420_importeanticipo, oCabeceraGV.t420_importeanticipo),
                    Param(enumDBFields.t420_fanticipo, oCabeceraGV.t420_fanticipo),
                    Param(enumDBFields.t420_lugaranticipo, oCabeceraGV.t420_lugaranticipo),
                    Param(enumDBFields.t420_importedevolucion, oCabeceraGV.t420_importedevolucion),
                    Param(enumDBFields.t420_fdevolucion, oCabeceraGV.t420_fdevolucion),
                    Param(enumDBFields.t420_lugardevolucion, oCabeceraGV.t420_lugardevolucion),
                    Param(enumDBFields.t420_aclaracionesanticipo, oCabeceraGV.t420_aclaracionesanticipo),
                    Param(enumDBFields.t420_pagadotransporte, oCabeceraGV.t420_pagadotransporte),
                    Param(enumDBFields.t420_pagadohotel, oCabeceraGV.t420_pagadohotel),
                    Param(enumDBFields.t420_pagadootros, oCabeceraGV.t420_pagadootros),
                    Param(enumDBFields.t420_aclaracionepagado, oCabeceraGV.t420_aclaracionepagado),
                    Param(enumDBFields.t313_idempresa, oCabeceraGV.t313_idempresa),
                    Param(enumDBFields.t007_idterrfis, oCabeceraGV.t007_idterrfis),
                    Param(enumDBFields.t420_impdico, oCabeceraGV.t420_impdico),
                    Param(enumDBFields.t420_impmdco, oCabeceraGV.t420_impmdco),
                    Param(enumDBFields.t420_impalco, oCabeceraGV.t420_impalco),
                    Param(enumDBFields.t420_impkmco, oCabeceraGV.t420_impkmco),
                    Param(enumDBFields.t420_impdeco, oCabeceraGV.t420_impdeco),
                    Param(enumDBFields.t420_impdiex, oCabeceraGV.t420_impdiex),
                    Param(enumDBFields.t420_impmdex, oCabeceraGV.t420_impmdex),
                    Param(enumDBFields.t420_impalex, oCabeceraGV.t420_impalex),
                    Param(enumDBFields.t420_impkmex, oCabeceraGV.t420_impkmex),
                    Param(enumDBFields.t420_impdeex, oCabeceraGV.t420_impdeex),
                    Param(enumDBFields.t010_idoficina, oCabeceraGV.t010_idoficina),
                    Param(enumDBFields.t420_idreferencia_lote, oCabeceraGV.t420_idreferencia_lote)
                    //,Param(enumDBFields.t175_idcc, oCabeceraGV.t175_idcc)
                };

                //return (int)cDblib.Execute("GVT_CABECERAGV_INS", dbparams);
                return((int)cDblib.ExecuteScalar("GVT_CABECERAGV_INS", dbparams));
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Exemplo n.º 2
0
        public int grabar(Models.CabeceraGV cabecera, List <Models.LineaGV> lineas)
        {
            int  idReferencia;
            bool bConTransaccion = false;
            Guid methodOwnerID   = new Guid("5590F1B4-7073-4B5F-A4DB-9F301648D151");
            //DOARHUMI 08/01/2018 Comprobaciones sobre las posiciones
            AnnoGasto oAnno             = new AnnoGasto();
            UsuarioProyectoSubNodo oPSN = new UsuarioProyectoSubNodo();
            PosicionGV             oECO = new PosicionGV();

            OpenDbConn();
            if (cDblib.Transaction.ownerID.Equals(new Guid()))
            {
                bConTransaccion = true;
            }
            if (bConTransaccion)
            {
                cDblib.beginTransaction(methodOwnerID);
            }
            try
            {
                //DOARHUMI 08/01/2018 Comprobaciones sobre las posiciones
                Hashtable htAnnoGasto  = oAnno.ObtenerHTAnnoGasto();
                Hashtable htUsuarioPSN = oPSN.ObtenerFechasAsociacionPSN(cabecera.t314_idusuario_interesado);

                if (cabecera.t423_idmotivo == 1) //Si motivo proyecto
                {
                    if ((DateTime?[])htUsuarioPSN[cabecera.t305_idproyectosubnodo] == null)
                    {
                        throw (new Exception("Tramitación denegada.\n\nEl beneficiario no se encuentra asociado al proyecto."));
                    }
                    else
                    {
                    }
                }

                DAL.CabeceraGV oCab = new DAL.CabeceraGV(cDblib);
                idReferencia = oCab.Insert(cabecera);

                //Si el beneficiario es autorresponsable, comprobaciones de motivos, excepciones, etc, para pasar la nota a aprobada.
                //En realidad, por ser motivo=Proyecto no se va a autoaprobar sino que quedara en manos del profesional indicado en el proyecto
                //pero lo dejo por si algun dia cambia el criterio, y asi no tendremos que acordarnos de tocar este codigo
                if (cabecera.autoResponsable)
                {
                    oCab.GestionarAutorresponsabilidad(idReferencia);
                }


                foreach (Models.LineaGV oLinea in lineas)
                {
                    //DOARHUMI 08/01/2018 Comprobaciones sobre las posiciones
                    DateTime oAuxiliar = oLinea.desde;
                    DateTime oDesde    = oLinea.desde;
                    DateTime oHasta    = oLinea.hasta;
                    DateTime oDesdePSN;
                    DateTime?oHastaPSN = null;

                    oLinea.idCabecera = idReferencia;

                    do
                    {
                        #region Comprobaciones de fechas
                        if ((DateTime[])htAnnoGasto[oAuxiliar.Year] == null)
                        {
                            throw (new Exception("Tramitación denegada.\n\nNo se pueden tramitar gastos correspondientes al año " + oAuxiliar.Year.ToString()));
                        }
                        else
                        {
                            if (oAuxiliar < ((DateTime[])htAnnoGasto[oAuxiliar.Year])[0])
                            {
                                throw (new Exception("Tramitación denegada.\n\nHasta el día " + ((DateTime[])htAnnoGasto[oAuxiliar.Year])[0].ToShortDateString() + " no se permite tramitar gastos correspondientes al año " + oAuxiliar.Year.ToString()));
                            }
                            else if (oAuxiliar > ((DateTime[])htAnnoGasto[oAuxiliar.Year])[1])
                            {
                                throw (new Exception("Tramitación denegada.\n\nSe ha superado la fecha límite establecida para tramitar gastos correspondientes al año " + oAuxiliar.Year.ToString() + " (" + ((DateTime[])htAnnoGasto[oAuxiliar.Year])[1].ToShortDateString() + ")"));
                            }
                        }
                        if (cabecera.t423_idmotivo == 1) //Si motivo proyecto
                        {
                            oDesdePSN = (DateTime)((DateTime?[])htUsuarioPSN[cabecera.t305_idproyectosubnodo])[0];
                            oHastaPSN = ((DateTime?[])htUsuarioPSN[cabecera.t305_idproyectosubnodo])[1];

                            if (oAuxiliar < oDesdePSN || (oHastaPSN != null && oAuxiliar > oHastaPSN))
                            {
                                throw (new Exception("Tramitación denegada.\n\nEl rango de fechas de la imputación (" + oDesde.ToShortDateString() + " - " + oHasta.ToShortDateString() + ") se encuentra fuera del rango de fechas de asociación al proyecto (" + oDesdePSN.ToShortDateString() + " - " + ((oHastaPSN != null) ? ((DateTime)oHastaPSN).ToShortDateString() : "") + ")"));
                            }
                        }
                        #endregion
                        #region  Comprobar que si se indica un desplazamiento ECO, se corresponda con un VUP
                        if (oLinea.idECO.ToString() != "")
                        {
                            if (!oECO.EsDesplazamientoECOenVUP((int)oLinea.idECO))
                            {
                                throw (new Exception("Tramitación denegada.\n\nEl desplazamiento correspondiente a las fechas (" + oLinea.desde.ToShortDateString() + " - " + oLinea.hasta.ToShortDateString() + ") con destino \"" + oLinea.destino + "\" se ha realizado en un coche de flota, por lo que no procede asociarlo a una solicitud GASVI."));
                            }
                        }
                        #endregion
                        oAuxiliar = oAuxiliar.AddDays(1);
                    } while (oAuxiliar <= oHasta);

                    DAL.LineaGV objLinea = new DAL.LineaGV(cDblib);
                    objLinea.Insert(oLinea);
                }

                if (bConTransaccion)
                {
                    cDblib.commitTransaction(methodOwnerID);
                }

                return(idReferencia);
            }
            catch (Exception ex)
            {
                //rollback
                if (cDblib.Transaction.ownerID.Equals(methodOwnerID))
                {
                    cDblib.rollbackTransaction(methodOwnerID);
                }
                throw new Exception(ex.Message);
            }
            finally
            {
                //nota.Dispose();
                oAnno.Dispose();
                oPSN.Dispose();
                oECO.Dispose();
            }
        }