Exemplo n.º 1
0
        /// <summary>
        /// Guarda un contrato con estatus de En Curso
        /// </summary>
        public void GuardarContratoEnCurso()
        {
            string resultado = ValidarContratoEnCurso();

            if (!string.IsNullOrEmpty(resultado))
            {
                vista.MostrarMensaje(resultado, ETipoMensajeIU.INFORMACION);
                return;
            }

            #region Se inicia la Transaccion
            dataContext.SetCurrentProvider("Outsourcing");
            Guid firma = Guid.NewGuid();
            try
            {
                dataContext.OpenConnection(firma);
                dataContext.BeginTransaction(firma);
            }

            catch(Exception)
            {
                if(dataContext.ConnectionState == ConnectionState.Open)
                    dataContext.CloseConnection(firma);
                throw new Exception("Se encontraron inconsistencias al insertar el Contrato.");
            }
            #endregion

            try
            {
                ContratoFSLBO contrato = InterfazUsuarioADatos();
                contrato.Estatus = EEstatusContrato.EnCurso;
                
                int? contratoID=  GuardarContrato(contrato);
                if (contratoID != null)
                {
                    #region SC0001 BEP1401 - Registra los pagos del Contrato

                    contrato.ContratoID = contratoID;
                    GeneradorPagosFSLBR generadorPagosFsl = new GeneradorPagosFSLBR();

                    SeguridadBO seguridadBo = new SeguridadBO(Guid.Empty, new UsuarioBO { Id = this.vista.UsuarioID }, new AdscripcionBO
                    {
                        Departamento = new DepartamentoBO(),
                        Sucursal = new SucursalBO(),
                        UnidadOperativa = new UnidadOperativaBO { Id = this.vista.UnidadAdscripcionID }
                    });

                    generadorPagosFsl.GenerarPagos(dataContext, contrato, seguridadBo,true);

                    #endregion

                    dataContext.CommitTransaction(firma);

                    vista.EstablecerPaqueteNavegacion(vista.Clave, contrato);
                    vista.MostrarMensaje("Se ha guardado del contrato exitosamente.", ETipoMensajeIU.EXITO);
                    vista.IrADetalle();
                }
                else
                    vista.MostrarMensaje("Inconsistencias al intentar guardar el contrato.", ETipoMensajeIU.ADVERTENCIA);
            }
            catch (Exception ex)
            {
                dataContext.RollbackTransaction(firma);
                throw new Exception(nombreClase + ".GuardarContratoEnCurso:" + ex.Message);
            }
            finally
            {
                if(dataContext.ConnectionState == ConnectionState.Open)
                    dataContext.CloseConnection(firma);
            }
        }
        /// <summary>
        /// Metodo que genera el pago adicional
        /// </summary>
        public void GenerarPagoAdicional()
        {
            try
            {
                string validacion = this.ValidarPagoAdicional();
                if (!String.IsNullOrEmpty(validacion))
                {
                    this.vista.MostrarMensaje("No se puede generar el pago Adicional: " + validacion, ETipoMensajeIU.INFORMACION);
                    return;
                }

                ContratoBO        contratoBo     = null;
                IGeneradorPagosBR generadorPagos = null;
                SeguridadBO       seguridadBo    = this.CrearObjetoSeguridad();
                List <ContratoBO> contratos      = new List <ContratoBO>();
                switch (vista.TipoContrato)
                {
                case ETipoContrato.RD:
                    contratoBo = new ContratoRDBO {
                        ContratoID = this.vista.ContratoID
                    };
                    var contratosRd = new ContratoRDBR().ConsultarCompleto(this.dctx, (ContratoRDBO)contratoBo, false);
                    contratos.AddRange(contratosRd);
                    generadorPagos = new GeneradorPagoRDBR();
                    break;

                case ETipoContrato.FSL:
                    contratoBo = new ContratoFSLBO {
                        ContratoID = this.vista.ContratoID
                    };
                    var contratosFsl = new ContratoFSLBR().ConsultarCompleto(this.dctx, (ContratoFSLBO)contratoBo);
                    contratos.AddRange(contratosFsl);
                    generadorPagos = new GeneradorPagosFSLBR();
                    break;

                case ETipoContrato.CM:
                case ETipoContrato.SD:
                    contratoBo = new ContratoManttoBO {
                        ContratoID = this.vista.ContratoID
                    };
                    var contratosMantto = new ContratoManttoBR().ConsultarCompleto(this.dctx, (ContratoManttoBO)contratoBo, true, false);
                    contratos.AddRange(contratosMantto);
                    generadorPagos = new GeneradorPagosManttoBR();
                    break;
                }
                if (generadorPagos == null)
                {
                    throw new Exception("No se pudo determinar el Tipo del Pago a Generar.");
                }

                generadorPagos.GenerarPagoAdicional(this.dctx, contratos.First(), (ultimoPagoContrato.NumeroPago.Value + 1), seguridadBo, false, true);
                PagoUnidadContratoBO pagoBo = new PagoUnidadContratoBOF {
                    ReferenciaContrato = new ReferenciaContratoBO()
                    {
                        ReferenciaContratoID = this.vista.ContratoID
                    }
                };
                PagoUnidadContratoBR pagoBr = new PagoUnidadContratoBR();
                var pagos = pagoBr.Consultar(this.dctx, (PagoUnidadContratoBO)pagoBo);

                this.Inicializar();

                this.vista.MostrarMensaje("El pago " + pagos.Last().NumeroPago.ToString() + " con Fecha " + pagos.Last().FechaVencimiento.Value.ToShortDateString() + " se ha Creado con Éxito.", ETipoMensajeIU.EXITO);
            }
            catch (Exception ex)
            {
                this.vista.MostrarMensaje("Error al generar el pago Adicional", ETipoMensajeIU.ERROR, NombreClase + ".GenerarPagoAdicional: " + ex.GetBaseException().Message);
            }
        }
        /// <summary>
        /// Actualiza el cierre de un contrato Full Service Leasing
        /// </summary>
        public void CerrarContrato()
        {
            Guid firma = Guid.NewGuid();

            try
            {
                string resultado = finalizacionPRE.ValidarDatosCierre();
                if (!string.IsNullOrEmpty(resultado))
                {
                    vista.MostrarMensaje(resultado, ETipoMensajeIU.INFORMACION);
                    return;
                }
            }
            catch (Exception ex)
            {
                throw new Exception(nombreClase + ".CerrarContrato:" + ex.Message);
            }
            try
            {
                #region Transaccion

                dataContext.SetCurrentProvider("Outsourcing");
                dataContext.OpenConnection(firma);
                dataContext.BeginTransaction(firma);

                #endregion

                ContratoFSLBO anterior = vista.UltimoObjeto;
                ContratoFSLBO actual   = InterfazUsuarioADatos();
                actual.FC      = anterior.FC;
                actual.UC      = anterior.UC;
                actual.Estatus = EEstatusContrato.EnCurso;
                var contratoBR = new ContratoFSLBR();

                var seguridadBO = new SeguridadBO(Guid.Empty, new UsuarioBO {
                    Id = vista.UsuarioID
                }, new AdscripcionBO
                {
                    Departamento    = new DepartamentoBO(),
                    Sucursal        = new SucursalBO(),
                    UnidadOperativa = new UnidadOperativaBO {
                        Id = vista.UnidadAdscripcionID
                    }
                });

                // Determinar si es Cierre anticipado
                bool cierreAnticipado = actual.CierreAnticipado();

                // Terminar el Contrato
                contratoBR.Terminar(dataContext, actual, anterior, seguridadBO, cierreAnticipado);


                if (cierreAnticipado)
                {
                    // Cancelar los pagos restantes
                    var pagosFaltantes = ObtenerPagos(anterior, (DateTime)actual.CierreContrato.Fecha);
                    var pagoBR         = new PagoUnidadContratoBR();
                    foreach (var faltante in pagosFaltantes)
                    {
                        //SC0026, Generación de clase concreta segun el tipo de contrato
                        var cancelado = new PagoUnidadContratoFSLBO(faltante)
                        {
                            Activo = false
                        };
                        cancelado.Auditoria.FUA = vista.FUA;
                        cancelado.Auditoria.UUA = vista.UUA;
                        pagoBR.Actualizar(dataContext, cancelado, faltante, seguridadBO);
                    }
                }


                var generadorPagoBR = new GeneradorPagosFSLBR();

                // Calcular Ultimo Pago
                var pago      = UltimoPago(anterior.ContratoID);
                var nuevoPago = ++pago;

                // Generar los pagos adicionales
                generadorPagoBR.GenerarPagoAdicional(dataContext, actual, nuevoPago, seguridadBO, true, true);

                dataContext.CommitTransaction(firma);

                RegresarADetalles();
            }
            catch (Exception ex)
            {
                dataContext.RollbackTransaction(firma);
                throw new Exception(nombreClase + ".CerrarContrato:" + ex.Message);
            }
            finally
            {
                if (dataContext.ConnectionState == ConnectionState.Open)
                {
                    dataContext.CloseConnection(firma);
                }
            }
        }