/// <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); } } }