public List <String> GetFiltraEstado(String estado)
        {
            cfdLogFacturaCompra log    = new cfdLogFacturaCompra(_connStr);
            List <String>       vistos = new List <String>();

            log.Where.Estado.Value    = estado;
            log.Where.Estado.Operator = WhereParameter.Operand.Equal;
            log.Query.AddOrderBy(cfdLogFacturaCompra.ColumnNames.Folio, WhereParameter.Dir.ASC);
            try
            {
                if (log.Query.Load())
                {
                    log.Rewind();

                    do
                    {
                        vistos.Add(log.IdExterno);
                    } while (log.MoveNext());
                }
            }
            catch (Exception ePla)
            {
                _sMsj = "Contacte al administrador. Error al obtener log de facturas de compra filtrado por estado. " + ePla.Message + "[LogFacturaCompraService.GetFiltraEstado()]";
                _iErr++;
                return(null);
            }
            return(vistos);
        }
        public List <String> TraeTodos()
        {
            cfdLogFacturaCompra log    = new cfdLogFacturaCompra(_connStr);
            List <String>       vistos = new List <String>();

            //log.Query.AddOrderBy(cfdLogFacturaCompra.ColumnNames.Folio, WhereParameter.Dir.ASC);
            try
            {
                if (log.Query.Load())
                {
                    log.Rewind();

                    do
                    {
                        vistos.Add(log.IdExterno);
                    } while (log.MoveNext());
                }
            }
            catch (Exception ePla)
            {
                _sMsj = "Contacte al administrador. Error al obtener log de facturas de compra. " + ePla.Message + "[LogFacturaCompraService.TraeTodos()]";
                _iErr++;
                return(null);
            }
            return(vistos);
        }
        public bool Get(String folio, short tipo, String idImpuestoTercero, String estado)
        {
            cfdLogFacturaCompra log = new cfdLogFacturaCompra(_connStr);

            try
            {
                if (log.LoadByPrimaryKey(tipo, folio, idImpuestoTercero, estado))
                {
                    _idExterno           = log.IdExterno;
                    _compoundedBinStatus = log.EstadoActual;
                    _idxSingleStatus     = log.IdxSingleStatus;
                }
                else
                {
                    return(false);
                }
            }
            catch (Exception ePla)
            {
                _sMsj = "Contacte al administrador. Error al obtener log de facturas de compra por llave primaria. " + ePla.Message + "[LogFacturaCompraService.get()]";
                _iErr++;
                return(false);
            }
            return(true);
        }
        /// <summary>
        /// Actualiza los datos de una factura publicada en el log de facturas de compra.
        /// </summary>
        /// <returns></returns>
        public void Update(short tipo, string folio, string idImpuesto, string idusuario, string eBaseAnterior, string eBaseNuevo, string idExterno)
        {
            _sMsj = "";
            _iErr = 0;
            cfdLogFacturaCompra xmlPublicado = new cfdLogFacturaCompra(_connStr);

            xmlPublicado.Where.Tipo.Value    = tipo;
            xmlPublicado.Where.Tipo.Operator = WhereParameter.Operand.Equal;

            xmlPublicado.Where.Folio.Conjuction = WhereParameter.Conj.And;
            xmlPublicado.Where.Folio.Value      = folio;
            xmlPublicado.Where.Folio.Operator   = WhereParameter.Operand.Equal;

            xmlPublicado.Where.IdImpuestoTercero.Conjuction = WhereParameter.Conj.And;
            xmlPublicado.Where.IdImpuestoTercero.Value      = idImpuesto;
            xmlPublicado.Where.IdImpuestoTercero.Operator   = WhereParameter.Operand.Equal;

            xmlPublicado.Where.Estado.Conjuction = WhereParameter.Conj.And;
            xmlPublicado.Where.Estado.Value      = eBaseAnterior; // "publicado";
            xmlPublicado.Where.Estado.Operator   = WhereParameter.Operand.Equal;
            try
            {
                if (xmlPublicado.Query.Load())
                {
                    if (!eBaseAnterior.Equals(eBaseNuevo))
                    {
                        xmlPublicado.Estado = eBaseNuevo;
                    }

                    xmlPublicado.IdxSingleStatus = Convert.ToInt16(_cicloDeVida.idxTargetSingleStatus);
                    xmlPublicado.EstadoActual    = _cicloDeVida.targetBinStatus;
                    xmlPublicado.MensajeEA       = Derecha(_cicloDeVida.EstadoEnPalabras(_cicloDeVida.targetBinStatus), 255);
                    xmlPublicado.IdExterno       = Derecha(idExterno, 25);

                    xmlPublicado.FechaModificacion     = DateTime.Now;
                    xmlPublicado.IdUsuarioModificacion = Derecha(idusuario, 10);

                    xmlPublicado.Save();
                }
                else
                {
                    _sMsj = "El estado base no existe";
                    _iErr = -1;
                }
            }
            catch (Exception eAnula)
            {
                _sMsj = "Contacte al administrador. Error al actualizar el log. [LogFacturaCompraService.Update] " + eAnula.Message;
                _iErr++;
                throw;
            }
        }
        /// <summary>
        /// Actualiza los datos de una factura publicada en el log de facturas de compra.
        /// </summary>
        /// <returns></returns>
        public void Update(short tipo, string folio, string idImpuesto, string idusuario, string eBaseAnterior, string eBaseNuevo,
                           string eBinarioActual, string mensajeEA, short idxSingleStatus, string idExterno)
        {
            _sMsj = "";
            _iErr = 0;
            cfdLogFacturaCompra xmlPublicado = new cfdLogFacturaCompra(_connStr);

            xmlPublicado.Where.Tipo.Value    = tipo;
            xmlPublicado.Where.Tipo.Operator = WhereParameter.Operand.Equal;

            xmlPublicado.Where.Folio.Conjuction = WhereParameter.Conj.And;
            xmlPublicado.Where.Folio.Value      = folio;
            xmlPublicado.Where.Folio.Operator   = WhereParameter.Operand.Equal;

            xmlPublicado.Where.IdImpuestoTercero.Conjuction = WhereParameter.Conj.And;
            xmlPublicado.Where.IdImpuestoTercero.Value      = idImpuesto;
            xmlPublicado.Where.IdImpuestoTercero.Operator   = WhereParameter.Operand.Equal;

            xmlPublicado.Where.Estado.Conjuction = WhereParameter.Conj.And;
            xmlPublicado.Where.Estado.Value      = eBaseAnterior; // "publicado";
            xmlPublicado.Where.Estado.Operator   = WhereParameter.Operand.Equal;
            try
            {
                if (xmlPublicado.Query.Load())
                {
                    if (!eBaseAnterior.Equals(eBaseNuevo))
                    {
                        xmlPublicado.Estado = eBaseNuevo;
                    }

                    xmlPublicado.EstadoActual = eBinarioActual;
                    xmlPublicado.MensajeEA    = Derecha(mensajeEA, 255);
                    xmlPublicado.IdExterno    = Derecha(idExterno, 25);

                    xmlPublicado.FechaModificacion     = DateTime.Now;
                    xmlPublicado.IdUsuarioModificacion = Derecha(idusuario, 10);
                    xmlPublicado.IdxSingleStatus       = idxSingleStatus;
                    xmlPublicado.Save();
                }
                else
                {
                    _sMsj = "No está en la bitácora con estado 'emitido'.";
                    _iErr++;
                }
            }
            catch (Exception eAnula)
            {
                _sMsj = "Contacte al administrador. Error al actualizar la bitácora. [LogFacturaCompraService.Update] " + eAnula.Message;
                _iErr++;
                throw;
            }
        }
        /// <summary>
        /// Inserta datos de una factura en el log de facturas de compra.
        /// </summary>
        /// <returns></returns>
        public void Save(short tipo, string folio, string idImpuesto, string nomTercero, DateTime fechaRecepcion, string eBaseNuevo, string mensaje,
                         short idxSingleStatus, string eBinarioActual, string mensajeBinActual, string innerxml, string pdf, string idExterno, string idUsuario)
        {
            try
            {
                _sMsj = "";
                _iErr = 0;
                //log de facturas de compra
                cfdLogFacturaCompra logCompra = new cfdLogFacturaCompra(_connStr);

                logCompra.AddNew();
                logCompra.Tipo              = tipo;
                logCompra.Folio             = folio;
                logCompra.IdImpuestoTercero = idImpuesto;
                logCompra.NombreTercero     = nomTercero;
                logCompra.FechaRecepcion    = fechaRecepcion;

                logCompra.IdxSingleStatus = idxSingleStatus;
                logCompra.Estado          = eBaseNuevo;
                logCompra.Mensaje         = Derecha(mensaje, 255);
                logCompra.EstadoActual    = eBinarioActual;
                logCompra.MensajeEA       = Derecha(mensajeBinActual, 255);

                if (!innerxml.Equals(string.Empty))
                {
                    logCompra.ArchivoXML = innerxml;
                }

                logCompra.ArchivoPDF = Derecha(pdf, 255);
                logCompra.IdExterno  = Derecha(idExterno, 25);

                logCompra.FechaAlta             = DateTime.Now;
                logCompra.IdUsuario             = Derecha(idUsuario, 10);
                logCompra.IdUsuarioModificacion = "-";
                logCompra.FechaModificacion     = new DateTime(1900, 1, 1);

                logCompra.Save();
            }
            catch (Exception eLog)
            {
                _sMsj = "Contacte al administrador. No se puede ingresar la factura de compra en la bitácora. [LogFacturaCompraService.Save] " + eLog.Message;
                _iErr++;
                throw;
            }
        }
        public void Delete(String folio, short tipo, String idImpuestoTercero, String estado)
        {
            _sMsj = "";
            _iErr = 0;
            cfdLogFacturaCompra xmlEmitido = new cfdLogFacturaCompra(_connStr);

            xmlEmitido.Where.Folio.Value     = folio;
            xmlEmitido.Where.Folio.Operator  = WhereParameter.Operand.Equal;
            xmlEmitido.Where.Tipo.Conjuction = WhereParameter.Conj.And;
            xmlEmitido.Where.Tipo.Value      = tipo;
            xmlEmitido.Where.Tipo.Operator   = WhereParameter.Operand.Equal;
            xmlEmitido.Where.IdImpuestoTercero.Conjuction = WhereParameter.Conj.And;
            xmlEmitido.Where.IdImpuestoTercero.Value      = idImpuestoTercero;
            xmlEmitido.Where.IdImpuestoTercero.Operator   = WhereParameter.Operand.Equal;
            xmlEmitido.Where.Estado.Conjuction            = WhereParameter.Conj.And;
            xmlEmitido.Where.Estado.Value    = estado;
            xmlEmitido.Where.Estado.Operator = WhereParameter.Operand.Equal;
            try
            {
                if (xmlEmitido.Query.Load())
                {
                    xmlEmitido.MarkAsDeleted();
                    xmlEmitido.Save();
                }
                else
                {
                    _sMsj = "No se puede eliminar porque no está en la bitácora.";
                    _iErr++;
                }
            }
            catch (Exception eAnula)
            {
                _sMsj = "Contacte al administrador. Error al acceder a la base de datos. [LogFacturaCompraService.Delete] " + eAnula.Message;
                _iErr++;
                throw;
            }
        }