public List <CuentaResumen> GetCuentasAndImpuestosA3()
        {
            try
            {
                List <CuentaResumen> list      = new List <CuentaResumen>();
                ProductList          productos = ProductList.GetList(false, true);
                FamiliaList          familias  = FamiliaList.GetList(false, true);
                ImpuestoList         impuestos = ImpuestoList.GetList(false);
                bool        nuevo;
                ProductInfo producto;
                FamiliaInfo familia;
                string      cuenta;
                string      nombre;

                foreach (OutputInvoiceLineInfo item in _conceptos)
                {
                    ImpuestoResumen impuesto = new ImpuestoResumen();

                    nuevo    = true;
                    producto = productos.GetItem(item.OidProducto);
                    familia  = familias.GetItem(producto.OidFamilia);


                    cuenta = (producto.CuentaContableVenta == string.Empty) ? familia.CuentaContableVenta : producto.CuentaContableVenta;
                    nombre = (producto.CuentaContableVenta == string.Empty)
                            ? familia.Codigo + " " + familia.Nombre
                            : producto.Codigo + " " + producto.Nombre;

                    //Agrupamos los conceptos por cuentas contables
                    for (int i = 0; i < list.Count; i++)
                    {
                        CuentaResumen cr = list[i];

                        //Tiene prioridad la cuenta contable del producto
                        if (producto.CuentaContableVenta != string.Empty)
                        {
                            if ((cr.CuentaContable == producto.CuentaContableVenta) && (cr.Impuesto != null && cr.Impuesto.OidImpuesto == item.OidImpuesto))
                            {
                                cr.Importe                += item.PDescuento > 0 ? item.BaseImponible : item.Subtotal;
                                cr.Impuesto.Importe       += item.Impuestos;
                                cr.Impuesto.BaseImponible += item.PDescuento > 0 ? item.BaseImponible : item.Subtotal;
                                list[i] = cr;
                                nuevo   = false;
                                break;
                            }
                        }
                        //Luego la de la familia
                        else if ((cr.CuentaContable == familia.CuentaContableVenta) && (cr.Impuesto != null && cr.Impuesto.OidImpuesto == item.OidImpuesto))
                        {
                            cr.Importe                += item.PDescuento > 0 ? item.BaseImponible : item.Subtotal;
                            cr.Impuesto.Importe       += item.Impuestos;
                            cr.Impuesto.BaseImponible += item.PDescuento > 0 ? item.BaseImponible : item.Subtotal;
                            list[i] = cr;
                            nuevo   = false;
                            break;
                        }
                    }

                    if (nuevo)
                    {
                        CuentaResumen new_cr = new CuentaResumen
                        {
                            OidFamilia     = producto.OidFamilia,
                            Importe        = item.PDescuento > 0 ? item.BaseImponible : item.Subtotal,
                            CuentaContable = cuenta,
                            Nombre         = nombre,
                        };

                        if (item.Impuestos != 0)
                        {
                            ImpuestoInfo imp = null;

                            if (item.OidImpuesto != 0)
                            {
                                imp = impuestos.GetItem(item.OidImpuesto);
                            }
                            else
                            {
                                imp = impuestos.GetItemByProperty("Porcentaje", item.PImpuestos);
                            }

                            new_cr.Impuesto = new ImpuestoResumen
                            {
                                OidImpuesto           = item.OidImpuesto,
                                BaseImponible         = item.PDescuento > 0 ? item.BaseImponible : item.Subtotal,
                                Importe               = item.Impuestos,
                                SubtipoFacturaEmitida = imp.CodigoImpuestoA3Emitida,
                                Porcentaje            = item.PImpuestos,
                            };
                        }
                        //else
                        //{
                        //    new_cr.Impuesto = new ImpuestoResumen
                        //    {
                        //        OidImpuesto = item.OidImpuesto,
                        //        BaseImponible = 0,
                        //        Importe = 0
                        //    };
                        //}

                        list.Add(new_cr);
                    }
                }

                return(list);
            }
            catch
            {
                throw new iQException(String.Format(Resources.Messages.ERROR_FACTURA_CUENTA, NFactura, Cliente));
            }
        }
        public List <CuentaResumen> GetCuentas()
        {
            try
            {
                List <CuentaResumen> list      = new List <CuentaResumen>();
                ProductList          productos = ProductList.GetList(false, true);
                FamiliaList          familias  = FamiliaList.GetList(false, true);
                bool        nuevo;
                ProductInfo producto;
                FamiliaInfo familia;
                string      cuenta;

                foreach (OutputInvoiceLineInfo item in _conceptos)
                {
                    if (item.OidProducto == 0)
                    {
                        continue;
                    }

                    nuevo    = true;
                    producto = productos.GetItem(item.OidProducto);
                    familia  = familias.GetItem(producto.OidFamilia);

                    cuenta = (producto.CuentaContableVenta == string.Empty) ? familia.CuentaContableVenta : producto.CuentaContableVenta;

                    //Agrupamos los conceptos por cuentas contables
                    for (int i = 0; i < list.Count; i++)
                    {
                        CuentaResumen cr = list[i];

                        //Tiene prioridad la cuenta contable del producto
                        if (producto.CuentaContableVenta != string.Empty)
                        {
                            if (cr.CuentaContable == producto.CuentaContableVenta)
                            {
                                cr.Importe += item.BaseImponible;
                                list[i]     = cr;
                                nuevo       = false;
                                break;
                            }
                        }
                        //Luego la de la familia
                        else if (cr.CuentaContable == familia.CuentaContableVenta)
                        {
                            cr.Importe += item.BaseImponible;
                            list[i]     = cr;
                            nuevo       = false;
                            break;
                        }
                    }

                    if (nuevo)
                    {
                        list.Add(new CuentaResumen {
                            OidFamilia = producto.OidFamilia, Importe = item.BaseImponible, CuentaContable = cuenta
                        });
                    }
                }

                return(list);
            }
            catch
            {
                throw new iQException(String.Format(Resources.Messages.ERROR_FACTURA_CUENTA, NFactura, Cliente));
            }
        }