/// <summary>
        /// Carga las facturas encontradas a partir del Id de un cliente.
        /// </summary>
        /// <param name="cargarPorIdCliente">Indica si hay que buscar por el Id del cliente.</param>
        private void CargarFacturas()
        {
            List <FacturaRecibida> facturas = null;

            if (IdProveedor >= 1)
            {
                facturas = FacturaRecibida.ObtenerFacturasPorIdProveedor(IdProveedor);
            }
            else
            {
                facturas = FacturaRecibida.ObtenerFacturasPorIdGaraje(IdGaraje);
            }

            if (DgvFactsRecibidas.Rows.Count >= 1)        // Si hubiesen filas en el DataGridView, las eliminamos.
            {
                DgvFactsRecibidas.Rows.Clear();
            }

            foreach (FacturaRecibida factura in facturas)
            {
                int posicion = DgvFactsRecibidas.Rows.Add();
                DgvFactsRecibidas.Rows[posicion].Cells["numFactura"].Value    = factura.Id;
                DgvFactsRecibidas.Rows[posicion].Cells["fecha"].Value         = factura.Fecha.ToShortDateString();
                DgvFactsRecibidas.Rows[posicion].Cells["garaje"].Value        = factura.Garaje.Nombre;
                DgvFactsRecibidas.Rows[posicion].Cells["proveedor"].Value     = factura.Proveedor.Empresa;
                DgvFactsRecibidas.Rows[posicion].Cells["baseImponible"].Value = factura.BaseImponible;
                DgvFactsRecibidas.Rows[posicion].Cells["iva"].Value           = factura.Iva;
                DgvFactsRecibidas.Rows[posicion].Cells["totalFactura"].Value  = factura.Total;
            }
        }
