Example #1
0
        /// <summary>
        /// Registra un intercambio de unidad
        /// </summary>
        private void Registrar()
        {
            #region Se inicia la Transaccion
            dctx.SetCurrentProvider("Outsourcing");
            Guid firma = Guid.NewGuid();
            try {
                this.dctx.OpenConnection(firma);
                this.dctx.BeginTransaction(firma);
            } catch (Exception) {
                if (this.dctx.ConnectionState == ConnectionState.Open)
                {
                    this.dctx.CloseConnection(firma);
                }
                throw new Exception("Se encontraron inconsistencias al insertar el Contrato.");
            }
            #endregion

            try {
                //Se crea el objeto de seguridad
                UsuarioBO usuario = new UsuarioBO()
                {
                    Id = this.vista.UsuarioID
                };
                AdscripcionBO adscripcion = new AdscripcionBO()
                {
                    UnidadOperativa = new UnidadOperativaBO()
                    {
                        Id = this.vista.UnidadOperativaID
                    }
                };
                SeguridadBO seguridadBO = new SeguridadBO(Guid.Empty, usuario, adscripcion);

                //Se consulta la información del contrato
                ContratoPSLBO bo = (ContratoPSLBO)this.InterfazUsuarioADato();

                UnidadBO unidadNueva = new UnidadBO()
                {
                    UnidadID = this.vista.IntercambioUnidadID
                };
                unidadNueva = controladorUnidades.ConsultarCompleto(this.dctx, unidadNueva, true).FirstOrDefault();

                ContratoPSLBO contratoPrevio = new ContratoPSLBO(bo);
                if (bo.ObtenerLineaContrato() != null && bo.ObtenerLineaContrato().Equipo != null && bo.ObtenerLineaContrato().Equipo is UnidadBO &&
                    ((UnidadBO)bo.ObtenerLineaContrato().Equipo).UnidadID != null)
                {
                    //Se obtiene el ID de la unidad que será intercambiada
                    UnidadBO unidadActual = new UnidadBO()
                    {
                        UnidadID = this.vista.UnidadID
                    };
                    LineaContratoPSLBO linea = bo.ObtenerLineaContrato(unidadActual);

                    UnidadBO unidadBO = (UnidadBO)linea.Equipo;
                    if (unidadBO.UnidadID == this.vista.UnidadID)
                    {
                        linea.Activo = false;

                        //Agregar nueva línea al contrato
                        bo.LineasContrato.Add(this.ObtenerLineaContrato(linea, unidadNueva, bo));
                    }
                }
                ContratoPSLBO contratoModificado = bo;

                //Generamos objeto tipo anexo
                AnexosContratoPSLBO anexo = new AnexosContratoPSLBO();
                anexo.FechaIntercambioUnidad  = this.vista.FechaIntercambio;
                anexo.MontoTotalArrendamiento = contratoModificado.MontoTotalArrendamiento;
                anexo.TipoAnexoContrato       = ETipoAnexoContrato.Intercambio;
                anexo.Vigente       = true;
                anexo.ContratoPSLID = contratoModificado.ContratoID;
                anexo.FC            = this.vista.FC;
                anexo.FUA           = this.vista.FUA;
                anexo.UC            = this.vista.UC;
                anexo.UUA           = this.vista.UUA;
                contratoModificado.AnexosContrato.Add(anexo);

                #region Archivos Adjuntos
                List <ArchivoBO> adjuntos = presentadorDocumentos.Vista.ObtenerArchivos() ?? new List <ArchivoBO>();
                foreach (ArchivoBO adjunto in adjuntos)
                {
                    if (contratoModificado.Tipo == ETipoContrato.RO)
                    {
                        adjunto.TipoAdjunto = ETipoAdjunto.ContratoRO;
                    }
                    if (contratoModificado.Tipo == ETipoContrato.ROC)
                    {
                        adjunto.TipoAdjunto = ETipoAdjunto.ContratoROC;
                    }
                    if (contratoModificado.Tipo == ETipoContrato.RE)
                    {
                        adjunto.TipoAdjunto = ETipoAdjunto.ContratoRE;
                    }
                    if (contratoModificado.Tipo == ETipoContrato.RD)
                    {
                        adjunto.TipoAdjunto = ETipoAdjunto.ContratoRD;
                    }
                    if (contratoModificado.Tipo == ETipoContrato.FSL)
                    {
                        adjunto.TipoAdjunto = ETipoAdjunto.ContratoFSL;
                    }
                    if (contratoModificado.Tipo == ETipoContrato.CM)
                    {
                        adjunto.TipoAdjunto = ETipoAdjunto.ContratoMantenimiento;
                    }
                    if (contratoModificado.Tipo == ETipoContrato.SD)
                    {
                        adjunto.TipoAdjunto = ETipoAdjunto.ContratoServicioDedicado;
                    }

                    adjunto.Auditoria = new AuditoriaBO
                    {
                        FC  = this.vista.FC,
                        UC  = this.vista.UC,
                        FUA = this.vista.FUA,
                        UUA = this.vista.UUA
                    };
                }
                contratoModificado.DocumentosAdjuntos = adjuntos;
                #endregion

                this.controlador.ActualizarCompleto(this.dctx, contratoModificado, contratoPrevio, seguridadBO);
                this.vista.UltimoObjeto = contratoModificado;

                #region Recuperar ID del la línea agregada
                LineaContratoPSLBO lineaNueva = contratoModificado.LineasContrato
                                                .ConvertAll(l => (LineaContratoPSLBO)l)
                                                .FirstOrDefault(lc => lc.Equipo.EquipoID == this.vista.IntercambioEquipoID);

                if (lineaNueva != null)
                {
                    this.lineaContratoID = lineaNueva.LineaContratoID;
                }
                #endregion /Recuperar ID

                dctx.CommitTransaction(firma);
            } catch (Exception ex) {
                dctx.RollbackTransaction(firma);
                throw new Exception(this.nombreClase + ".Registrar:" + ex.Message);
            } finally {
                if (dctx.ConnectionState == ConnectionState.Open)
                {
                    dctx.CloseConnection(firma);
                }
            }
        }
        /// <summary>
        /// Registra un Contrato RO
        /// </summary>
        private void Registrar()
        {
            #region Se inicia la Transaccion
            dctx.SetCurrentProvider("Outsourcing");
            Guid firma = Guid.NewGuid();
            try {
                dctx.OpenConnection(firma);
                dctx.BeginTransaction(firma);
            } catch (Exception) {
                if (dctx.ConnectionState == ConnectionState.Open)
                {
                    dctx.CloseConnection(firma);
                }
                throw new Exception("Se encontraron inconsistencias al insertar el Contrato.");
            }
            #endregion

            try {
                //Se obtiene la información a partir de la Interfaz de Usuario
                ContratoPSLBO bo = (ContratoPSLBO)this.InterfazUsuarioADato();
                if (bo.Estatus == EEstatusContrato.EnPausa)
                {
                    #region LLenar el anexo por cambios en la renovación.
                    AnexosContratoPSLBO anexo = new AnexosContratoPSLBO();
                    anexo.FechaInicio             = bo.FechaInicioActual;
                    anexo.FechaFin                = bo.FechaPromesaActual;
                    anexo.FechaIntercambioUnidad  = null;
                    anexo.MontoTotalArrendamiento = bo.MontoTotalArrendamiento;
                    anexo.TipoAnexoContrato       = ETipoAnexoContrato.Contrato;
                    anexo.Vigente       = true;
                    anexo.ContratoPSLID = this.vista.ContratoID;
                    anexo.FC            = this.vista.FUA;
                    anexo.FUA           = this.vista.FUA;
                    anexo.UC            = this.vista.UUA;
                    anexo.UUA           = this.vista.UUA;

                    ArchivoBO archivo = new ArchivoBO();
                    archivo.Activo    = true;
                    archivo.Auditoria = new AuditoriaBO {
                        FC = this.vista.FUA, FUA = this.vista.FUA, UC = this.vista.UUA, UUA = this.vista.UUA
                    };
                    archivo.TipoAdjunto = ETipoAdjunto.AnexoContrato;
                    archivo.TipoArchivo = this.presentadorDocumentos.Vista.TiposArchivo.Find(x => x.Extension.ToUpper() == "PDF");

                    Random random = new Random();
                    archivo.Nombre      = "Anexo_" + DateTime.Now.ToShortDateString().Replace("/", string.Empty) + random.Next(99999).ToString() + ".pdf";
                    archivo.NombreCorto = archivo.Nombre;

                    Dictionary <string, object> dataSources = new Dictionary <string, object>();
                    #region Consulta periodoTarifario.
                    List <DiaPeriodoTarifaBO> lstTemp         = new List <DiaPeriodoTarifaBO>();
                    DiaPeriodoTarifaBR        periodoTarifaBR = new DiaPeriodoTarifaBR();
                    lstTemp = periodoTarifaBR.Consultar(dctx, new DiaPeriodoTarifaBO()
                    {
                        UnidadOperativaID = this.vista.UnidadOperativaID
                    });
                    if (lstTemp.Count == 1)
                    {
                        dataSources.Add("PeriodoTarifa", lstTemp[0]);
                    }
                    if (!string.IsNullOrEmpty(bo.Divisa.MonedaDestino.Codigo))
                    {
                        MonedaBO moneda = FacadeBR.ConsultarMoneda(this.dctx, new MonedaBO()
                        {
                            Codigo = bo.Divisa.MonedaDestino.Codigo
                        }).FirstOrDefault();
                        dataSources.Add("Moneda", moneda);
                    }
                    #endregion
                    dataSources["ContratoPSLBO"] = bo;
                    ContratoAnexoROCRPT reporteCorrectivo = new ContratoAnexoROCRPT(dataSources);
                    using (MemoryStream stream = new MemoryStream()) {
                        reporteCorrectivo.CreateDocument();
                        reporteCorrectivo.ExportToPdf(stream);
                        archivo.Archivo = stream.GetBuffer();
                    }
                    anexo.AgregarAnexo(archivo);
                    bo.AgregarAnexoContrato(anexo);
                    #endregion

                    #region Llenando información del pago
                    GeneradorPagoPSLBR generadorPago = new GeneradorPagoPSLBR();
                    //Cuando se genera el pago se llenan los campos de acumulados de tarifas
                    generadorPago.ObtenerPagos(new PagoContratoPSLBO(), bo, null, 0, ETipoPago.NORMAL);
                    #endregion
                }

                //Se crea el objeto de seguridad
                UsuarioBO usuario = new UsuarioBO()
                {
                    Id = this.vista.UsuarioID
                };
                AdscripcionBO adscripcion = new AdscripcionBO()
                {
                    UnidadOperativa = new UnidadOperativaBO()
                    {
                        Id = this.vista.UnidadOperativaID
                    }
                };
                SeguridadBO seguridadBO = new SeguridadBO(Guid.Empty, usuario, adscripcion);

                //Se inserta en la base de datos
                this.controlador.InsertarCompleto(this.dctx, bo, seguridadBO);
                //Se consulta lo insertado para recuperar los ID
                DataSet ds = this.controlador.ConsultarSet(this.dctx, bo);
                if (ds.Tables[0].Rows.Count <= 0)
                {
                    throw new Exception("Al consultar lo insertado no se encontraron coincidencias.");
                }
                if (ds.Tables[0].Rows.Count > 1)
                {
                    throw new Exception("Al consultar lo insertado se encontró más de una coincidencia.");
                }

                bo.ContratoID = this.controlador.DataRowToContratoPSLBO(ds.Tables[0].Rows[0]).ContratoID;

                //El proceso de generación de pagos es eliminado de esta sección
                dctx.CommitTransaction(firma);

                //Se despliega la información en la Interfaz de Usuario
                this.DatoAInterfazUsuario(bo);
            } catch (Exception ex) {
                dctx.RollbackTransaction(firma);
                throw new Exception(this.nombreClase + ".Registrar:" + ex.Message);
            } finally {
                if (dctx.ConnectionState == ConnectionState.Open)
                {
                    dctx.CloseConnection(firma);
                }
            }
        }