private Int32 EmitirGuiaRendicion(Int32 AgenciaID, Int32 UnidadNegocioID, IUsuarios Usuario, Int32 RendicionHojaRutaID) { using (System.Data.SqlClient.SqlConnection conexion = new System.Data.SqlClient.SqlConnection()) { conexion.ConnectionString = System.Configuration.ConfigurationManager.AppSettings["ConnectionString"]; conexion.Open(); System.Data.SqlClient.SqlTransaction transaccion = conexion.BeginTransaction(); IGuiaRendicion GuiaRendicion = GuiaRendicionFactory.GetGuiaRendicion(); IAdministrarGuias admGuiaO = AdministrarGuiasFactory.GetAdministrarGuias(); IAgencia agOrigen = AgenciaFactory.GetAgencia(); agOrigen.AgenciaID = AgenciaID; agOrigen.ConsultarBasico(); admGuiaO.AgenciaOrigenID = AgenciaID; admGuiaO.AgentePagoCondicionIVA = NegociosSisPackInterface.SisPack.CondicionIva.Ninguno; admGuiaO.CondicionPagoID = NegociosSisPackInterface.SisPack.CondicionPago.CuentaCorriente; // Para que genere tipo guía R //admGuiaO.GetNroGuia(); admGuiaO.CargarInfoComprobante((int)NegociosSisPackInterface.SisPack.TipoValidacionEmision.CAI); if (agOrigen.TipoImpresionGuiaId == (int)NegociosSisPackInterface.SisPack.TipoImpresionGuia.PreImpresa) { throw new DatosInvalidosException("No se puede generar la guía debido a que es preimpresa"); } else { // La agencia es autoimpresora. Reviso si el CAI esta vencido o no if (DateTime.Today > admGuiaO.FechaVencimientoCAI) { // El CAI esta vencido. Reviso si se puede emitir con el CAI vencido IParametroUNegocio param = ParametroUNegocioFactory.GetParametroUNegocio(); param.UnidadNegocioID = UnidadNegocioID; param.Parametro = NegociosSisPackInterface.SisPack.Parametro.PermiteEmitirConCAIVencido; param.Consultar(); bool permite = param.ValorString == "1" ? true : false; if (permite == false) { // No se puede emitir con el CAI vencido. throw new DatosInvalidosException("No se puede emitir la guía debido a que la fecha de vencimiento de CAI es superior a la fecha actual."); } } // El CAI no esta vencido o se permite emitir con CAE vencido. Cargo los datos de la guía ((IGuia)GuiaRendicion).NumeroCAI = admGuiaO.NumeroCAI; ((IGuia)GuiaRendicion).NroGuia = admGuiaO.NroGuia; ((IGuia)GuiaRendicion).TipoGuia = admGuiaO.TipoGuia; ((IGuia)GuiaRendicion).NroSucursalGuia = admGuiaO.NroSucursalGuia; } GuiaRendicion.AgenciaOrigenID = AgenciaID; GuiaRendicion.UnidadNegocioID = UnidadNegocioID; IParametroUNegocio parametro = ParametroUNegocioFactory.GetParametroUNegocio(); parametro.UnidadNegocioID = UnidadNegocioID; parametro.Parametro = SisPack.Parametro.AgenciaDestinoGuiaRendicion; parametro.Consultar(); if (parametro.ValorString == null) { throw new DatosInvalidosException("No hay cargado una agencia de destino para la guía de rendición"); } GuiaRendicion.AgenciaDestinoID = Convert.ToInt32(parametro.ValorString); ((IGuia)GuiaRendicion).ClasificacionGuiaID = NegociosSisPackInterface.SisPack.ClasificacionGuia.Rendicion; ((IGuia)GuiaRendicion).FechaEmision = DateTime.Now; ((IGuia)GuiaRendicion).UsuarioID = Usuario.UsuarioID; ((IGuiaFactura)GuiaRendicion).ImporteTotalGuia = 0; parametro.Parametro = SisPack.Parametro.ClienteGuiaRendicionHR; parametro.Consultar(); if (parametro.ValorString == null) { throw new DatosInvalidosException("No hay configurado un cliente destinatario para la guía de rendición"); } ((IGuiaFactura)GuiaRendicion).DestinatarioCliente = Convert.ToInt32(parametro.ValorString); admGuiaO.TipoGuia = NegociosSisPackInterface.SisPack.TipoGuia("9"); ((IGuiaFactura)GuiaRendicion).EmpresaFacturacionID = admGuiaO.ObtieneEmpresaFacturacion(); if (GuiaRendicion.GuiasRendidas.getCount() == 0) { IGuiaRendicionDetalle guiaConServARendir = GuiaRendicion.GuiasRendidas.AddGuiaRendicionDetalle(); guiaConServARendir.RendicionAgenciaID = RendicionHojaRutaID; } if (GuiaRendicion.EmitirGuiaRendicion(transaccion, Usuario) == false) { transaccion.Rollback(); throw new Exception("Error al emitir guía de rendición"); } IGuiaFacturaDetalle detalle = GuiaFacturaDetalleFactory.GetGuiaFacturaDetalle(); detalle.AgenciaOrigenID = AgenciaID; detalle.CantidadBultos = 0; detalle.GuiaID = ((IGuia)GuiaRendicion).GuiaID; parametro.Parametro = SisPack.Parametro.UnidadVentaGuiaRendicionHR; parametro.Consultar(); if (parametro.ValorString == null) { transaccion.Rollback(); throw new DatosInvalidosException("No hay configurada una unidad de venta para la guía de rendición"); } detalle.UnidadVentaID = Convert.ToInt32(parametro.ValorString); if (detalle.Guardar(transaccion) == false) { transaccion.Rollback(); throw new Exception("Error al guardar el detalle de la guía de rendición"); } transaccion.Commit(); return(((IGuia)GuiaRendicion).GuiaID); } }