public EditarPeriodoTarifarioPSLPRE(IEditarPeriodoTarifarioPSLVIS vistaActual, IucPeriodoTarifarioPSLVIS vistaTarifa)
 {
     try {
         this.vista = vistaActual;
         presentadorPeriodoTarifario = new ucPeriodoTarifarioPSLPRE(vistaTarifa);
         periodoTarifaBR             = new DiaPeriodoTarifaBR();
         dctx = FacadeBR.ObtenerConexion();
     } catch (Exception ex) {
         this.MostrarMensaje("Inconsistencias al configurar el presentador", ETipoMensajeIU.ERROR, nombreClase + ".EditarTarifaPSLPRE:" + ex.Message);
     }
 }
        private DiaPeriodoTarifaBO ConsultarTarifa(DiaPeriodoTarifaBO periodoTarifa)
        {
            try {
                if (periodoTarifa == null)
                {
                    throw new Exception("Se esperaba el objeto PeriodoTarifaPSLBO");
                }
                if (periodoTarifa.UnidadOperativaID == null)
                {
                    throw new Exception("Se necesita el identificador de la Unidad Operativa para ver el Período Tarifario");
                }

                List <DiaPeriodoTarifaBO> lstTemp = new List <DiaPeriodoTarifaBO>();
                periodoTarifaBR = new DiaPeriodoTarifaBR();
                lstTemp         = periodoTarifaBR.ConsultarCompleto(dctx, periodoTarifa);
                if (lstTemp.Count == 0)
                {
                    #region Si no existe un registro en la DB, es porque se agregó la UO pero no se ha configurado
                    #region Obtener la seguridad
                    UsuarioBO usr = new UsuarioBO {
                        Id = this.vista.UsuarioID
                    };
                    AdscripcionBO adscripcion = new AdscripcionBO {
                        UnidadOperativa = new UnidadOperativaBO {
                            Id = this.vista.UnidadOperativaID
                        }
                    };
                    SeguridadBO seguridadBO = new SeguridadBO(Guid.Empty, usr, adscripcion);
                    #endregion
                    #region Asignar valores default para insertar
                    periodoTarifa.IncluyeSD           = false;
                    periodoTarifa.DiasDuracionSemana  = 0;
                    periodoTarifa.DiasDuracionMes     = 0;
                    periodoTarifa.InicioPeriodoDia    = 1;
                    periodoTarifa.InicioPeriodoSemana = 0;
                    periodoTarifa.InicioPeriodoMes    = 0;
                    periodoTarifa.Auditoria           = new AuditoriaBO()
                    {
                        UC = this.vista.UsuarioID, FC = DateTime.Now, UUA = this.vista.UsuarioID, FUA = DateTime.Now
                    };
                    #endregion
                    periodoTarifaBR.InsertarCompleto(dctx, periodoTarifa, seguridadBO);
                    #endregion
                }
                if (lstTemp.Count > 1)
                {
                    throw new Exception("Inconsistencias en los registros de la base datos, se encontro mas de un registro de la tarifa que desea buscar");
                }
                return(lstTemp[0]);
            } catch (Exception ex) {
                throw new Exception(nombreClase + ".ConsultarPeriodoTarifario:Inconsistencias al consultar los datos del Período Tarifario." + ex.Message);
            }
        }
 /// <summary>
 /// Calcula la duración días periodo dependiendo de los campos Periodo Unidad Operativa
 /// </summary>
 public void CalcularPeriodoTarifa()
 {
     try {
         if (this.vista.PeriodoTarifa != null)
         {
             DiaPeriodoTarifaBR DiaPerioBR = new DiaPeriodoTarifaBR();
             this.vista.DuracionDiasPeriodo = DiaPerioBR.ObtenerPeriodoTarifa(this.dataContext, this.vista.UnidadOperativaID, (EPeriodosTarifa)this.vista.PeriodoTarifa);
             CalcularTarifas();
         }
     } catch {
         throw new Exception(this.nombreClase + ".CalcularPeriodoTarifa: Error al obtener la duración días periodo");
     }
 }
 /// <summary>
 /// Calcula el MaximoHrsTurno dependiendo de los campos Periodo, Tarifa Turno y Unidad Operativa
 /// </summary>
 public void CalcularMaximoHrsTurno()
 {
     try {
         if (this.vista.PeriodoTarifa != null && this.vista.TarifaTurno != null)
         {
             DiaPeriodoTarifaBR DiaPerioBR = new DiaPeriodoTarifaBR();
             this.vista.MaximoHrsTurno = DiaPerioBR.ObtenerMaximoHorasTurnoTarifa(this.dataContext, this.vista.UnidadOperativaID, (EPeriodosTarifa)this.vista.PeriodoTarifa, this.vista.TarifaTurno);
             CalcularTarifas();
         }
     } catch (Exception ex) {
         throw new Exception(this.nombreClase + ".CalcularMaximoHrsTurno: Error al obtener el máximo hrs. turno");
     }
 }
        /// <summary>
        /// Establece la información Inicial en la Vista
        /// </summary>
        private void EstablecerInformacionInicial()
        {
            //Se establecen los tipos de archivos permitidos para adjuntar al contrato
            List <TipoArchivoBO> lstTiposArchivo = new TipoArchivoBR().Consultar(this.dctx, new TipoArchivoBO());

            this.presentadorDocumentos.EstablecerTiposArchivo(lstTiposArchivo);
            this.presentadorDocumentos.RequiereObservaciones(false);

            #region Estableciendo configuración de días
            DiaPeriodoTarifaBR DiaPerioBR = new DiaPeriodoTarifaBR();
            this.vista.IncluyeSD = DiaPerioBR.IncluyeSabadoDomingo(this.dctx, (int)this.vista.UnidadOperativaID);
            #endregion
            this.EstablecerProductoSATPredeterminado();
        }
        /// <summary>
        /// Asigna el periodo correspondiente con los días de contrato.
        /// </summary>
        /// <param name="diasRenta">Duración en días del contrato</param>
        private void EstablecerPeriodo(int?diasRenta)
        {
            try {
                //Si no existe tarifa agregada se coloca el periodo de tarifa sugerido de acuerdo al numero de días de contrato
                if (this.vista.Tarifa == null)
                {
                    DiaPeriodoTarifaBR DiaPerioBR = new DiaPeriodoTarifaBR();
                    List <Object>      listValues = DiaPerioBR.ObtenerPeriodoTarifa(this.dataContext, this.vista.UnidadOperativaID, diasRenta.Value);

                    this.vista.PeriodoTarifa       = (EPeriodosTarifa)listValues[0];
                    this.vista.DuracionDiasPeriodo = Convert.ToInt32(listValues[1]);
                }
            } catch (Exception ex) {
                throw new Exception(this.nombreClase + ".ObtenerPeriodo:Error al obtener el período");
            }
        }
        /// <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);
                }
            }
        }