public void Imprimir(int iReciboId, BO.DAL.dsDatos.DatosPagoDataTable oDatosPago, bool pbImpreso = false)
        {
            //bool bError = false;
            PrinterResponses response;

            // dsFacturaBindingSource.DataSource = CargarDataSet();
            BO.DAL.dsFactura.FACTURASDataTable dtFatura = new BO.DAL.dsFactura.FACTURASDataTable();
            // DataTable dt = new DataTable();
            dtFatura = CargarDataSetFiscal(iReciboId);
            //dt.TableName = "FACTURAS";
            BO.Models.Terminal oTerm = new BO.Models.Terminal();
            oTerm = unitOfWork.TerminalRepository.GetByID(Parametros.ParametrosSucursal.TermFiscalId);
            if (oTerm != null)
            {
                Printer oPrinter = new Printer(oTerm);
                oPrinter.SetInvoiceData(dtFatura, oDatosPago, !pbImpreso, 1);
                response = oPrinter.Print();
                if (response == PrinterResponses.Success)
                {
                    var oRecibos = unitOfWork.RecibosRepository.GetByID(iReciboId);
                    oRecibos.IMPRESO = true;
                    unitOfWork.RecibosRepository.Update(oRecibos);
                    unitOfWork.Save();
                }
                else
                {
                    MessageBox.Show(Printer.GetPrinterReturnMessage(response), "Aviso", MessageBoxButtons.OK,
                                    MessageBoxIcon.Error);
                }
            }

            //dsFacturas.Tables.Add(dt);
        }
        public void ImprimirNoVenta(int iReciboId, BO.DAL.dsDatos.DatosPagoDataTable oDatosPago, bool pbImpreso = false)
        {
            bool bError = false;

            // dsFacturaBindingSource.DataSource = CargarDataSet();
            BO.DAL.dsFactura.FACTURASDataTable dtFatura = new BO.DAL.dsFactura.FACTURASDataTable();
            // DataTable dt = new DataTable();
            dtFatura = CargarDataSetFiscal(iReciboId);
            //dt.TableName = "FACTURAS";
            BO.Models.Terminal oTerm = new BO.Models.Terminal();
            oTerm = unitOfWork.TerminalRepository.GetByID(Parametros.ParametrosSucursal.TermFiscalId);
            Printer oPrinter = new Printer(oTerm);

            oPrinter.SetInvoiceData(dtFatura, oDatosPago, !pbImpreso, 1);
            oPrinter.PrintNoFiscalReceipt();

            /* if (bError == false)
             * {
             *   var oRecibos = unitOfWork.RecibosRepository.GetByID(iReciboId);
             *   oRecibos.IMPRESO = true;
             *   unitOfWork.RecibosRepository.Update(oRecibos);
             *   unitOfWork.Save();
             * }
             * else
             * {
             *   MessageBox.Show("Ha ocurrido un error en la Impresión del recibo, favor revisar la conexión ", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Error);
             * }
             */
            //dsFacturas.Tables.Add(dt);
        }
        public DataTable CargarDataSet()
        {
            BO.DAL.dsFactura.FACTURASDataTable oTable = new BO.DAL.dsFactura.FACTURASDataTable();

            var oRecibo = unitOfWork.RecibosRepository.GetByID(13);


            var oReciboDet = unitOfWork.RecibosDetRepository.Get(filter: xy => xy.RECIBO_ID == oRecibo.RECIBO_ID);

            foreach (var oDet in oReciboDet)
            {
                //var BultosValores = unitOfWork.BultosValoresRepository.GetByID(oDet.BVA_ID);

                /*
                 * var Bultos = unitOfWork.BultosRepository.GetByID(BultosValores.BLT_NUMERO);
                 *
                 * BO.DAL.dsFactura.FACTURASRow oFactRow = oTable.NewFACTURASRow();
                 *
                 *
                 * oFactRow.REC_ID = oRecibo.RECIBO_ID;
                 * oFactRow.REC_TIPO = unitOfWork.TiposRepository.GetByID(oRecibo.TIPO_REC_ID).TIPO_CODIGO;
                 * oFactRow.REMITENTE = Bultos.REMITENTE;
                 * oFactRow.RNC = "NA";
                 * oFactRow.BLT_NUMERO = BultosValores.BLT_NUMERO;
                 * oFactRow.CODIGO = BultosValores.CargosProducto.Cargos.CAR_DESCRIPCION;
                 * oFactRow.CONSIGNATARIO = Bultos.DESTINATARIO;
                 * oFactRow.CONTENIDO = Bultos.CONTENIDO;
                 * oFactRow.CUENTACLI = Bultos.Clientes.CTE_NUMERO_EPS + " " + Bultos.Clientes.CTE_NOMBRE + " " + Bultos.Clientes.CTE_APELLIDO;
                 * oFactRow.DIRECCIONCLI = Bultos.Clientes.CTE_DIRECCION_CASA;
                 * oFactRow.IDENTIFICACION = Bultos.BLT_CODIGO_BARRA;
                 * oFactRow.MONTO = BultosValores.BVA_MONTO_LOCAL;
                 * oFactRow.NCF = "NA";
                 * oFactRow.NCF_TIPO = unitOfWork.TiposRepository.GetByID(Bultos.Clientes.CTE_TIPO_FISCAL).TIPO_NOMBRE;
                 * oFactRow.PESO = Bultos.BLT_PESO.ToString();
                 * oFactRow.PIEZAS = Bultos.BLT_PIEZAS.ToString();
                 * oFactRow.PRODUCTO = Bultos.Productos.PRO_CODIGO + " " + Bultos.Productos.PRO_DESCRIPCION;
                 * oFactRow.REC_CREDITO = "NA";
                 * oFactRow.REC_FECHA = oRecibo.FECHA.ToShortDateString();
                 * oFactRow.SUCURSAL = Bultos.Sucursales.SUC_DESCRIPCION;
                 * oFactRow.TARIFA = 0;
                 * oFactRow.TELEFONO = "NA";
                 * oFactRow.TELEFONOCLI = Bultos.Clientes.CTE_TELEFONO_CASA;
                 * oFactRow.TRACKING = Bultos.BLT_TRACKING_NUMBER;
                 *
                 * oTable.Rows.Add(oFactRow);
                 */
            }

            return(oTable);
        }
        public BO.DAL.dsFactura.FACTURASDataTable CargarDataSetFiscal(int piReciboId)
        {
            string sNCF_ANUL = "";

            BO.DAL.dsFactura.FACTURASDataTable oTable = new BO.DAL.dsFactura.FACTURASDataTable();
            var oRecibo     = unitOfWork.RecibosRepository.GetByID(piReciboId);
            var oReciboAnul = unitOfWork.RecibosRepository.GetByID(oRecibo.RECIBO_ID_ANUL);

            if (oReciboAnul != null)
            {
                sNCF_ANUL = oReciboAnul.NUM_FISCAL;
            }
            var oRecibosDet    = unitOfWork.RecibosDetRepository.Get(filter: xy => xy.RECIBO_ID == oRecibo.RECIBO_ID);
            int iCantElementos = 0;
            var elementos      = from p in oRecibosDet
                                 select new { p.BLT_NUMERO };

            iCantElementos = elementos.Distinct().Count();
            int     iBltNumero = -1;
            decimal dTarifa    = 1;

            foreach (var oRecDet in oRecibosDet)
            {
                //var BultosValores = unitOfWork.BultosValoresRepository.GetByID(oDet.BVA_ID);
                var Bultos = unitOfWork.BultosRepository.GetByID(oRecDet.BLT_NUMERO);
                BO.DAL.dsFactura.FACTURASRow oFactRow = oTable.NewFACTURASRow();
                /*DEBE IR CON EL SECUENCIAL DE RECIBOS*/
                oFactRow.REC_ID = oRecibo.NUM_REC;
                var oTipoDoc = unitOfWork.TiposRepository.GetByID(oRecibo.TIPO_REC_ID);
                oFactRow.REC_TIPO      = oTipoDoc.TIPO_CODIGO;
                oFactRow.REC_TIPO_DESC = oTipoDoc.TIPO_DESCR;
                oFactRow.REMITENTE     = Bultos.REMITENTE;
                if (Bultos.Clientes.CTE_TIPO_FISCAL == 44 || Bultos.Clientes.CTE_TIPO_FISCAL == 45)      //Empresa
                {
                    if (Bultos.Clientes.CTE_RNC.KeepOnlyNumbers().TrimEnd() != string.Empty)
                    {
                        oFactRow.RNC = Bultos.Clientes.CTE_RNC.KeepOnlyNumbers().ToString().TrimEnd();
                    }
                    else
                    {
                        oFactRow.RNC = Bultos.Clientes.CTE_CEDULA.KeepOnlyNumbers().ToString().TrimEnd();
                    }
                }
                else
                {
                    if (Bultos.Clientes.CTE_CEDULA.KeepOnlyNumbers().Trim() != string.Empty)
                    {
                        oFactRow.RNC = Bultos.Clientes.CTE_CEDULA.KeepOnlyNumbers().ToString().TrimEnd();
                    }
                    else if (Bultos.Clientes.CTE_RNC.Trim() != string.Empty)
                    {
                        oFactRow.RNC = Bultos.Clientes.CTE_RNC;
                    }
                    else
                    {
                        oFactRow.RNC = Bultos.Clientes.CTE_PASAPORTE;
                    }
                }
                if (iBltNumero != Bultos.BLT_NUMERO)
                {
                    var BultosValores = unitOfWork.BultosValoresRepository.Get(filter: xy => xy.BLT_NUMERO == oRecDet.BLT_NUMERO && xy.CargosProducto.Cargos.CAR_CODIGO == "010").FirstOrDefault();
                    if (BultosValores != null)
                    {
                        dTarifa = BultosValores.BVA_MONTO_APLICAR;
                    }
                    else
                    {
                        dTarifa = 1;
                    }

                    iBltNumero = Bultos.BLT_NUMERO;
                }
                oFactRow.TARIFA         = dTarifa;
                oFactRow.BLT_NUMERO     = Bultos.BLT_NUMERO;
                oFactRow.CODIGO         = oRecDet.Cargos.CAR_DESCRIPCION;
                oFactRow.CONSIGNATARIO  = Bultos.DESTINATARIO;
                oFactRow.CONTENIDO      = Bultos.CONTENIDO;
                oFactRow.CUENTACLI      = Bultos.Clientes.CTE_NUMERO_EPS.TrimEnd() + " " + Bultos.Clientes.CTE_NOMBRE + " " + Bultos.Clientes.CTE_APELLIDO;
                oFactRow.DIRECCIONCLI   = Bultos.Clientes.CTE_DIRECCION_CASA;
                oFactRow.IDENTIFICACION = Bultos.BLT_CODIGO_BARRA;
                oFactRow.MONTO          = oRecDet.MONTO_LOCAL;
                oFactRow.NCF            = oRecibo.NUM_FISCAL;
                oFactRow.NCF_TIPO       = unitOfWork.TiposRepository.GetByID(Bultos.Clientes.CTE_TIPO_FISCAL).TIPO_DESCR;
                oFactRow.PESO           = Bultos.BLT_PESO.ToString();
                oFactRow.PIEZAS         = Bultos.BLT_PIEZAS.ToString();
                oFactRow.PRODUCTO       = Bultos.Productos.PRO_CODIGO + " " + Bultos.Productos.PRO_DESCRIPCION;
                oFactRow.REC_CREDITO    = oRecibo.REC_CREDITO == false ? "N" : "S";
                oFactRow.REC_FECHA      = oRecibo.FECHA.ToShortDateString();
                oFactRow.SUCURSAL       = Bultos.Sucursales.SUC_CODIGO;

                if (Bultos.Clientes.CTE_TIPO_FISCAL == 45) /*regimenes especiales*/
                {
                    oFactRow.ITBIS      = false;
                    oFactRow.TASA_ITBIS = 0;
                }
                else
                {
                    oFactRow.ITBIS      = oRecDet.Cargos.CAR_ITBIS;
                    oFactRow.TASA_ITBIS = oRecDet.Cargos.ITBIS;
                }
                oFactRow.MONTO_ITEBIS = oRecDet.MONTO_ITBIS;
                oFactRow.MONTO_TOTAL  = oRecDet.MONTO_TOTAL;

                oFactRow.USUARIO = oRecibo.USER_CREA;
                if (oRecibo.TIPO_REC_ID == 5)
                {
                    oFactRow.TIPO_FISCAL = 3; //Hay que buscar otra manera. Esto es para la anulacion qu esta por fuera del cliente.
                }
                else
                {
                    oFactRow.TIPO_FISCAL = unitOfWork.NumeroFicalRepository.Get(xy => xy.TIPO_ID == Bultos.Clientes.CTE_TIPO_FISCAL).FirstOrDefault().TIPO_FISCAL;
                }
                oFactRow.TELEFONO       = "NA";
                oFactRow.TELEFONOCLI    = Bultos.Clientes.CTE_TELEFONO_CASA;
                oFactRow.TRACKING       = Bultos.BLT_TRACKING_NUMBER;
                oFactRow.CANT_ELEMENTOS = iCantElementos;
                oFactRow.NCF_AFECTADO   = sNCF_ANUL;
                oFactRow.ENTREGADO_A    = Bultos.Clientes.CTE_NOMBRE;

                if (oRecDet.Cargos.CAR_CODIGO == "093") //Descuento a fuego
                {
                    oFactRow.DESCUENTO = true;
                }
                else
                {
                    oFactRow.DESCUENTO = false;
                }


                oTable.Rows.Add(oFactRow);
            }
            return(oTable);
        }
        public DataTable CargarDataSet(int piReciboId)
        {
            BO.DAL.dsFactura.FACTURASDataTable oTable = new BO.DAL.dsFactura.FACTURASDataTable();
            var oRecibo        = unitOfWork.RecibosRepository.GetByID(piReciboId);
            var oRecibosDet    = unitOfWork.RecibosDetRepository.Get(filter: xy => xy.RECIBO_ID == oRecibo.RECIBO_ID);
            int iCantElementos = 0;
            var elementos      = from p in oRecibosDet
                                 select new { p.BLT_NUMERO };

            iCantElementos = elementos.Distinct().Count();
            foreach (var oRecDet in oRecibosDet)
            {
                //var BultosValores = unitOfWork.BultosValoresRepository.GetByID(oDet.BVA_ID);
                var Bultos = unitOfWork.BultosRepository.GetByID(oRecDet.BLT_NUMERO);
                BO.DAL.dsFactura.FACTURASRow oFactRow = oTable.NewFACTURASRow();
                oFactRow.REC_ID = oRecibo.NUM_REC;
                var oTipoDoc = unitOfWork.TiposRepository.GetByID(oRecibo.TIPO_REC_ID);
                oFactRow.REC_TIPO      = oTipoDoc.TIPO_CODIGO;
                oFactRow.REC_TIPO_DESC = oTipoDoc.TIPO_DESCR;
                oFactRow.REMITENTE     = Bultos.REMITENTE;
                if (Bultos.Clientes.CTE_CEDULA == null)
                {
                    oFactRow.RNC = Bultos.Clientes.CTE_RNC;
                }
                else
                {
                    if (Bultos.Clientes.CTE_CEDULA.TrimEnd() == "")
                    {
                        oFactRow.RNC = Bultos.Clientes.CTE_RNC;
                    }
                    else
                    {
                        oFactRow.RNC = Bultos.Clientes.CTE_CEDULA;
                    }
                }
                oFactRow.BLT_NUMERO     = Bultos.BLT_NUMERO;
                oFactRow.CODIGO         = oRecDet.Cargos.CAR_DESCRIPCION;
                oFactRow.CONSIGNATARIO  = Bultos.DESTINATARIO;
                oFactRow.CONTENIDO      = Bultos.CONTENIDO;
                oFactRow.CUENTACLI      = Bultos.Clientes.CTE_NUMERO_EPS + " " + Bultos.Clientes.CTE_NOMBRE + " " + Bultos.Clientes.CTE_APELLIDO;
                oFactRow.DIRECCIONCLI   = Bultos.Clientes.CTE_DIRECCION_CASA;
                oFactRow.IDENTIFICACION = Bultos.BLT_CODIGO_BARRA;
                oFactRow.MONTO          = oRecDet.MONTO_LOCAL;
                oFactRow.NCF            = oRecibo.NUM_FISCAL;
                oFactRow.NCF_TIPO       = unitOfWork.TiposRepository.GetByID(Bultos.Clientes.CTE_TIPO_FISCAL).TIPO_DESCR;
                oFactRow.PESO           = Bultos.BLT_PESO.ToString();
                oFactRow.PIEZAS         = Bultos.BLT_PIEZAS.ToString();
                oFactRow.PRODUCTO       = Bultos.Productos.PRO_CODIGO + " " + Bultos.Productos.PRO_DESCRIPCION;
                oFactRow.REC_CREDITO    = oRecibo.REC_CREDITO == false ? "N" : "S";
                oFactRow.REC_FECHA      = oRecibo.FECHA.ToShortDateString();
                oFactRow.SUCURSAL       = Bultos.Sucursales.SUC_DESCRIPCION;
                oFactRow.ITBIS          = oRecDet.Cargos.CAR_ITBIS;
                oFactRow.MONTO_ITEBIS   = oRecDet.MONTO_ITBIS;
                oFactRow.MONTO_TOTAL    = oRecDet.MONTO_TOTAL;
                oFactRow.TASA_ITBIS     = oRecDet.Cargos.ITBIS;
                oFactRow.USUARIO        = oRecibo.USER_CREA;
                oFactRow.TIPO_FISCAL    = unitOfWork.NumeroFicalRepository.Get(xy => xy.TIPO_ID == Bultos.Clientes.CTE_TIPO_FISCAL).FirstOrDefault().TIPO_FISCAL;
                if (oRecDet.Cargos.CAR_CODIGO == "010")
                {
                    var BultosValores = unitOfWork.BultosValoresRepository.Get(filter: xy => xy.BLT_NUMERO == oRecDet.BLT_NUMERO && xy.CargosProducto.Cargos.CAR_CODIGO == "010").FirstOrDefault();
                    oFactRow.TARIFA = BultosValores.BVA_MONTO_APLICAR;
                }
                oFactRow.TELEFONO       = "NA";
                oFactRow.TELEFONOCLI    = Bultos.Clientes.CTE_TELEFONO_CASA;
                oFactRow.TRACKING       = Bultos.BLT_TRACKING_NUMBER;
                oFactRow.CANT_ELEMENTOS = iCantElementos;
                oTable.Rows.Add(oFactRow);
            }

            return(oTable);
        }