예제 #2
0
        public void Negocios(FacturaRecibida facturaRecibida, int sucursalId)
        {
            var sucursal = _db.Sucursales.Find(sucursalId);

            if (facturaRecibida.Receptor == null)
            {
                throw new Exception(String.Format("El receptor de la factura {0} no coincide con el RFC {1}", facturaRecibida.NombreArchivoXml, sucursal.Rfc));
            }

            //Factura Repetida
            var facturaValidadaPreviamente = _db.FacturasRecibidas.FirstOrDefault(f => f.Uuid == facturaRecibida.Uuid);

            if (facturaValidadaPreviamente != null)
            {
                throw new Exception(String.Format("La factura {0} ya fue validada", facturaValidadaPreviamente.NombreArchivoXml));
            }

            //La factura es de la empresa
            if (facturaRecibida.Receptor.Rfc != sucursal.Rfc)
            {
                throw new Exception(String.Format("El rfc {0} no corresponde con la sucursal actual ({1})", facturaRecibida.Receptor.Rfc, sucursal.Rfc));
            }

            //El proveedor Existe
            facturaRecibida.Emisor = ChecarProveedor(facturaRecibida, sucursalId);
        }
        private void BtnGuardar_Click(object sender, EventArgs e)
        {
            if (ComprobarDatosIntroducidos())
            {
                FacturaRecibida factura = new FacturaRecibida();
                foreach (DataGridViewRow fila in DgvFactsRecibidas.SelectedRows)
                {
                    factura.Id = Convert.ToInt32(fila.Cells[0].Value);
                }

                factura.Fecha         = DtFecha.Value;
                factura.Proveedor     = new Proveedor();
                factura.Proveedor.Id  = ((Proveedor)CbProveedores.SelectedItem).Id;
                factura.BaseImponible = decimal.Parse(TxtBaseImponible.Text);
                factura.Iva           = decimal.Parse(TxtIva.Text);
                factura.Total         = decimal.Parse(TxtTotalFactura.Text);

                if (factura.Modificar())
                {
                    CargarFacturas();
                    CompletarDetallesFactura(0);
                    MessageBox.Show("Factura Actualizada", "Factura Actualizada", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    MessageBox.Show("Ha habido un problema al actualizar la factura", "Factura no Actualizada", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
            {
                MessageBox.Show("Los datos introducidos no son correctos", "Datos Incorrectos", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
예제 #4
0
        public ActionResult Validaciones(FacturasModel facturasModel)
        {
            ModelState.Remove("Archivos");

            var sucursalId = ObtenerSucursal();
            var sucursal   = _db.Sucursales.Find(sucursalId);

            facturasModel = new FacturasModel
            {
                FacturasRecibidas = _db.FacturasRecibidas.Where(fp => fp.ReceptorId == sucursalId).OrderBy(fp => fp.Emisor.RazonSocial).ThenByDescending(vf => vf.Fecha).ToList()
            };

            if (ModelState.IsValid)
            {
                if (Request.Files.Count == 0)
                {
                    ModelState.AddModelError("", "Sin archivos para procesar");
                    return(View(facturasModel));
                }

                try
                {
                    var facturaRecibida = new FacturaRecibida();

                    PopularArchivos(ref facturaRecibida);
                    var pathFactura = Path.Combine(Server.MapPath("~/Archivos/Validaciones/"), facturaRecibida.NombreArchivoXml);
                    _operacionesStreams.ByteArrayArchivo(facturaRecibida.ArchivoFisicoXml, pathFactura);

                    _decodificaFacturas.DecodificarFactura(ref facturaRecibida, pathFactura);

                    var rfcReceptor = facturaRecibida.Receptor.Rfc;
                    facturaRecibida.Receptor = _db.Sucursales.FirstOrDefault(s => s.Rfc == rfcReceptor);

                    //Validaciones
                    _validacionesFacturas.Negocios(facturaRecibida, ObtenerSucursal());
                    facturaRecibida.Validacion = _validacionesFacturas.Sat(pathFactura, facturaRecibida.Receptor.Rfc);

                    //Guardar factura
                    try
                    {
                        _guarda.GuardarFacturaRecibida(facturaRecibida, ObtenerSucursal(), API.Enums.TiposGastos.Proveedores);
                        _db.SaveChanges();
                    }
                    catch (Exception ex)
                    {
                        ModelState.AddModelError("", String.Format("No se pudo guardar la factura {0}", ex.Message));
                        return(View(facturasModel));
                    }
                }
                catch (Exception ex)
                {
                    ModelState.AddModelError("", ex.Message);
                    return(View(facturasModel));
                }

                return(RedirectToAction("Validaciones"));
            }

            return(View(facturasModel));
        }
예제 #5
0
        public ActionResult CargaGeneral(CargasCfdisModel cargasCfdisModel)
        {
            PopulaForma(cargasCfdisModel.DepartamentoId, cargasCfdisModel.CentroCostoId);
            ModelState.Remove("Archivos");

            var sucursalId = ObtenerSucursal();
            var sucursal   = _db.Sucursales.Find(sucursalId);

            if (ModelState.IsValid)
            {
                if (Request.Files.Count == 0)
                {
                    ModelState.AddModelError("", "Sin archivos para procesar");
                    return(View());
                }

                try
                {
                    var facturaRecibida = new FacturaRecibida();

                    PopularArchivos(ref facturaRecibida);
                    var pathFactura = Path.Combine(Server.MapPath("~/Archivos/Validaciones/"), facturaRecibida.NombreArchivoXml);
                    _operacionesStreams.ByteArrayArchivo(facturaRecibida.ArchivoFisicoXml, pathFactura);

                    _decodificaFacturas.DecodificarFactura(ref facturaRecibida, pathFactura);

                    var rfcReceptor = facturaRecibida.Receptor.Rfc;
                    facturaRecibida.Receptor       = _db.Sucursales.FirstOrDefault(s => s.Rfc == rfcReceptor);
                    facturaRecibida.DepartamentoId = cargasCfdisModel.DepartamentoId;
                    facturaRecibida.CentroCostoId  = cargasCfdisModel.CentroCostoId;
                    facturaRecibida.UsuarioId      = ObtenerUsuario();

                    //Validaciones
                    _validacionesFacturas.Negocios(facturaRecibida, ObtenerSucursal());
                    facturaRecibida.Validacion = _validacionesFacturas.Sat(pathFactura, facturaRecibida.Receptor.Rfc);

                    //Guardar factura
                    try
                    {
                        _guardaFacturas.GuardarFacturaRecibida(facturaRecibida, ObtenerSucursal(), TiposGastos.Personal);
                        _db.SaveChanges();
                    }
                    catch (Exception ex)
                    {
                        ModelState.AddModelError("", String.Format("No se pudo guardar la factura {0}", ex.Message));
                        return(View());
                    }
                }
                catch (Exception ex)
                {
                    ModelState.AddModelError("", ex.Message);
                    return(View());
                }
            }

            return(View());
        }
예제 #6
0
        private void CbEmpresas_SelectionChangeCommitted(object sender, EventArgs e)
        {
            FrmBuscarFactsRecibida frmBuscarFactsRecibida = new FrmBuscarFactsRecibida(((Proveedor)CbEmpBuscar.SelectedItem).Id, 0);

            frmBuscarFactsRecibida.ShowDialog();

            int posicion = BindingSource.Position;

            BindingSource.DataSource = FacturaRecibida.ObtenerFacturas();
            BindingSource.Position   = posicion;
        }
예제 #7
0
        /// <summary>
        /// Rellena los datos de la factura a su campo correspondiente.
        /// </summary>
        /// <param name="factura">Los datos de la factura.</param>
        private void RellenarDatosFactura(FacturaRecibida factura)
        {
            TxtNumFactura.Text = factura.Id.ToString();
            DtFecha.Value      = factura.Fecha;
            CbGarajes.Text     = factura.Garaje.Nombre;
            CbEmpresas.Text    = factura.Proveedor.Empresa;

            TxtBaseImponible.Text = factura.BaseImponible.ToString();
            TxtIva.Text           = factura.Iva.ToString();
            TxtTotalFactura.Text  = factura.Total.ToString();
        }
예제 #8
0
        private void CbGjBuscar_SelectionChangeCommitted(object sender, EventArgs e)
        {
            FrmBuscarFactsRecibida frmBuscarFactsRecibida = new FrmBuscarFactsRecibida(0, ((Garaje)CbGjBuscar.SelectedItem).Id);

            frmBuscarFactsRecibida.ShowDialog();

            int posicion = BindingSource.Position;

            BindingSource.DataSource = FacturaRecibida.ObtenerFacturas();
            BindingSource.Position   = posicion;
        }
예제 #9
0
        public bool GuardarFacturaRecibida(FacturaRecibida facturaRecibida, int sucursalId, TiposGastos tipoGasto)
        {
            var receptor = _db.Sucursales.Find(sucursalId);
            var emisor   = _db.Proveedores.FirstOrDefault(s => s.Rfc == facturaRecibida.Emisor.Rfc && s.GrupoId == receptor.GrupoId);

            if (emisor == null)
            {
                emisor = new Proveedor
                {
                    //Domicilio
                    CodigoPostal = facturaRecibida.Emisor.CodigoPostal,
                    Pais         = facturaRecibida.Emisor.Pais,
                    Referencia   = facturaRecibida.Emisor.Referencia,

                    //Datos
                    RazonSocial = facturaRecibida.Emisor.RazonSocial,
                    Rfc         = facturaRecibida.Emisor.Rfc,
                    Status      = Status.Activo
                };
                _db.Proveedores.Add(emisor);
                _db.SaveChanges();
            }

            //Asignaciones Factura
            facturaRecibida.EmisorId   = emisor.Id;
            facturaRecibida.ReceptorId = receptor.Id;
            facturaRecibida.Version    = "3.2";
            facturaRecibida.TipoGasto  = tipoGasto;

            facturaRecibida.Emisor   = null;
            facturaRecibida.Receptor = null;

            _db.FacturasRecibidas.Add(facturaRecibida);

            try
            {
                _db.SaveChanges();
            }
            catch (DbEntityValidationException dbEx)
            {
                var errores = new List <String>();
                foreach (var validationErrors in dbEx.EntityValidationErrors)
                {
                    foreach (var validationError in validationErrors.ValidationErrors)
                    {
                        errores.Add(String.Format("Propiedad: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage));
                    }
                }
                throw new Exception(string.Join(",", errores.ToArray()));
            }

            return(true);
        }
예제 #10
0
        private void BtnGuardar_Click(object sender, EventArgs e)
        {
            if (ComprobarDatosIntroducidos())
            {
                FacturaRecibida factura = new FacturaRecibida();
                factura.Id            = int.Parse(TxtNumFactura.Text);
                factura.Fecha         = DtFecha.Value;
                factura.Proveedor.Id  = ((Proveedor)CbEmpresas.SelectedItem).Id;
                factura.BaseImponible = decimal.Parse(TxtBaseImponible.Text);
                factura.Iva           = decimal.Parse(TxtIva.Text);
                factura.Total         = decimal.Parse(TxtTotalFactura.Text);

                if (Convert.ToInt32(BtnAddFactura.Tag) == 1)                // Insertamos la nueva factura.
                {
                    factura.Garaje.Id = ((Garaje)CbGarajes.SelectedItem).Id;
                    if (factura.Insertar())
                    {
                        MessageBox.Show("Factura guardada", "Factura Guardada", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        BindingSource.DataSource = FacturaRecibida.ObtenerFacturas();

                        int pos = ((List <FacturaRecibida>)BindingSource.DataSource).IndexOf(new FacturaRecibida(factura.Id));
                        BindingSource.Position = pos;

                        HabilitarControles(false);
                        CargarDatosComboBox(true, true, false);
                    }
                    else
                    {
                        MessageBox.Show("Ha habido un problema al guardar la factura", "Factura no Guardada", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                else if (Convert.ToInt32(BtnModificarFactura.Tag) == 1)             // Modificamos los datos de la factura.
                {
                    if (factura.Modificar())
                    {
                        MessageBox.Show("Factura modificada", "Factura Modificada", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        BindingSource.DataSource = FacturaRecibida.ObtenerFacturas();

                        int pos = ((List <FacturaRecibida>)BindingSource.DataSource).IndexOf(new FacturaRecibida(factura.Id));
                        BindingSource.Position = pos;

                        HabilitarControles(false);
                        CargarDatosComboBox(false, true, false);
                    }
                    else
                    {
                        MessageBox.Show("Ha habido un problema al modificar la factura", "Factura no Modificada", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }
            RestaurarTagsBotones();
        }
예제 #11
0
        private void BtnImprFactRecibida_Click(object sender, EventArgs e)
        {
            List <FacturaRecibida> listaFacturas = FacturaRecibida.ObtenerFacturasPorFechasInforme(DtFechaInicio.Value, DtFechaFin.Value);

            if (listaFacturas.Count == 0)
            {
                MessageBox.Show("No hay facturas recibidas para mostrar según las fechas escogidas", "No Existen Facturas", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                FrmFacturasRecibidas frmFacturasRecibidas = new FrmFacturasRecibidas(listaFacturas, DtFechaInicio.Value, DtFechaFin.Value);
                frmFacturasRecibidas.ShowDialog();
            }
        }
예제 #12
0
 private void FrmFactsRecibida_Load(object sender, EventArgs e)
 {
     CargarDatosComboBox(true, true, true);
     if (FacturaRecibida.HayFacturas())
     {
         BindingSource.DataSource = FacturaRecibida.ObtenerFacturas();
         RellenarDatosFactura((FacturaRecibida)BindingSource.Current);
     }
     else
     {
         MessageBox.Show("No hay facturas para mostrar. Introduzca una.", "No hay Facturas", MessageBoxButtons.OK, MessageBoxIcon.Information);
         BtnModificarFactura.Enabled = false;
         BtnEliminarFactura.Enabled  = false;
     }
 }
예제 #13
0
        public ActionResult Rechazar(FacturaRecibida facturaRecibida)
        {
            if (ModelState.IsValid)
            {
                _db.Entry(facturaRecibida).State = System.Data.Entity.EntityState.Modified;
                _db.SaveChanges();

                _operacionesCfdisRecibidos = new OperacionesCfdisRecibidos(ObtenerSucursal());
                _operacionesCfdisRecibidos.Autorizar(false, facturaRecibida.Id, ObtenerUsuario(), null);

                return(RedirectToAction("VerTodos"));
            }

            return(View(facturaRecibida));
        }
예제 #14
0
        /// <summary>
        /// Carga los datos a los distintos ComboBox.
        /// </summary>
        /// <param name="cargarFechas">Indica si hay que cargar las fechas.</param>
        /// <param name="cargarEmpresas">Indica si hay que cargar las empresas.</param>
        /// <param name="cargarGarajes">Indica si hay que cargar los garajes para buscar.</param>
        private void CargarDatosComboBox(bool cargarFechas, bool cargarEmpresas, bool cargarGarajes)
        {
            if (cargarFechas)
            {
                CbFechas.DataSource = FacturaRecibida.ObtenerFechas();
            }

            if (cargarEmpresas)
            {
                CbEmpBuscar.DataSource    = Proveedor.ObtenerNombresEmpresas();
                CbEmpBuscar.DisplayMember = "Empresa";
            }

            if (cargarGarajes)
            {
                CbGjBuscar.DataSource    = Garaje.ObtenerGarajes();
                CbGjBuscar.DisplayMember = "Nombre";
                CbGjBuscar.ValueMember   = "Id";
            }
        }
예제 #15
0
        private void BtnEliminarFactura_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("¿Está seguro de que desea eliminar la factura?", "¿Eliminar Factura?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                FacturaRecibida factura = (FacturaRecibida)BindingSource.Current;

                if (factura.Eliminar())
                {
                    MessageBox.Show("Factura eliminada", "Factura Eliminada", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    BindingSource.DataSource = FacturaRecibida.ObtenerFacturas();
                    HabilitarControles(false);
                    CargarDatosComboBox(true, true, false);
                    BindingSource.Position = BindingSource.Count - 1;
                }
                else
                {
                    MessageBox.Show("Ha habido un problema al eliminar la factura", "Factura no Eliminada", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
예제 #16
0
        private Proveedor ChecarProveedor(FacturaRecibida facturaRecibida, int sucursalId)
        {
            var proveedor = _db.Proveedores.FirstOrDefault(p => p.Rfc == facturaRecibida.Emisor.Rfc);

            if (proveedor != null)
            {
                return(proveedor);
            }

            var sucursal = _db.Sucursales.Find(sucursalId);

            proveedor = new Proveedor
            {
                RazonSocial = facturaRecibida.Emisor.RazonSocial,
                Rfc         = facturaRecibida.Emisor.Rfc,
                Pais        = "MEX",
                GrupoId     = sucursal.GrupoId
            };
            _db.Proveedores.Add(proveedor);

            try
            {
                _db.SaveChanges();
            }
            catch (DbEntityValidationException dbEx)
            {
                var errores = new List <String>();
                foreach (var validationErrors in dbEx.EntityValidationErrors)
                {
                    foreach (var validationError in validationErrors.ValidationErrors)
                    {
                        errores.Add(String.Format("Propiedad: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage));
                    }
                }
                throw new Exception(string.Join(",", errores.ToArray()));
            }

            return(proveedor);
        }
        private void FrmSeleccionMesOAnio_Load(object sender, EventArgs e)
        {
            List <string> mesesAnio = CultureInfo.CurrentCulture.DateTimeFormat.MonthNames.ToList <string>();         // Obtenemos los meses del año.

            for (int i = 0; i < mesesAnio.Count; i++)
            {
                if (i == mesesAnio.Count - 1)      // La última posición de la lista está vacía.
                {
                    mesesAnio.RemoveAt(i);
                }
                else
                {
                    string mes       = mesesAnio[i];
                    char[] letrasMes = mes.ToCharArray();
                    letrasMes[0] = char.ToUpper(mes[0]);
                    mesesAnio[i] = new string(letrasMes);
                }
            }

            CbMeses.DataSource = mesesAnio;
            CbAnios.DataSource = FacturaRecibida.ObtenerAniosFechas();
        }
예제 #18
0
        private void BtnAddFactura_Click(object sender, EventArgs e)
        {
            BtnAddFactura.Tag       = 1;
            CbGarajes.DataSource    = Garaje.ObtenerGarajes();
            CbGarajes.DisplayMember = "Nombre";
            CbGarajes.ValueMember   = "Id";

            CbEmpresas.DataSource    = Proveedor.ObtenerNombresEmpresas();
            CbEmpresas.DisplayMember = "Empresa";
            CbEmpresas.ValueMember   = "Id";

            HabilitarControles(true);
            TxtNumFactura.Focus();
            FacturaRecibida factura = (FacturaRecibida)BindingSource.Current;

            if (factura != null)
            {
                if (factura.Id != 0)
                {
                    LimpiarCampos();
                }
            }
        }
예제 #19
0
        public FacturaRecibida GuardarFacturaRecibida(Comprobante comprobante, byte[] xml)
        {
            var facturaRecibida = new FacturaRecibida
            {
                Fecha                     = Convert.ToDateTime(comprobante.Fecha),
                Folio                     = comprobante.Folio,
                FormaPago                 = comprobante.FormaPago,
                MetodoPago                = comprobante.MetodoPago,
                Moneda                    = comprobante.Moneda,
                Serie                     = comprobante.Serie,
                Subtotal                  = Convert.ToDouble(comprobante.SubTotal),
                TipoCambio                = Convert.ToDouble(comprobante.TipoCambio),
                TipoComprobante           = comprobante.TipoDeComprobante,
                TotalImpuestosRetenidos   = Convert.ToDouble(comprobante.Impuestos.TotalImpuestosRetenidos ?? "0.0"),
                TotalImpuestosTrasladados = Convert.ToDouble(comprobante.Impuestos.TotalImpuestosTrasladados ?? "0.0"),
                Total                     = Convert.ToDouble(comprobante.Total),
                Uuid             = _decodificar.DecodificarTimbre(comprobante).UUID,
                ArchivoFisicoXml = xml,

                FechaTimbrado = DateTime.Now
            };

            var receptor = _db.Sucursales.First(s => s.Rfc == comprobante.Receptor.Rfc);
            var emisor   = _db.Proveedores.First(s => s.Rfc == comprobante.Emisor.Rfc);

            //Asignaciones Facturas
            facturaRecibida.EmisorId   = emisor.Id;
            facturaRecibida.ReceptorId = receptor.Id;

            facturaRecibida.Emisor   = null;
            facturaRecibida.Receptor = null;

            _db.FacturasRecibidas.Add(facturaRecibida);
            _db.SaveChanges();

            return(facturaRecibida);
        }
예제 #20
0
        private void PopularArchivos(ref FacturaRecibida facturaRecibida)
        {
            if (Request.Files.Count > 0)
            {
                for (int i = 0; i < Request.Files.Count; i++)
                {
                    if (Request.Files[i].ContentLength > 0)
                    {
                        var operacionesStreams = new OperacionesStreams();
                        var nombreArchivo      = Path.GetFileName(Request.Files[i].FileName);

                        var    pathDestino = Path.Combine(Server.MapPath("~/Archivos/Validaciones/"), Request.Files[i].FileName);
                        Stream fileStream  = Request.Files[i].InputStream;
                        var    mStreamer   = new MemoryStream();
                        mStreamer.SetLength(fileStream.Length);
                        fileStream.Read(mStreamer.GetBuffer(), 0, (int)fileStream.Length);
                        mStreamer.Seek(0, SeekOrigin.Begin);
                        var arreglo = operacionesStreams.StreamByteArray(mStreamer);
                        operacionesStreams.StreamArchivo(mStreamer, pathDestino);

                        switch (Path.GetExtension(Request.Files[i].FileName).ToLower())
                        {
                        case ".xml":
                            facturaRecibida.NombreArchivoXml = Request.Files[i].FileName;
                            facturaRecibida.ArchivoFisicoXml = arreglo;
                            break;

                        default:
                            throw new Exception("Tipo de archivo Inválido");
                        }

                        mStreamer.Close();
                    }
                }
            }
        }
예제 #21
0
        /// <summary>
        /// Constructor de ARInvoice.
        /// </summary>
        /// <param name="registroLRFacturasRecibidas">Objeto serialización xml facturas emitidas.</param>
        public APInvoice(RegistroLRFacturasRecibidas registroLRFacturasRecibidas)
        {
            APInvoicePayments = new List <APInvoicePayment>();
            InvoicesRectified = new List <InvoiceRectified>();

            RegistroLRFacturasRecibidas siiInvoice = registroLRFacturasRecibidas;

            InvoiceNumber = siiInvoice.IDFactura.NumSerieFacturaEmisor;
            IssueDate     = Convert.ToDateTime(siiInvoice.IDFactura.FechaExpedicionFacturaEmisor);
            PostingDate   = Convert.ToDateTime(siiInvoice.FacturaRecibida.FechaRegContable);

            if (Settings.Current.IDVersionSii.CompareTo("1.1") >= 0 && siiInvoice.FacturaRecibida.ADeducirEnPeriodoPosterior == "S")
            {
                TaxDate = new DateTime(Convert.ToInt32(siiInvoice.FacturaRecibida.EjercicioDeduccion),
                                       Convert.ToInt32(siiInvoice.FacturaRecibida.PeriodoDeduccion), 1);
            }


            if (siiInvoice.FacturaRecibida.FechaOperacion != null)
            {
                OperationIssueDate = Convert.ToDateTime(siiInvoice.FacturaRecibida.FechaOperacion);
            }

            SellerParty = new Party()
            {
                TaxIdentificationNumber = siiInvoice.IDFactura.IDEmisorFactura.NIF,
                PartyName = siiInvoice.FacturaRecibida.Contraparte.NombreRazon
            };

            if (siiInvoice.FacturaRecibida.Contraparte.IDOtro != null)
            {
                // Si no es un nif español

                IDOtroType =
                    (IDOtroType)Convert.ToInt32(
                        siiInvoice.FacturaRecibida.Contraparte.IDOtro.IDType);

                CountryCode = siiInvoice.FacturaRecibida.Contraparte.IDOtro.CodigoPais;
                SellerParty.TaxIdentificationNumber = siiInvoice.FacturaRecibida.Contraparte.IDOtro.ID;
            }


            if (SellerParty == null)
            {
                throw new ArgumentNullException("SellerParty is null.");
            }

            if (IssueDate == null)
            {
                throw new ArgumentNullException("IssueDate is null.");
            }

            if (PostingDate == null)
            {
                throw new ArgumentNullException("PostingDate is null.");
            }

            InvoiceType invoiceType;

            if (!Enum.TryParse <InvoiceType>(siiInvoice.FacturaRecibida.TipoFactura, out invoiceType))
            {
                throw new InvalidOperationException($"Unknown invoice type {siiInvoice.FacturaRecibida.TipoFactura}");
            }

            InvoiceType = invoiceType;


            ClaveRegimenEspecialOTrascendencia =
                (ClaveRegimenEspecialOTrascendencia)Convert.ToInt32(
                    siiInvoice.FacturaRecibida.ClaveRegimenEspecialOTrascendencia);

            // Gestion rectificativa

            if (siiInvoice.FacturaRecibida.TipoRectificativa != null)
            {
                if (!siiInvoice.FacturaRecibida.TipoFactura.StartsWith("R"))
                {
                    throw new ArgumentException("For TipoRectificativa not null TipoFactura must begin with 'R'.");
                }

                FacturaRecibida facturaRecibidaRectificativa = siiInvoice.FacturaRecibida;

                if (facturaRecibidaRectificativa.ImporteRectificacion != null)
                {
                    RectifiedBase   = SIIParser.ToDecimal(facturaRecibidaRectificativa.ImporteRectificacion.BaseRectificada);
                    RectifiedAmount = SIIParser.ToDecimal(facturaRecibidaRectificativa.ImporteRectificacion.CuotaRectificada);
                }

                RectifiedType rectifiedType;

                if (Enum.TryParse <RectifiedType>(facturaRecibidaRectificativa.TipoRectificativa, out rectifiedType))
                {
                    RectifiedType = rectifiedType;
                }

                if (facturaRecibidaRectificativa.FacturasRectificadas.Count == 0)
                {
                    throw new ArgumentException("FacturasRectificadas without elements.");
                }


                foreach (var regRect in facturaRecibidaRectificativa.FacturasRectificadas)
                {
                    InvoiceRectified invoiceRectified = new InvoiceRectified();

                    invoiceRectified.RectifiedInvoiceNumber = regRect.NumSerieFacturaEmisor;
                    invoiceRectified.RectifiedIssueDate     = Convert.ToDateTime(regRect.FechaExpedicionFacturaEmisor);

                    InvoicesRectified.Add(invoiceRectified);
                }
            }

            // Gestion desgloses

            decimal taxRate, taxBase, taxAmount, taxRateRE, taxAmountRE;

            if (siiInvoice.FacturaRecibida.DesgloseFactura != null)
            {
                DesgloseIVA desgloseIVA = null;
                if (siiInvoice.FacturaRecibida.DesgloseFactura.InversionSujetoPasivo != null &&
                    siiInvoice.FacturaRecibida.DesgloseFactura.InversionSujetoPasivo.DetalleIVA.Count > 0)
                {
                    desgloseIVA = siiInvoice.FacturaRecibida.DesgloseFactura.InversionSujetoPasivo;
                }
                else
                {
                    if (siiInvoice.FacturaRecibida.DesgloseFactura.DesgloseIVA == null)
                    {
                        throw new ArgumentException("For InversionSujetoPasivo DesgloseIVA must be present on DesgloseFactura.");
                    }

                    desgloseIVA = siiInvoice.FacturaRecibida.DesgloseFactura.DesgloseIVA;
                }

                foreach (var iva in desgloseIVA.DetalleIVA)
                {
                    taxRate     = SIIParser.ToDecimal(iva.TipoImpositivo);
                    taxBase     = SIIParser.ToDecimal(iva.BaseImponible);
                    taxAmount   = SIIParser.ToDecimal(iva.CuotaSoportada);
                    taxRateRE   = SIIParser.ToDecimal(iva.TipoRecargoEquivalencia);
                    taxAmountRE = SIIParser.ToDecimal(iva.CuotaRecargoEquivalencia);

                    if (Settings.Current.IDVersionSii.CompareTo("1.1") >= 0)
                    {
                        IsAsset = (iva.BienInversion == "S");
                    }

                    TaxesOutputs.Add(taxRate, new decimal[] { taxBase, taxAmount, taxRateRE, taxAmountRE });
                }
            }
            else
            {
                throw new ArgumentException("DesgloseFactura no present in FacturaRecibida.");
            }

            // Gestión cuota deducible

            GrossAmount = SIIParser.ToDecimal(siiInvoice.FacturaRecibida.ImporteTotal);
            InvoiceText = siiInvoice.FacturaRecibida.DescripcionOperacion;
        }
예제 #22
0
        private void CbFechas_SelectionChangeCommitted(object sender, EventArgs e)
        {
            FacturaRecibida factura = FacturaRecibida.ObtenerFacturaPorFecha((DateTime)CbFechas.SelectedItem);

            RellenarDatosFactura(factura);
        }
예제 #23
0
        public void DecodificarFactura(ref FacturaRecibida facturaRecibida, String pathCompleto)
        {
            var serializador = new XmlSerializer(typeof(Comprobante));
            var comprobante  = (Comprobante)serializador.Deserialize(new MemoryStream(facturaRecibida.ArchivoFisicoXml));

            //Complementos
            XmlElement timbreFiscalDigitalFisico = null;
            XmlElement complementoPagosFisico    = null;

            foreach (var complemento in comprobante.Complemento)
            {
                timbreFiscalDigitalFisico = complemento.Any.FirstOrDefault(p => p.OuterXml.Contains("tfd"));
                complementoPagosFisico    = complemento.Any.FirstOrDefault(p => p.OuterXml.Contains("pago10"));
            }

            var timbreFiscalDigital = new TimbreFiscalDigital();

            if (timbreFiscalDigitalFisico != null)
            {
                timbreFiscalDigital = ObtenerComplemento <TimbreFiscalDigital>(timbreFiscalDigitalFisico);
            }

            var complementoPagos = new Pagos();

            if (complementoPagosFisico != null)
            {
                complementoPagos = ObtenerComplemento <Pagos>(complementoPagosFisico);
            }

            //Datos
            facturaRecibida.Fecha           = Convert.ToDateTime(comprobante.Fecha);
            facturaRecibida.NoCertificado   = comprobante.NoCertificado;
            facturaRecibida.TipoComprobante = comprobante.TipoDeComprobante;
            facturaRecibida.Version         = comprobante.Version;
            facturaRecibida.LugarExpedicion = comprobante.LugarExpedicion;
            facturaRecibida.FormaPago       = comprobante.FormaPago;
            facturaRecibida.MetodoPago      = comprobante.MetodoPago;
            facturaRecibida.Serie           = comprobante.Serie;
            facturaRecibida.Folio           = comprobante.Folio;

            //Totales
            facturaRecibida.Subtotal = Convert.ToDouble(comprobante.SubTotal);
            facturaRecibida.Total    = Convert.ToDouble(comprobante.Total);

            //Timbrado
            facturaRecibida.FechaTimbrado    = Convert.ToDateTime(timbreFiscalDigital.FechaTimbrado);
            facturaRecibida.NoCertificadoSat = timbreFiscalDigital.NoCertificadoSAT;
            facturaRecibida.SelloDigitalCfdi = timbreFiscalDigital.SelloCFD;
            facturaRecibida.SelloSat         = timbreFiscalDigital.SelloSAT;
            facturaRecibida.Certificado      = comprobante.Certificado;
            facturaRecibida.Uuid             = timbreFiscalDigital.UUID;

            facturaRecibida.Emisor = new Proveedor
            {
                RazonSocial = comprobante.Emisor.Nombre,
                Rfc         = comprobante.Emisor.Rfc
            };

            facturaRecibida.Receptor = new Sucursal
            {
                Rfc = comprobante.Receptor.Rfc
            };

            try
            {
                facturaRecibida.Descuento = Convert.ToDouble(comprobante.Descuento);
            }
            catch (Exception)
            {
            }
        }
예제 #24
0
        private void FrmResultados_Load(object sender, EventArgs e)
        {
            MostrarFechaInicioYFin();
            Dictionary <string, decimal[]> resultadosGarajes = new Dictionary <string, decimal[]>();

            for (int i = 1; i <= 5; i++)
            {
                if (Mes >= 1)
                {
                    switch (i)
                    {
                    case 1:
                        resultadosGarajes.Add("GM", new decimal[2] {
                            FacturaGaraje.ObtenerSumaBaseImponiblePorSubIdGarajeYMes("GM", Mes),
                            FacturaRecibida.ObtenerSumaBaseImponiblePorSubIdGarajeYMes("GM", Mes)
                        });

                        TxtEmitidasGm.Text  = resultadosGarajes["GM"][0].ToString();
                        TxtRecibidasGm.Text = resultadosGarajes["GM"][1].ToString();
                        TxtResultadoGm.Text = (resultadosGarajes["GM"][0] - resultadosGarajes["GM"][1]).ToString();
                        break;

                    case 2:
                        resultadosGarajes.Add("C2", new decimal[2]
                        {
                            FacturaGaraje.ObtenerSumaBaseImponiblePorSubIdGarajeYMes("C2", Mes),
                            FacturaRecibida.ObtenerSumaBaseImponiblePorSubIdGarajeYMes("C2", Mes)
                        });

                        TxtEmitidasC2.Text  = resultadosGarajes["C2"][0].ToString();
                        TxtRecibidasC2.Text = resultadosGarajes["C2"][1].ToString();
                        TxtResultadoC2.Text = (resultadosGarajes["C2"][0] - resultadosGarajes["C2"][1]).ToString();
                        break;

                    case 3:
                        resultadosGarajes.Add("L", new decimal[2]
                        {
                            FacturaLavadero.ObtenerSumaBaseImponiblePorMes(Mes),
                            FacturaRecibida.ObtenerSumaBaseImponiblePorSubIdGarajeYMes("L", Mes)
                        });

                        TxtEmitidasLv.Text  = resultadosGarajes["L"][0].ToString();
                        TxtRecibidasLv.Text = resultadosGarajes["L"][1].ToString();
                        TxtResultadoLv.Text = (resultadosGarajes["L"][0] - resultadosGarajes["L"][1]).ToString();
                        break;

                    case 4:
                        resultadosGarajes.Add("IM", new decimal[2]
                        {
                            FacturaGaraje.ObtenerSumaBaseImponiblePorSubIdGarajeYMes("IM", Mes),
                            FacturaRecibida.ObtenerSumaBaseImponiblePorSubIdGarajeYMes("IM", Mes)
                        });

                        TxtEmitidasIm.Text  = resultadosGarajes["IM"][0].ToString();
                        TxtRecibidasIm.Text = resultadosGarajes["IM"][1].ToString();
                        TxtResultadoIm.Text = (resultadosGarajes["IM"][0] - resultadosGarajes["IM"][1]).ToString();
                        break;

                    case 5:
                        resultadosGarajes.Add("C19", new decimal[2]
                        {
                            FacturaGaraje.ObtenerSumaBaseImponiblePorSubIdGarajeYMes("C19", Mes),
                            FacturaRecibida.ObtenerSumaBaseImponiblePorSubIdGarajeYMes("C19", Mes)
                        });

                        TxtEmitidasC19.Text  = resultadosGarajes["C19"][0].ToString();
                        TxtRecibidasC19.Text = resultadosGarajes["C19"][1].ToString();
                        TxtResultadoC19.Text = (resultadosGarajes["C19"][0] - resultadosGarajes["C19"][1]).ToString();
                        break;
                    }
                }
                else
                {
                    switch (i)
                    {
                    case 1:
                        resultadosGarajes.Add("GM", new decimal[2] {
                            FacturaGaraje.ObtenerSumaBaseImponiblePorSubIdGarajeYAnio("GM", Anio),
                            FacturaRecibida.ObtenerSumaBaseImponiblePorSubIdGarajeYAnio("GM", Anio)
                        });

                        TxtEmitidasGm.Text  = resultadosGarajes["GM"][0].ToString();
                        TxtRecibidasGm.Text = resultadosGarajes["GM"][1].ToString();
                        TxtResultadoGm.Text = (resultadosGarajes["GM"][0] - resultadosGarajes["GM"][1]).ToString();
                        break;

                    case 2:
                        resultadosGarajes.Add("C2", new decimal[2]
                        {
                            FacturaGaraje.ObtenerSumaBaseImponiblePorSubIdGarajeYAnio("C2", Anio),
                            FacturaRecibida.ObtenerSumaBaseImponiblePorSubIdGarajeYAnio("C2", Anio)
                        });

                        TxtEmitidasC2.Text  = resultadosGarajes["C2"][0].ToString();
                        TxtRecibidasC2.Text = resultadosGarajes["C2"][1].ToString();
                        TxtResultadoC2.Text = (resultadosGarajes["C2"][0] - resultadosGarajes["C2"][1]).ToString();
                        break;

                    case 3:
                        resultadosGarajes.Add("L", new decimal[2]
                        {
                            FacturaLavadero.ObtenerSumaBaseImponiblePorAnio(Anio),
                            FacturaRecibida.ObtenerSumaBaseImponiblePorSubIdGarajeYAnio("L", Anio)
                        });

                        TxtEmitidasLv.Text  = resultadosGarajes["L"][0].ToString();
                        TxtRecibidasLv.Text = resultadosGarajes["L"][1].ToString();
                        TxtResultadoLv.Text = (resultadosGarajes["L"][0] - resultadosGarajes["L"][1]).ToString();
                        break;

                    case 4:
                        resultadosGarajes.Add("IM", new decimal[2]
                        {
                            FacturaGaraje.ObtenerSumaBaseImponiblePorSubIdGarajeYAnio("IM", Anio),
                            FacturaRecibida.ObtenerSumaBaseImponiblePorSubIdGarajeYAnio("IM", Anio)
                        });

                        TxtEmitidasIm.Text  = resultadosGarajes["IM"][0].ToString();
                        TxtRecibidasIm.Text = resultadosGarajes["IM"][1].ToString();
                        TxtResultadoIm.Text = (resultadosGarajes["IM"][0] - resultadosGarajes["IM"][1]).ToString();
                        break;

                    case 5:
                        resultadosGarajes.Add("C19", new decimal[2]
                        {
                            FacturaGaraje.ObtenerSumaBaseImponiblePorSubIdGarajeYAnio("C19", Anio),
                            FacturaRecibida.ObtenerSumaBaseImponiblePorSubIdGarajeYAnio("C19", Anio)
                        });

                        TxtEmitidasC19.Text  = resultadosGarajes["C19"][0].ToString();
                        TxtRecibidasC19.Text = resultadosGarajes["C19"][1].ToString();
                        TxtResultadoC19.Text = (resultadosGarajes["C19"][0] - resultadosGarajes["C19"][1]).ToString();
                        break;
                    }
                }
            }

            decimal totalFactsEmitidas  = 0;
            decimal totalFactsRecibidas = 0;

            foreach (KeyValuePair <string, decimal[]> resultado in resultadosGarajes)
            {
                totalFactsEmitidas  += resultado.Value[0];
                totalFactsRecibidas += resultado.Value[1];
            }

            decimal totalFacts = totalFactsEmitidas - totalFactsRecibidas;

            TxtTotalEmitidas.Text  = totalFactsEmitidas.ToString();
            TxtTotalRecibidas.Text = totalFactsRecibidas.ToString();
            TxtTotal.Text          = totalFacts.ToString();
        }
예제 #25
0
        /// <summary>
        /// Función para tratar el registro de factura que se acaba de leer.
        /// </summary>
        /// <param name="_CamposReg"></param>
        /// <returns></returns>
        private RegistroLRFacturasRecibidas TratarFactRecibida(string[] _CamposReg)
        {
            RegistroLRFacturasRecibidas _RegLRFactReciWRK = new RegistroLRFacturasRecibidas();

            // Informamos el periodo impositivo.
            PeriodoImpositivo _PeriodoWrk = new PeriodoImpositivo
            {
                Ejercicio = _CamposReg[1],
                Periodo   = _CamposReg[2]
            };

            _RegLRFactReciWRK.PeriodoImpositivo = _PeriodoWrk;

            // Informamos el IDFactura.
            IDFactura       _IDFactWrk    = new IDFactura();
            IDEmisorFactura _IDEmisorFact = new IDEmisorFactura();
            Contraparte     _ReceptorWrk  = new Contraparte();

            if (string.IsNullOrWhiteSpace(_CamposReg[4]))
            {
                _IDEmisorFact.NIF = _CamposReg[3];
                _ReceptorWrk.NIF  = _IDEmisorFact.NIF;
            }
            else
            {
                IDOtro _ProveedorExtWrk = new IDOtro
                {
                    CodigoPais = _CamposReg[4],
                    IDType     = _CamposReg[5],
                    ID         = _CamposReg[3]
                };
                _IDEmisorFact.IDOtro = _ProveedorExtWrk;

                _ReceptorWrk.IDOtro = _IDEmisorFact.IDOtro;
            }
            _IDFactWrk.IDEmisorFactura = _IDEmisorFact;

            _IDFactWrk.NumSerieFacturaEmisor        = _CamposReg[6].Trim();
            _IDFactWrk.FechaExpedicionFacturaEmisor = _CamposReg[7];

            _RegLRFactReciWRK.IDFactura = _IDFactWrk;

            // Procedemos a tratar la factura actual.
            FacturaRecibida _FacturaActual = new FacturaRecibida
            {
                //Aquí indicamos si se trata de una factura 'normal' o es 'rectificativa'.
                TipoFactura = _CamposReg[8],
                ClaveRegimenEspecialOTrascendencia = _CamposReg[9],
                ImporteTotal   = ((_CamposReg[10]).Trim()).Replace(',', '.'),
                FechaOperacion = _CamposReg[17]
            };

            if (string.IsNullOrWhiteSpace(_CamposReg[11]))
            {
                _CamposReg[11] = "Hay que informar el concepto de la factura";
            }
            _FacturaActual.DescripcionOperacion = _CamposReg[11].Trim();

            // Informamos la contraparte, que según pruebas con el SOAP, este tiene que ser igual que el IDEmisorFactura
            _ReceptorWrk.NombreRazon   = _CamposReg[12].Trim();
            _FacturaActual.Contraparte = _ReceptorWrk;

            _FacturaActual.FechaRegContable = _CamposReg[13];

            // Procedemos a informar los campos en el caso de que se trate del envio de una factura rectificativa.
            if (!string.IsNullOrWhiteSpace(_CamposReg[14]))
            {
                _FacturaActual.TipoRectificativa = _CamposReg[14];

                ImporteRectificacion _ImpRectifWrk = new ImporteRectificacion
                {
                    BaseRectificada  = ((_CamposReg[15]).Trim()).Replace(',', '.'),
                    CuotaRectificada = ((_CamposReg[16]).Trim()).Replace(',', '.')
                };
                _FacturaActual.ImporteRectificacion = _ImpRectifWrk;
            }

            // Procedemos a informar la cuota deducible en el caso de que corresponda.
            // Si no viene informada la cuota deducible, pondremos '-1' con el fin de que al volver a generarse el lote
            // la ponga a cero, y si no la calcule.
            if (string.IsNullOrWhiteSpace(_CamposReg[18]))
            {
                _FacturaActual.CuotaDeducible = "-1";
            }
            else
            {
                _FacturaActual.CuotaDeducible = ((_CamposReg[18]).Trim()).Replace(',', '.');
            }

            _RegLRFactReciWRK.FacturaRecibida = _FacturaActual;


            return(_RegLRFactReciWRK);
        }