public void CreateInvoice_IncorrectInvoice_ExceptionRaised()
        {
            var createInvoice = new CreateInvoice
            {
                Number     = string.Empty,
                DueDate    = DateTime.Now.Date.AddDays(-30),
                TaxAmount  = -420,
                NetAmount  = -2100,
                TotalPrice = -25200,
                Lines      = new List <InvoiceLine>()
                {
                    new InvoiceLine
                    {
                        Description = string.Empty,
                        Quantity    = -10,
                        UnitPrice   = -130,
                        TaxRate     = -2000,
                        TaxAmount   = -260,
                        TotalPrice  = -15600,
                        PoNumber    = string.Empty,
                        IsPaired    = true
                    },
                    new InvoiceLine
                    {
                        Description = "Office",
                        Quantity    = 20,
                        UnitPrice   = 40,
                        TaxRate     = 20,
                        TaxAmount   = 160,
                        TotalPrice  = 960,
                        PoNumber    = "PO000000",
                        IsPaired    = false
                    }
                }
            };

            var client = CreateClient();
            var ex     = Assert.Throws <WebServiceException>(() => client.Post <InvoiceResponse>(createInvoice));

            Assert.IsTrue(ex.ResponseStatus.Errors.Count == 19);
            Assert.IsTrue(ex.ResponseStatus.Errors.Any(e => e.ErrorCode == "NotEmpty" && e.Message == "Specify Number for Invoice."));
            Assert.IsTrue(ex.ResponseStatus.Errors.Any(e => e.ErrorCode == "NotEmpty" && e.Message == "Specify CreatedDate for Invoice."));
            Assert.IsTrue(ex.ResponseStatus.Errors.Any(e => e.ErrorCode == "GreaterThan" && e.Message == "DueDate of Invoice should be greater than today."));
            Assert.IsTrue(ex.ResponseStatus.Errors.Any(e => e.ErrorCode == "NotEqual" && e.Message == "Specify nonempty VendorId for Invoice."));
            Assert.IsTrue(ex.ResponseStatus.Errors.Any(e => e.ErrorCode == "NotEqual" && e.Message == "Specify nonempty CustomerId for Invoice."));
            Assert.IsTrue(ex.ResponseStatus.Errors.Any(e => e.ErrorCode == "GreaterThanOrEqual" && e.Message == "TaxAmount of Invoice should be greater than or equal to 0."));
            Assert.IsTrue(ex.ResponseStatus.Errors.Any(e => e.ErrorCode == "GreaterThanOrEqual" && e.Message == "NetAmount of Invoice should be greater than or equal to 0."));
            Assert.IsTrue(ex.ResponseStatus.Errors.Any(e => e.ErrorCode == "GreaterThanOrEqual" && e.Message == "TotalPrice of Invoice should be greater than or equal to 0."));
            Assert.IsTrue(ex.ResponseStatus.Errors.Any(e => e.ErrorCode == "Predicate" && e.Message == "TotalPrice should be equals to NetAmount+TaxAmount with tolerance:0.5."));
            Assert.IsTrue(ex.ResponseStatus.Errors.Any(e => e.ErrorCode == "NotEmpty" && e.Message == "Each line in Invoice should have Description."));
            Assert.IsTrue(ex.ResponseStatus.Errors.Any(e => e.ErrorCode == "GreaterThanOrEqual" && e.Message == "Invoice quantity should be positive or zero."));
            Assert.IsTrue(ex.ResponseStatus.Errors.Any(e => e.ErrorCode == "GreaterThanOrEqual" && e.Message == "Invoice UnitPrice should be positive or zero."));
            Assert.IsTrue(ex.ResponseStatus.Errors.Any(e => e.ErrorCode == "GreaterThanOrEqual" && e.Message == "Invoice TaxRate should be positive or zero."));
            Assert.IsTrue(ex.ResponseStatus.Errors.Any(e => e.ErrorCode == "GreaterThanOrEqual" && e.Message == "Invoice TaxAmount should be positive or zero."));
            Assert.IsTrue(ex.ResponseStatus.Errors.Any(e => e.ErrorCode == "GreaterThanOrEqual" && e.Message == "Invoice TotalPrice should be positive or zero."));
            Assert.IsTrue(ex.ResponseStatus.Errors.Any(e => e.ErrorCode == "NotEmpty" && e.Message == "PurchaseOrder number should be specified for each line in Invoice."));
            Assert.IsTrue(ex.ResponseStatus.Errors.Any(e => e.ErrorCode == "Equal" && e.Message == "Initial IsPaired state should be false."));
            Assert.IsTrue(ex.ResponseStatus.Errors.Any(e => e.ErrorCode == "Predicate" && e.Message == "TaxAmount doesn't corresponds to TaxRate with tolerance:0.5."));
            Assert.IsTrue(ex.ResponseStatus.Errors.Any(e => e.ErrorCode == "Predicate" && e.Message == "Total of line should be equal to UnitPrice*Quantity+TaxAmount with tolerance:0.5."));
        }
Beispiel #2
0
        public ActionResult Create(CreateInvoice formModel)
        {
            var repo    = new InvoiceRepository(_context);
            var invoice = new Invoice()
            {
                ClientId      = formModel.ClientId,
                InvoiceNumber = formModel.InvoiceNumber,
                Status        = formModel.Status,
                DateOpened    = DateTimeOffset.Now
            };

            try
            {
                repo.Insert(invoice);
                return(RedirectToAction("Index"));
            }
            catch (SqlException se)
            {
                if (se.Number == 2627)
                {
                    ModelState.AddModelError("InvoiceNumber", "That number is already taken.");
                }
            }
            return(View(formModel));
        }
        public ActionResult Create()
        {
            var formModel = new CreateInvoice();

            formModel.PopulateSelectLists(context);
            return(View("Create", formModel));
        }
        public async Task <ActionResult <Invoice> > Post([FromBody] CreateInvoice request)
        {
            try
            {
                var invoice = await _useCases.Invoke <Invoice>(request);

                return(Ok(invoice));
            }
            catch (InvalidInvoiceException ex)
            {
                _logger.LogError(ex, "Invalid invoice");

                return(BadRequest(new { message = ex.Message, errors = ex.Errors.Select(error => new { message = error }) }));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Error creating invoice");

                while (ex.InnerException != null)
                {
                    ex = ex.InnerException;
                }

                return(StatusCode(500, new { message = ex.Message, details = ex.StackTrace }));
            }
        }
Beispiel #5
0
        public ActionResult Create()
        {
            var clientRepo = new ClientRepository(_context);
            var formModel  = new CreateInvoice()
            {
                ClientList = clientRepo.GetSelectListItems()
            };

            return(View(formModel));
        }
Beispiel #6
0
        public void CreateInvoice()
        {
            var list = new List <Interface.IprivetOrder>();

            for (int i = 0; i < 20; i++)
            {
                list.Add(new PrivateOrder());
            }

            var test = new CreateInvoice <Interface.IprivetOrder>(list, new PrivateCustomer(), new BankAcc(), new Department(), 10, "789465132");

            test.StartExcel();
        }
        public async Task <ActionResult> AddInvoiceEntry([FromBody] CreateInvoice command)
        {
            CommandResult result = await _mediator.Send(command);

            if (result.OK)
            {
                return(Ok(result));
            }
            else
            {
                return(BadRequest(result));
            }
        }
Beispiel #8
0
        public ActionResult Create(CreateInvoice model)
        {
            try
            {
                Client  client     = new ClientRepository(context).GetById(model.ClientId);
                Invoice newInvoice = new Invoice(model.InvoiceNumber, client);
                newInvoice.DateCreated = DateTimeOffset.Now;
                new InvoiceRepository(context).Insert(newInvoice);
                return(RedirectToAction("Index"));
            }
            catch { }

            return(View());
        }
        private void cmdCreateInvoice_Click(object sender, EventArgs e)
        {
            var customerManager       = new CustomerManager();
            var fileUtil              = new FileUtil();
            var usedServiceRepository = new UsedServiceRepository(fileUtil);
            var getUsedServices       = new GetUsedServices(usedServiceRepository, customerManager);
            var getPrice              = new GetPrice();
            var preview       = new Preview(txtInvoice);
            var createInvoice = new CreateInvoice(customerManager, getUsedServices, getPrice, preview);
            var customerId    = ((ComboBoxItem)cmbUgyfel.SelectedItem).Value;


            createInvoice.Execute(customerId);
        }
Beispiel #10
0
        public InvoiceResponse Post(CreateInvoice request)
        {
            try
            {
                InvoiceModel result = request.ConvertTo <InvoiceModel>();
                invoiceRepository.Create(result);

                return(result.ConvertTo <InvoiceResponse>());
            }
            catch (Exception ex)
            {
                Log.Error(ex, "Something went wrong while posting Invoice.");
                throw;
            }
        }
Beispiel #11
0
        public void CreateInvoiceTest()
        {
            Identifier identifier = new Identifier
            {
                Email     = "*****@*****.**",
                Reference = "Refernce"
            };
            Link linkSelf       = new Link("Href1", "title", "Method");
            Link paymentMethods = new Link("Href2", "paymethodstitle", "paymethods");
            Link address        = new Link("Href3", "addresstitle", "address");

            CustomerLinks customerLinks = new CustomerLinks(linkSelf, paymentMethods, address);
            Customer      customer      = new Customer("1813221695", "customer description", identifier, customerLinks);

            LineItem        lineItem  = new LineItem("1", "Name", "Desc", 2, "4", false);
            List <LineItem> lineITems = new List <LineItem>();

            lineITems.Add(lineItem);

            Tax tax = new Tax(1, "tax", 2, "taxt");

            CreateInvoice createInvoice = new CreateInvoice("54321", "Invoice description", customer, "Test Payer", "2020-01-01", 10, 1, 1, 20, lineITems, tax, false);
            string        authorization = "Basic asdadsa";

            mockRestClient.Expects.One.Method(v => v.Execute(new RestRequest())).With(NMock.Is.TypeOf(typeof(RestRequest))).WillReturn(invoiceResponse);
            ApiClient apiClient = new ApiClient(mockRestClient.MockObject);

            apiClient.Configuration = null;

            Configuration configuration = new Configuration
            {
                ApiClient      = apiClient,
                Username       = "******",
                Password       = "******",
                AccessToken    = null,
                ApiKey         = null,
                ApiKeyPrefix   = null,
                TempFolderPath = null,
                DateTimeFormat = null,
                Timeout        = 60000,
                UserAgent      = "asdasd"
            };

            instance = new InvoicesApi(configuration);
            var response = instance.CreateInvoice(createInvoice, authorization);

            Assert.IsInstanceOf <Invoice>(response, "response is Invoice");
        }
Beispiel #12
0
        public static Invoice CrearFactura(string token, CreateInvoice facturaACrear)
        {
            Response respuestaServicio;

            respuestaServicio = TicoPayDll.Invoices.InvoiceController.CreateNewInvoice(facturaACrear, token).GetAwaiter().GetResult();
            if (respuestaServicio.status == ResponseType.Ok)
            {
                JsonCreateInvoice invoice = JsonConvert.DeserializeObject <JsonCreateInvoice>(respuestaServicio.result);
                return(invoice.objectResponse);
            }
            else
            {
                Console.WriteLine(respuestaServicio.message);
                return(null);
            }
        }
Beispiel #13
0
        public void ExecuteTest()
        {
            //Arrange

            // GetUsedServices objektum mockolása
            var getUsedServices = Substitute.For <IGetUsedServices>();
            var services        = new List <ServiceModel>();

            services.Add(new ServiceModel {
                Id = ServiceKey.Hajvagas, Name = "Hajvágás", TaxRate = 27
            });
            services.Add(new ServiceModel {
                Id = ServiceKey.Hajszaritas, Name = "Hajszárítás", TaxRate = 27
            });
            getUsedServices.Execute("01").Returns(services);

            // CustomerManager objektum mockolása
            var customerManager = Substitute.For <ICustomerManager>();
            var customers       = new List <CustomerModel>();

            customers.Add(new CustomerModel {
                Id = "01", BithDate = new DateTime(2000, 5, 28), Name = "Kiss Dorottya"
            });
            customerManager.GetAll().Returns(customers);

            // GetPrice objektum mockolása
            var getPrice = Substitute.For <IGetPrice>();

            getPrice.Execute(ServiceKey.Hajvagas).Returns(10000);
            getPrice.Execute(ServiceKey.Hajszaritas).Returns(5900);

            // Preview objektum mockolása
            var preview = Substitute.For <IPreview>();

            // CreateInvoice objektum példányosítása
            // Ez a tesztelés alatt álló objektum (ezért ez nem mock példány)
            var createInvoice = new CreateInvoice(customerManager, getUsedServices, getPrice, preview);

            //Act
            createInvoice.Execute("01");

            //Assert
            getPrice.Received(1).Execute(ServiceKey.Hajvagas);
            getPrice.Received(1).Execute(ServiceKey.Hajszaritas);
        }
        public void CreateInvoice_InvoiceWithOutLines_ExceptionRaised()
        {
            var createInvoice = new CreateInvoice
            {
                Number      = "INV00900109",
                CreatedDate = DateTime.Now,
                DueDate     = DateTime.Now.Date.AddDays(30),
                TaxAmount   = 420,
                NetAmount   = 2100,
                TotalPrice  = 2520,
                Lines       = new List <InvoiceLine>()
            };

            var client = CreateClient();
            var ex     = Assert.Throws <WebServiceException>(() => client.Post <InvoiceResponse>(createInvoice));

            Assert.IsTrue(ex.ResponseStatus.Errors.Any(e => e.ErrorCode == "NotEmpty" && e.Message == "Specify at least one Line for Invoice."));
        }
Beispiel #15
0
        public async Task <IActionResult> Create([FromBody] CreateInvoice Request)
        {
            try
            {
                List <long> listOfProductIds = new List <long>();

                if (!ModelState.IsValid)
                {
                    return(BadRequest(new
                    {
                        error = "Your Model state is not valid"
                    }));
                }
                var exist = await customerService.customerExist(Request.customerId);

                if (!exist)
                {
                    return(BadRequest(new
                    {
                        error = "Not a registered Customer"
                    }));
                }
                Request.createOrders.ForEach(x => listOfProductIds.Add(x.productId));
                var invalidProduct = await productService.InvalidProducts(listOfProductIds);

                if (invalidProduct.Any())
                {
                    return(NotFound(new
                    {
                        error = "product(s) ids are Invalid:" + string.Join(",", invalidProduct)
                    }));
                }
                var created = await invoiceService.AddInovoiceAsync(Request);

                var baseUrl     = $"{HttpContext.Request.Scheme}://{HttpContext.Request.Host.ToUriComponent()}";
                var locationUri = baseUrl + "/" + ApiRoutes.Invoice.Get.Replace("{invoiceId}", Request.Id.ToString());
                return(Created(locationUri, created));
            }
            catch (Exception ex)
            {
                logger.LogError(ex.Message + ":" + ex.StackTrace);
                throw;
            }
        }
        public void CreateInvoice_CorrectInvoice_InvoiceCreated()
        {
            var createInvoice = new CreateInvoice
            {
                Number      = "INV00900299",
                CreatedDate = DateTime.Now,
                DueDate     = DateTime.Now.Date.AddDays(30),
                CustomerId  = starbucksBPResponse.Id,
                VendorId    = microsoftBPResponse.Id,
                TaxAmount   = 368.99,
                NetAmount   = 1844.95,
                TotalPrice  = 2213.94,
                Lines       = new List <InvoiceLine>()
                {
                    new InvoiceLine
                    {
                        Description = "Xbox One S NBA 2K20 Bundle (1TB)",
                        Quantity    = 5,
                        UnitPrice   = 299,
                        TaxRate     = 20,
                        TaxAmount   = 299,
                        TotalPrice  = 1794,
                        PoNumber    = "PO000000",
                        IsPaired    = false
                    },
                    new InvoiceLine
                    {
                        Description = "WRC 9 Deluxe Edition FIA World Rally Championship",
                        Quantity    = 5,
                        UnitPrice   = 69.99,
                        TaxRate     = 20,
                        TaxAmount   = 69.99,
                        TotalPrice  = 419.94,
                        PoNumber    = "PO000000",
                        IsPaired    = false
                    }
                }
            };

            var service  = appHost.Container.Resolve <InvoiceService>();
            var response = service.Post(createInvoice);

            Assert.IsTrue(response.Id != Guid.Empty);
        }
        public ActionResult Create(CreateInvoice formModel)
        {
            InvoiceRepo repo = new InvoiceRepo(context);

            try
            {
                var invoice = new Invoice(formModel.InvoiceNumber, formModel.Status, formModel.ClientId);
                invoice.Status = InvoiceStatus.Open;
                repo.Insert(invoice);
                return(RedirectToAction("Index"));
            }
            catch (DbUpdateException ex)
            {
                HandleDbUpdateException(ex);
            }

            formModel.PopulateSelectLists(context);
            return(View("Create", formModel));
        }
        public async Task can_create_invoice()
        {
            server.RespondWithJsonTestFile();
            var newInvoice = new CreateInvoice
            {
                BusinessName  = "BIZ NAME",
                CustomerEmail = "*****@*****.**",
                CustomerName  = "Some User",
                LocalPrice    = new Money
                {
                    Amount   = 10.0m,
                    Currency = "USD"
                },
                Memo = "HELLO WORLD"
            };

            var r = await api.CreateInvoiceAsync(newInvoice);

            server.ShouldHaveCalledSomePath("/invoices")
            .WithRequestJson(newInvoice)
            .WithVerb(HttpMethod.Post);

            await Verifier.Verify(r);
        }
Beispiel #19
0
        public ActionResult Create()
        {
            string customerid = "";

            if (!String.IsNullOrEmpty(Request.QueryString["cid"]))
            {
                customerid = Request.QueryString["cid"].ToString();
            }

            CreateInvoice crinv = new CreateInvoice();

            if (customerid != "")
            {
                crinv = new CreateInvoice().GetInvoice(Session["companyid"].ToString(), customerid);
                crinv.templatedata = GetInvoiceTemplate(crinv.templateid);
                return(View(crinv));
            }
            else
            {
                crinv = new CreateInvoice().GetInvoice(Session["companyid"].ToString());
                crinv.templatedata = GetInvoiceTemplate(crinv.templateid);
                return(View(crinv));
            }
        }
Beispiel #20
0
        static void Main(string[] args)
        {
            string token    = "";
            string tenancy  = "tutorial";
            string user     = "******";
            string password = "******";

            Console.WriteLine("Realizando login en " + tenancy);
            token = Metodos_Seccion_Account.ApiAccount.AutentificarUsuario(tenancy, user, password);
            if (token != "")
            {
                string Opcion     = "";
                bool   Ejecutando = true;
                Console.WriteLine("Token asignado: " + token);
                Console.WriteLine("Este Token tiene una duracion de 20 min, para extenderlo utilize la funcion RefreshToken");
                Console.ReadKey();
                while (Ejecutando)
                {
                    Console.Clear();
                    Console.WriteLine("Seleccione Operacion a Realizar: ");
                    Console.WriteLine("1: Insertar Cliente Ejemplo ");
                    Console.WriteLine("2: Consultar Clientes ");
                    Console.WriteLine("3: Consultar Impuestos ");
                    Console.WriteLine("4: Consultar Servicios ");
                    Console.WriteLine("5: Crear Servicio Ejemplo ");
                    Console.WriteLine("6: Crear Factura de Contado con Cliente Registrado y servicio registrado");
                    Console.WriteLine("7: Crear Factura de Contado Sin Registrar el Cliente y sin registrar servicios");
                    Console.WriteLine("8: Crear Factura a Credito con Cliente Registrado");
                    Console.WriteLine("9: Consultar Facturas del ultimo Mes");
                    Console.WriteLine("A: Consultar Facturas Enviadas a Tribunet Hacienda");
                    Console.WriteLine("B: Reversar una factura completa (Mediante una nota de Credito)");
                    Console.WriteLine("C: Reverso Parcial de items de una factura (Mediante una nota de Credito)");
                    Console.WriteLine("S: Salir ");
                    Opcion = Console.ReadKey().KeyChar.ToString();
                    if (Opcion.ToUpper().Contains("1"))
                    {
                        Console.WriteLine("Ejecutando Cliente Ejemplo");
                        Client cliente = new Client();
                        cliente.Name               = "Pedro";
                        cliente.LastName           = "Perez";
                        cliente.IdentificationType = IdentificacionTypeTipo.Cedula_Fisica;
                        cliente.Identification     = "923456789";
                        cliente.Email              = "*****@*****.**";
                        Client clienteCreado = Metodos_Seccion_Client.ApiClient.CrearCliente(token, cliente);
                        if (cliente != null)
                        {
                            Console.WriteLine("Cliente Creado :");
                            Console.WriteLine(clienteCreado.Name + " " + clienteCreado.LastName + " " + clienteCreado.Identification);
                        }
                        Console.ReadKey();
                    }
                    if (Opcion.ToUpper().Contains("2"))
                    {
                        Console.WriteLine("Ejecutando Consultar Clientes");
                        Client[] clientes = Metodos_Seccion_Client.ApiClient.BuscarClientes(token);
                        Console.WriteLine(clientes.Length + " encontrados");
                        foreach (Client cliente in clientes)
                        {
                            Console.WriteLine(cliente.Name + " " + cliente.LastName + " " + cliente.Identification);
                        }
                        Console.ReadKey();
                    }
                    if (Opcion.ToUpper().Contains("3"))
                    {
                        Console.WriteLine("Ejecutando Consultar Impuestos");
                        Tax[] impuestos = Metodos_Seccion_Tax.ApiTax.BuscarImpuestos(token);
                        Console.WriteLine(impuestos.Length + " encontrados");
                        foreach (Tax impuesto in impuestos)
                        {
                            Console.WriteLine(impuesto.Name + " " + impuesto.Rate + " " + impuesto.TaxTypes);
                        }
                        Console.ReadKey();
                    }
                    if (Opcion.ToUpper().Contains("4"))
                    {
                        Console.WriteLine("Ejecutando Consultar Servicios");
                        Service[] servicios = Metodos_Seccion_Service.ApiService.BuscarServicios(token);
                        Console.WriteLine(servicios.Length + " encontrados");
                        foreach (Service servicio in servicios)
                        {
                            Console.WriteLine(servicio.Name + " " + servicio.Price);
                        }
                        Console.ReadKey();
                    }
                    if (Opcion.ToUpper().Contains("5"))
                    {
                        Console.WriteLine("Ejecutando Crear Servicio Ejemplo ");
                        Tax[]   impuestos = Metodos_Seccion_Tax.ApiTax.BuscarImpuestos(token);
                        Service servicio  = new Service();
                        servicio.Name            = "Eliminacion de Plagas";
                        servicio.IsRecurrent     = false;
                        servicio.Price           = 100;
                        servicio.TaxId           = impuestos.First().Id;
                        servicio.Quantity        = 1;
                        servicio.Id              = "00000000-0000-0000-0000-000000000000";
                        servicio.UnitMeasurement = UnidadMedidaType.Servicios_Profesionales;
                        Service servicioCreado = Metodos_Seccion_Service.ApiService.CrearServicio(token, servicio);
                        if (servicioCreado != null)
                        {
                            Console.WriteLine("Servicio Creado :");
                            Console.WriteLine(servicioCreado.Name + " " + servicioCreado.Price);
                        }
                        Console.ReadKey();
                    }
                    if (Opcion.ToUpper().Contains("6"))
                    {
                        Console.WriteLine("Ejecutando Crear Factura de Contado con Cliente Registrado y servicio registrado");
                        Client[]      clientes  = Metodos_Seccion_Client.ApiClient.BuscarClientes(token);
                        Tax[]         impuestos = Metodos_Seccion_Tax.ApiTax.BuscarImpuestos(token);
                        Service[]     servicios = Metodos_Seccion_Service.ApiService.BuscarServicios(token);
                        CreateInvoice factura   = new CreateInvoice();
                        // Se coloca el ID del cliente en Ticopay al que se le realizara la factura
                        factura.ClientId = clientes.First().Id;
                        // Se inicializan la lista de lineas o items de la factura
                        factura.InvoiceLines = new List <ItemInvoice>();
                        // Se crea un Item
                        ItemInvoice lineaFactura = new ItemInvoice();
                        // lineaFactura.Servicio = "Nombre del item a Facturar";
                        lineaFactura.Note         = "Nota de detalle del item a facturar";
                        lineaFactura.Cantidad     = (decimal)1.5;
                        lineaFactura.IdService    = servicios.First().Id;                                            // Se obtiene el id del servicio previamente creado
                        lineaFactura.Descuento    = 10;                                                              // % El numero en Porcentaje
                        lineaFactura.Precio       = servicios.First().Price;                                         // Se obtiene el Precio del servicio previamente creado
                        lineaFactura.Tipo         = LineType.Service;                                                // Tipo de item ( Servicio o Producto )
                        lineaFactura.UnidadMedida = servicios.First().UnitMeasurement;                               // Se obtiene la unidad de medida del servicio previamente creado
                        decimal montoLinea = Decimal.Round(lineaFactura.Cantidad * lineaFactura.Precio, 2);          // Se calcula el monto base de la linea
                        lineaFactura.TotalDescuento = Decimal.Round((montoLinea * lineaFactura.Descuento) / 100, 2); // Se calcula el descuento de la linea
                        decimal subTotal = Decimal.Round((montoLinea - lineaFactura.TotalDescuento), 2);             // Se calcula el subtotal
                        lineaFactura.IdImpuesto = (Guid)servicios.First().TaxId;                                     // Se obtiene el id del impuesto del servicio previamente creado
                        lineaFactura.Impuesto   = Decimal.Round((servicios.First().Tax.Rate *subTotal) / 100, 2);    // Se calcula el impuesto de la linea apartir de la Tasa del impuesto
                        lineaFactura.Total      = Decimal.Round(lineaFactura.Impuesto + subTotal, 2);                // Se calcula el Total de la factura
                        factura.InvoiceLines.Add(lineaFactura);                                                      // Se agrega la linea a la lista de lineas de la factura
                        // Seccion para simular descuento generales en la factura (Ya que hacienda no soporta descuentos generales , esto aplica el descuento a todas las lineas de la factura)
                        factura.DiscountGeneral     = null;
                        factura.TypeDiscountGeneral = null;
                        // Se inicializa la lista de Pagos de la factura
                        factura.ListPaymentType = new List <PaymentInvoce>();
                        // Se crea un nuevo pago
                        PaymentInvoce formaPago = new PaymentInvoce();
                        formaPago.TypePayment = 0;                  // Tipo de Pago (0 Efectivo, 1 Tarjeta de Credito o Debito, 2 Cheque, 3 Deposito o Transferencia)
                        formaPago.Balance     = lineaFactura.Total; // Total pagado de esta forma
                        formaPago.Trans       = null;               // Numero de referencia, en caso de cheque , Tarjeta, Deposito o transferencia
                        factura.ListPaymentType.Add(formaPago);     // Se agrega la forma de pago a la factura
                        // Se coloca el tipo de moneda de la factura
                        factura.CodigoMoneda = CodigoMoneda.CRC;
                        // Se envia la factura al Api
                        Invoice facturaCreada = Metodos_Seccion_Invoice.ApiInvoice.CrearFactura(token, factura);
                        if (factura != null)
                        {
                            Console.WriteLine("Factura Creada :");
                            // El Api retorna la factura Creada en Ticopay
                            Console.WriteLine(facturaCreada.Status + " " + facturaCreada.Client.Name);
                        }
                        Console.ReadKey();
                    }
                    if (Opcion.ToUpper().Contains("7"))
                    {
                        Console.WriteLine("Crear Factura de Contado Sin Registrar el Cliente y sin registrar servicios");
                        Client[]      clientes  = Metodos_Seccion_Client.ApiClient.BuscarClientes(token);
                        Tax[]         impuestos = Metodos_Seccion_Tax.ApiTax.BuscarImpuestos(token);
                        Service[]     servicios = Metodos_Seccion_Service.ApiService.BuscarServicios(token);
                        CreateInvoice factura   = new CreateInvoice();
                        // Como no se creara un cliente se coloca el ID del cliente en null
                        factura.ClientId = null;
                        // Se rellenan los datos del cliente directo en la factura
                        factura.ClientIdentificationType = IdentificacionTypeTipo.Cedula_Fisica;
                        factura.ClientIdentification     = "123456789";
                        factura.ClientName  = "Pedro Perez";
                        factura.ClientEmail = "*****@*****.**";
                        // El resto de los campos del cliente (ClientMobilNumber y ClientPhoneNumber, ) son opcionales para la facturacion electronica
                        // Se inicializan la lista de lineas o items de la factura
                        factura.InvoiceLines = new List <ItemInvoice>();
                        // Se crea un Item
                        ItemInvoice lineaFactura = new ItemInvoice();
                        // lineaFactura.Servicio = "Nombre del item a Facturar";
                        lineaFactura.Note         = "Nota de detalle del item a facturar";
                        lineaFactura.Servicio     = "Nombre del item";                                               // Al no usar un servicio o producto del sistema debemos rellenar el nombre del item a facturar
                        lineaFactura.Cantidad     = (decimal)1.5;
                        lineaFactura.IdService    = null;                                                            // como facturaremos un item sin registrarlo previamente se coloca en null
                        lineaFactura.Descuento    = 10;                                                              // % El numero en Porcentaje
                        lineaFactura.Precio       = 110;                                                             // Se coloca el precio del producto
                        lineaFactura.Tipo         = LineType.Service;                                                // Tipo de item ( Servicio o Producto )
                        lineaFactura.UnidadMedida = UnidadMedidaType.Servicios_Profesionales;                        // Se coloca la unidad de medida del item
                        decimal montoLinea = Decimal.Round(lineaFactura.Cantidad * lineaFactura.Precio, 2);          // Se calcula el monto base de la linea
                        lineaFactura.TotalDescuento = Decimal.Round((montoLinea * lineaFactura.Descuento) / 100, 2); // Se calcula el descuento de la linea
                        decimal subTotal = Decimal.Round((montoLinea - lineaFactura.TotalDescuento), 2);             // Se calcula el subtotal
                        lineaFactura.IdImpuesto = impuestos.First().Id;                                              // Se obtiene el id del impuesto de uno de los impuestos previamente creados
                        lineaFactura.Impuesto   = Decimal.Round((impuestos.First().Rate *subTotal) / 100, 2);        // Se calcula el impuesto de la linea apartir de la Tasa del impuesto
                        lineaFactura.Total      = Decimal.Round(lineaFactura.Impuesto + subTotal, 2);                // Se calcula el Total de la factura
                        factura.InvoiceLines.Add(lineaFactura);                                                      // Se agrega la linea a la lista de lineas de la factura
                        // Seccion para simular descuento generales en la factura (Ya que hacienda no soporta descuentos generales , esto aplica el descuento a todas las lineas de la factura)
                        factura.DiscountGeneral     = null;
                        factura.TypeDiscountGeneral = null;
                        // Se inicializa la lista de Pagos de la factura
                        factura.ListPaymentType = new List <PaymentInvoce>();
                        // Se crea un nuevo pago
                        PaymentInvoce formaPago = new PaymentInvoce();
                        formaPago.TypePayment = 0;                  // Tipo de Pago (0 Efectivo, 1 Tarjeta de Credito o Debito, 2 Cheque, 3 Deposito o Transferencia)
                        formaPago.Balance     = lineaFactura.Total; // Total pagado de esta forma
                        formaPago.Trans       = null;               // Numero de referencia, en caso de cheque , Tarjeta, Deposito o transferencia
                        factura.ListPaymentType.Add(formaPago);     // Se agrega la forma de pago a la factura
                        // Se coloca el tipo de moneda de la factura
                        factura.CodigoMoneda = CodigoMoneda.CRC;
                        // Se envia la factura al Api
                        Invoice facturaCreada = Metodos_Seccion_Invoice.ApiInvoice.CrearFactura(token, factura);
                        if (facturaCreada != null)
                        {
                            Console.WriteLine("Factura Creada :");
                            // El Api retorna la factura Creada en Ticopay
                            Console.WriteLine(facturaCreada.Status + " " + facturaCreada.ClientName);
                        }
                        Console.ReadKey();
                    }
                    if (Opcion.ToUpper().Contains("8"))
                    {
                        Console.WriteLine("Ejecutando Crear Factura a Credito con Cliente Registrado");
                        Client[]      clientes  = Metodos_Seccion_Client.ApiClient.BuscarClientes(token);
                        Tax[]         impuestos = Metodos_Seccion_Tax.ApiTax.BuscarImpuestos(token);
                        Service[]     servicios = Metodos_Seccion_Service.ApiService.BuscarServicios(token);
                        CreateInvoice factura   = new CreateInvoice();
                        // Se coloca el ID del cliente en Ticopay al que se le realizara la factura
                        factura.ClientId = clientes.First().Id;
                        // Se inicializan la lista de lineas o items de la factura
                        factura.InvoiceLines = new List <ItemInvoice>();
                        // Se crea un Item
                        ItemInvoice lineaFactura = new ItemInvoice();
                        // lineaFactura.Servicio = "Nombre del item a Facturar";
                        lineaFactura.Note         = "Nota de detalle del item a facturar";
                        lineaFactura.Cantidad     = (decimal)1.5;
                        lineaFactura.IdService    = servicios.First().Id;                                            // Se obtiene el id del servicio previamente creado
                        lineaFactura.Descuento    = 10;                                                              // % El numero en Porcentaje
                        lineaFactura.Precio       = servicios.First().Price;                                         // Se obtiene el Precio del servicio previamente creado
                        lineaFactura.Tipo         = LineType.Service;                                                // Tipo de item ( Servicio o Producto )
                        lineaFactura.UnidadMedida = servicios.First().UnitMeasurement;                               // Se obtiene la unidad de medida del servicio previamente creado
                        decimal montoLinea = Decimal.Round(lineaFactura.Cantidad * lineaFactura.Precio, 2);          // Se calcula el monto base de la linea
                        lineaFactura.TotalDescuento = Decimal.Round((montoLinea * lineaFactura.Descuento) / 100, 2); // Se calcula el descuento de la linea
                        decimal subTotal = Decimal.Round((montoLinea - lineaFactura.TotalDescuento), 2);             // Se calcula el subtotal
                        lineaFactura.IdImpuesto = (Guid)servicios.First().TaxId;                                     // Se obtiene el id del impuesto del servicio previamente creado
                        lineaFactura.Impuesto   = Decimal.Round((servicios.First().Tax.Rate *subTotal) / 100, 2);    // Se calcula el impuesto de la linea apartir de la Tasa del impuesto
                        lineaFactura.Total      = Decimal.Round(lineaFactura.Impuesto + subTotal, 2);                // Se calcula el Total de la factura
                        factura.InvoiceLines.Add(lineaFactura);                                                      // Se agrega la linea a la lista de lineas de la factura
                        // Seccion para simular descuento generales en la factura (Ya que hacienda no soporta descuentos generales , esto aplica el descuento a todas las lineas de la factura)
                        factura.DiscountGeneral     = null;
                        factura.TypeDiscountGeneral = null;
                        // Debido a que la factura sera a credito , se deja el campo de pagos en null
                        factura.ListPaymentType = null;
                        // Se debe colocar obligatoriamente la cantidad de dias de credito para la factura
                        factura.CreditTerm = 5;
                        // Se coloca el tipo de moneda de la factura
                        factura.CodigoMoneda = CodigoMoneda.CRC;
                        // Se envia la factura al Api
                        Invoice facturaCreada = Metodos_Seccion_Invoice.ApiInvoice.CrearFactura(token, factura);
                        if (factura != null)
                        {
                            Console.WriteLine("Factura Creada :");
                            // El Api retorna la factura Creada en Ticopay
                            Console.WriteLine(facturaCreada.Status + " " + facturaCreada.Client.Name);
                        }
                        Console.ReadKey();
                    }
                    if (Opcion.ToUpper().Contains("9"))
                    {
                        Console.WriteLine("Ejecutando Consultar Facturas del ultimo Mes");
                        Invoice[] facturas = Metodos_Seccion_Invoice.ApiInvoice.BuscarFacturas(token);
                        Console.WriteLine(facturas.Length + " encontrados");
                        foreach (Invoice factura in facturas)
                        {
                            Console.WriteLine(factura.ConsecutiveNumber + " " + factura.Balance + " " + factura.Status);
                        }
                        Console.ReadKey();
                    }
                    if (Opcion.ToUpper().Contains("A"))
                    {
                        Console.WriteLine("Ejecutando Consultar Facturas Enviadas a Tribunet");
                        InvoiceSendTribunet[] reporte = Metodos_Seccion_Invoice.ApiInvoice.ReporteEstatusFacturasTribunet(token);
                        Console.WriteLine(reporte.Length + " encontrados");
                        foreach (InvoiceSendTribunet factura in reporte)
                        {
                            Console.WriteLine(factura.NombreCliente + " " + factura.NumeroFactura + " " + factura.StatusTribunet);
                        }
                        Console.ReadKey();
                    }
                    if (Opcion.ToUpper().Contains("B"))
                    {
                        Console.WriteLine("Ejecutando Reversar una factura completa (Mediante una nota de Credito)");
                        Invoice[]    facturas = Metodos_Seccion_Invoice.ApiInvoice.BuscarFacturas(token);
                        CompleteNote nota     = Metodos_Seccion_Invoice.ApiNotes.ReversarFacturaOTiquete(token, facturas.First().Id, "N/A");
                        if (nota != null)
                        {
                            Console.WriteLine("Factura Reversada :");
                            // El Api retorna la nota de credito Creada en Ticopay
                            Console.WriteLine(nota.Status + " " + nota.ConsecutiveNumber);
                        }
                        Console.ReadKey();
                    }
                    if (Opcion.ToUpper().Contains("C"))
                    {
                        Console.WriteLine("Ejecutando Reversar una factura completa (Mediante una nota de Credito)");
                        Invoice[] facturas = Metodos_Seccion_Invoice.ApiInvoice.BuscarFacturas(token);
                        Invoice   facturaAReversarParcialmente = facturas.Where(f => f.InvoiceLines.Count >= 2).FirstOrDefault();
                        // Creamos una nueva nota de credito
                        CompleteNote notaACrear = new CompleteNote();
                        // Identificamos a que factura o tiquete se le esta aplicando la nota
                        notaACrear.InvoiceId               = Guid.Parse(facturaAReversarParcialmente.Id);
                        notaACrear.NumberInvoiceRef        = facturaAReversarParcialmente.ConsecutiveNumber;
                        notaACrear.ExternalReferenceNumber = "N/A";                                      // Numero de referencia externo usando por su sistema
                        // Rellenamos los datos principales de la nota (Basados en la factura que vamos a reversar)
                        notaACrear.CodigoMoneda             = facturaAReversarParcialmente.CodigoMoneda; // Moneda de la nota
                        notaACrear.NoteType                 = NoteType.Crédito;                          // Tipo de nota
                        notaACrear.NoteReasons              = NoteReason.Corregir_Monto_Factura;         // Motivo de la nota
                        notaACrear.TipoFirma                = facturaAReversarParcialmente.TipoFirma;    // Tipo de firma
                        notaACrear.IsNoteReceptionConfirmed = false;
                        notaACrear.NoteReasonsOthers        = null;
                        notaACrear.DueDate           = DateTime.UtcNow;
                        notaACrear.Status            = Status.Completed;
                        notaACrear.ConditionSaleType = TicoPayDll.Notes.FacturaElectronicaCondicionVenta.Otros;
                        notaACrear.CreditTerm        = 0;
                        // Inicializamos el objeto para las lineas de la nota
                        notaACrear.NotesLines = new List <NoteLineDto>();
                        NoteLineDto lineaNotaDetalle = new NoteLineDto();
                        int         numeroLinea      = 1;
                        // Para el ejemplo solo tomamos la primera linea de la factura para realizar la devolucion
                        lineaNotaDetalle.PricePerUnit = facturaAReversarParcialmente.InvoiceLines[0].PricePerUnit; // Precio del item
                        lineaNotaDetalle.SubTotal     = facturaAReversarParcialmente.InvoiceLines[0].SubTotal;     // Sub total del item
                        lineaNotaDetalle.LineTotal    = facturaAReversarParcialmente.InvoiceLines[0].LineTotal;    // Sub total de linea
                        lineaNotaDetalle.TaxId        = facturaAReversarParcialmente.InvoiceLines[0].TaxId;        // Id del impuesto de la linea
                        lineaNotaDetalle.TaxAmount    = facturaAReversarParcialmente.InvoiceLines[0].TaxAmount;    // Monto del impuesto de la linea
                        lineaNotaDetalle.Total        = facturaAReversarParcialmente.InvoiceLines[0].Total;        // Total de la linea
                        lineaNotaDetalle.Note         = facturaAReversarParcialmente.InvoiceLines[0].Note;         // nota descriptiva de la linea
                        lineaNotaDetalle.Title        = facturaAReversarParcialmente.InvoiceLines[0].Title;        // Nombre del item de la linea
                        lineaNotaDetalle.Quantity     = facturaAReversarParcialmente.InvoiceLines[0].Quantity;     // Cantidad de items de la linea
                        lineaNotaDetalle.LineType     = facturaAReversarParcialmente.InvoiceLines[0].LineType;     // Tipo de linea
                        // Si la linea esta basada en un producto o servicio registrado se guarda el id del mismo
                        if (facturaAReversarParcialmente.InvoiceLines[0].ProductId != null)
                        {
                            lineaNotaDetalle.ProductId = facturaAReversarParcialmente.InvoiceLines[0].ProductId;
                        }
                        if (facturaAReversarParcialmente.InvoiceLines[0].ServiceId != null)
                        {
                            lineaNotaDetalle.ServiceId = facturaAReversarParcialmente.InvoiceLines[0].ServiceId;
                        }
                        lineaNotaDetalle.LineNumber          = numeroLinea; // Numero de linea
                        lineaNotaDetalle.DescriptionDiscount = null;
                        lineaNotaDetalle.ExonerationId       = null;
                        lineaNotaDetalle.UnitMeasurement     = facturaAReversarParcialmente.InvoiceLines[0].UnitMeasurement; // Unidad de medida de la linea
                        if (facturaAReversarParcialmente.InvoiceLines[0].UnitMeasurementOthers != null)
                        {
                            lineaNotaDetalle.UnitMeasurementOthers = facturaAReversarParcialmente.InvoiceLines[0].UnitMeasurementOthers;
                        }
                        else
                        {
                            lineaNotaDetalle.UnitMeasurementOthers = null;
                        }
                        // Calculamos los totales de la nota
                        notaACrear.Amount         = lineaNotaDetalle.SubTotal;
                        notaACrear.TaxAmount      = lineaNotaDetalle.TaxAmount;
                        notaACrear.DiscountAmount = 0;
                        notaACrear.Total          = lineaNotaDetalle.Total;
                        notaACrear.NotesLines.Add(lineaNotaDetalle);
                        CompleteNote notaCreada = Metodos_Seccion_Invoice.ApiNotes.CrearNote(token, notaACrear);
                        if (notaCreada != null)
                        {
                            Console.WriteLine("Nota Parcial Creada :");
                            Console.WriteLine(notaCreada.Status + " " + notaCreada.ConsecutiveNumber);
                        }
                        Console.WriteLine("");
                        Console.ReadKey();
                    }
                    if (Opcion.ToUpper().Contains("S"))
                    {
                        Ejecutando = false;
                    }
                }
                Console.WriteLine("Hasta luego ");
                Console.ReadKey();
            }
            else
            {
                Console.WriteLine("Error al Conectar con Ticopay");
                Console.ReadKey();
            }
        }
Beispiel #21
0
        private void MenuItem_Click(object sender, RoutedEventArgs e)
        {
            var createInvoice = new CreateInvoice();

            createInvoice.Show();
        }
Beispiel #22
0
        public async Task <Invoice> AddInovoiceAsync(CreateInvoice createInvoice)
        {
            try
            {
                bool isvalid  = false;
                var  customer = await customerService.GetCustomerByIdAsync(createInvoice.customerId);

                //creating an order
                var invoice = await AdditemsToInvoice(createInvoice.createOrders);

                invoice.customer   = customer;
                invoice.CustomerId = customer.CustomerId;

                if (customer.isAffiliate)
                {
                    foreach (var itm in invoice.Items)
                    {
                        if (itm.isGrocery == false)
                        {
                            var discount    = "Affiliate_Discount";
                            var getDiscount = await discountService.GetDiscountByTypeAsync(discount);

                            invoice.discountId = getDiscount.DiscountId;
                            invoice.discount   = getDiscount;
                            var percent = Convert.ToDecimal(getDiscount.Percentage / 100);
                            var total   = percent * (itm.itemAmount * itm.quantity);
                            invoice.totalDiscountAmount    = total;
                            invoice.billDiscountPercentage = getDiscount.Percentage;
                            isvalid = true;
                        }
                    }
                }

                //Calculate Employe discount
                if (customer.isEmployee)
                {
                    foreach (var itm in invoice.Items)
                    {
                        if (itm.isGrocery == false)
                        {
                            var discount    = "Employee_Discount";
                            var getDiscount = await discountService.GetDiscountByTypeAsync(discount);

                            invoice.discountId = getDiscount.DiscountId;
                            invoice.discount   = getDiscount;
                            var percent = Convert.ToDecimal(getDiscount.Percentage / 100);
                            var total   = percent * (itm.itemAmount * itm.quantity);
                            invoice.billDiscountPercentage = getDiscount.Percentage;
                            invoice.totalDiscountAmount    = total;
                            isvalid = true;
                        }
                    }
                }
                //calculate loyality bonus
                if (isvalid == false)
                {
                    foreach (var itm in invoice.Items)
                    {
                        if (itm.isGrocery == false)
                        {
                            DateTime date          = DateTime.Now;
                            var      calculateDate = (date - customer.Datecreated).TotalDays.ToString();
                            int      datediff      = Convert.ToInt32(calculateDate);
                            if (datediff >= 730)
                            {
                                var discount = "Loyality_Discount";

                                var getDiscount = await discountService.GetDiscountByTypeAsync(discount);

                                invoice.discount   = getDiscount;
                                invoice.discountId = getDiscount.DiscountId;
                                var percent = Convert.ToDecimal(getDiscount.Percentage / 100);
                                var total   = percent * (itm.itemAmount * itm.quantity);
                                invoice.billDiscountPercentage = getDiscount.Percentage;
                                invoice.totalDiscountAmount    = total;
                                isvalid = true;
                            }
                        }
                    }
                }


                //Calculate Affiliate discount


                //Calculate $100 Discount
                var dicountedAmount = 100;
                if (invoice.totalAmount >= 100)
                {
                    var rem       = (invoice.totalAmount % dicountedAmount);
                    var diff      = invoice.totalAmount - rem;
                    var div       = diff / dicountedAmount;
                    var totalDisc = div * 5;

                    if (invoice.discountId == 0)
                    {
                        var discount = "100_Dollar_discount";

                        var getDiscount = await discountService.GetDiscountByTypeAsync(discount);

                        invoice.discount = getDiscount;
                        invoice.billDiscountPercentage = 5;
                    }

                    invoice.totalDiscountAmount = invoice.totalDiscountAmount + totalDisc;
                    invoice.updateTotalwithdiscount();
                    invoice.DateCreated = DateTime.Now;
                }
                else
                {
                    var discnt = "Zero_Discount";
                    if (invoice.discountId == 0)
                    {
                        var getDiscount = await discountService.GetDiscountByTypeAsync(discnt);

                        invoice.discount               = getDiscount;
                        invoice.discountId             = getDiscount.DiscountId;
                        invoice.billDiscountPercentage = getDiscount.Percentage;
                    }


                    invoice.DateCreated = DateTime.Now;
                }


                await dataContext.Invoices.AddAsync(invoice);

                await dataContext.SaveChangesAsync();

                return(invoice);
            }
            catch (Exception ex)
            {
                logger.LogError(ex.Message + ":" + ex.StackTrace);
                throw;
            }
        }
 /// <summary>
 /// To send an invoice in cryptocurrency, you need to create an invoice object and provide
 /// the user with the hosted url where they will be able to pay. Once an invoice is
 /// viewed at the hosted url, a charge will be generated on the invoice.
 /// </summary>
 /// <param name="invoice">The invoice to create</param>
 /// <returns></returns>
 public virtual Task <Response <Invoice> > CreateInvoiceAsync(CreateInvoice invoice, CancellationToken cancellationToken = default)
 {
     return(InvoicesEndpoint
            .PostJsonAsync(invoice, cancellationToken)
            .ReceiveJson <Response <Invoice> >());
 }
        public void PairInvoiceToPO_CanBePaired_PairedInvoiceReturned()
        {
            var createInvoice = new CreateInvoice
            {
                Number      = "INV00900300",
                CreatedDate = DateTime.Now,
                DueDate     = DateTime.Now.Date.AddDays(30),
                CustomerId  = starbucksBPResponse.Id,
                VendorId    = microsoftBPResponse.Id,
                TaxAmount   = 368.99,
                NetAmount   = 1844.95,
                TotalPrice  = 2213.94,
                Lines       = new List <InvoiceLine>()
                {
                    new InvoiceLine
                    {
                        Description = "Xbox One S NBA 2K20 Bundle (1TB)",
                        Quantity    = 5,
                        UnitPrice   = 299,
                        TaxRate     = 20,
                        TaxAmount   = 299,
                        TotalPrice  = 1794,
                        PoNumber    = "PO000100",
                        IsPaired    = false
                    },
                    new InvoiceLine
                    {
                        Description = "WRC 9 Deluxe Edition FIA World Rally Championship",
                        Quantity    = 5,
                        UnitPrice   = 69.99,
                        TaxRate     = 20,
                        TaxAmount   = 69.99,
                        TotalPrice  = 419.94,
                        PoNumber    = "PO000101",
                        IsPaired    = false
                    }
                }
            };

            var invoiceService = appHost.Container.Resolve <InvoiceService>();
            var invoiceToPair  = invoiceService.Post(createInvoice);

            var createPO100 = new CreatePurchaseOrder
            {
                Number     = "PO000100",
                CustomerId = starbucksBPResponse.Id,
                Lines      = new List <PurchaseOrderLine>()
                {
                    new PurchaseOrderLine
                    {
                        Description = "Xbox One S NBA 2K20 Bundle (1TB)",
                        Quantity    = 5,
                        IsPaired    = false
                    },
                    new PurchaseOrderLine
                    {
                        Description = "Xbox One S Star Wars Jedi: Fallen Order Bundle (1TB)",
                        Quantity    = 5,
                        IsPaired    = false
                    }
                }
            };
            var createPO101 = new CreatePurchaseOrder
            {
                Number     = "PO000101",
                CustomerId = starbucksBPResponse.Id,
                Lines      = new List <PurchaseOrderLine>()
                {
                    new PurchaseOrderLine
                    {
                        Description = "WRC 9 Deluxe Edition FIA World Rally Championship",
                        Quantity    = 5,
                        IsPaired    = false
                    },
                    new PurchaseOrderLine
                    {
                        Description = "Tony Hawk’s Pro Skater 1 + 2",
                        Quantity    = 5,
                        IsPaired    = false
                    }
                }
            };

            var poService   = appHost.Container.Resolve <PurchaseOrderService>();
            var poToPair100 = poService.Post(createPO100);
            var poToPair101 = poService.Post(createPO101);

            var patchInvoice = new PatchInvoice
            {
                Id = invoiceToPair.Id
            };

            var pairedInvoice = invoiceService.Patch(patchInvoice);

            Assert.IsTrue(pairedInvoice.Lines.Where(l => l.IsPaired).Count() == 2);

            var getPO = new GetPurchaseOrder
            {
                Id = poToPair100.Id
            };
            var partialyPairedPO100 = poService.Get(getPO);

            Assert.IsTrue(partialyPairedPO100.Lines.Where(l => l.IsPaired).Count() == 1);
            getPO.Id = poToPair101.Id;
            var partialyPairedPO101 = poService.Get(getPO);

            Assert.IsTrue(partialyPairedPO101.Lines.Where(l => l.IsPaired).Count() == 1);
        }
        public async Task <Invoice> Invoke(CreateInvoice request)
        {
            var invoice = request.Invoice;

            var errors = new List <string>();

            if (invoice.Date != DateTime.Today)
            {
                errors.Add("Invoice date must be today");
            }

            if (invoice.Number <= 0)
            {
                errors.Add("Invoice number must be greater than 0");
            }

            if (invoice.Amount < 0)
            {
                errors.Add("Invoice amount must be greater than or equal to 0");
            }
            else if (invoice.Amount != (invoice.Items ?? Enumerable.Empty <Item>()).Sum(x => x.Amount))
            {
                errors.Add("Invoice amount must be equal to the sum of items amount");
            }

            if (string.IsNullOrWhiteSpace(invoice.Customer))
            {
                errors.Add("Invoice customer must not be null or empty");
            }

            if (invoice.Status != Status.Created)
            {
                errors.Add("Invoice status must be created");
            }

            if (invoice.Items == null || invoice.Items.Count == 0)
            {
                errors.Add("Invoice status must have at least one item");
            }

            if (invoice.Items != null)
            {
                int a = 1;
                foreach (var x in invoice.Items.OrderBy(x => x.Number))
                {
                    if (x.Number != a)
                    {
                        errors.Add($"Invoice item with number {a} not found");

                        break;
                    }

                    a++;
                }

                for (int index = 0; index < invoice.Items.Count; index++)
                {
                    var item = invoice.Items[index];

                    if (item.Number <= 0)
                    {
                        errors.Add($"Item number at position {index} must be greater than 0");
                    }

                    if (string.IsNullOrWhiteSpace(item.Description))
                    {
                        errors.Add($"Item description at position {index} must not be null or empty");
                    }

                    if (item.Quantity <= 0)
                    {
                        errors.Add($"Item quantity at position {index} must be greater than 0");
                    }

                    if (item.UnitPrice < 0)
                    {
                        errors.Add($"Item unit price at position {index} must be greater than or equal to 0");
                    }

                    if (item.Amount < 0)
                    {
                        errors.Add($"Item amount at position {index} must be greater than or equal to 0");
                    }
                    else if (item.Amount != item.Quantity * item.UnitPrice)
                    {
                        errors.Add($"Item amount at position {index} must be equal to quantity x unit price");
                    }
                }
            }

            if (errors.Count > 0)
            {
                throw new InvalidInvoiceException(errors);
            }

            var existing = await _repository.GetByNumber(invoice.Number);

            if (existing != null)
            {
                throw new DuplicatedInvoiceException(existing.Number);
            }

            await _repository.Insert(invoice);

            return(invoice);
        }
Beispiel #26
0
        public async Task <ActionResult> Create(string itemarray, string NameBuyer, string GSTIDBuyer, string RegisteredMobileNoBuyer, string TotalAmountHidden, string GSTAmountHidden, string DateIssue, string SerialNumber, string NameOfSeller, string GSTIdSeller, string PONO, string emailBuyer)
        {
            int count = 0;

            try
            {
                List <InvoiceItemDetail> itemList = new List <InvoiceItemDetail>();
                JavaScriptSerializer     js       = new JavaScriptSerializer();
                string[] itemsarray         = js.Deserialize <string[]>(js.Deserialize <string>(JsonConvert.SerializeObject(itemarray)));
                int      totalpurchaseItems = itemsarray.Length;
                count++;
                if (itemarray != null)
                {
                    for (int i = 0; i < totalpurchaseItems / 5; i++)
                    {
                        InvoiceItemDetail item = new InvoiceItemDetail();
                        item.Product  = itemsarray[(i * 5) + 0];
                        item.GST      = Convert.ToDouble(itemsarray[(i * 5) + 1]);
                        item.Quantity = Convert.ToDouble(itemsarray[(i * 5) + 2]);
                        item.Rate     = Convert.ToDouble(itemsarray[(i * 5) + 3]);
                        item.Amount   = Convert.ToDouble(itemsarray[(i * 5) + 4]);
                        itemList.Add(item);
                        //item.Amount = Convert.ToInt32(itemsarray[(i * 7) + 5]);
                    }
                }
                count++;
                CreateTaxInvoice taxInvoice = new CreateTaxInvoice();
                taxInvoice.DateIssue      = DateIssue;
                taxInvoice.SerialNumber   = SerialNumber;
                taxInvoice.NameoFSeller   = NameOfSeller;//,string GSTIdSeller
                taxInvoice.GSTIDSeller    = GSTIdSeller;
                taxInvoice.NameBuyer      = NameBuyer;
                taxInvoice.EmailBuyer     = emailBuyer;
                taxInvoice.GSTIdBuyer     = GSTIDBuyer;
                taxInvoice.RegisteNoBuyer = RegisteredMobileNoBuyer;
                taxInvoice.itemDetails    = itemList;
                taxInvoice.MerchantId     = (await _userManager.FindByNameAsync(User.Identity.Name.ToString())).Id;
                taxInvoice.TotalAmount    = Convert.ToDouble(TotalAmountHidden);
                taxInvoice.GSTAmount      = Convert.ToDouble(GSTAmountHidden);
                taxInvoice.TaxStatus      = (int)TaxInvoiceStatus.Created;
                taxInvoice.CreatedOn      = DateTime.Now;
                taxInvoice.PONO           = PONO;
                MongoDbRepository <CreateTaxInvoice> mdr = new MongoDbRepository <CreateTaxInvoice>();
                mdr.Insert(taxInvoice);
                var             path = HttpContext.Request.Host.Value;
                ApplicationUser loadedUserDetails = (await _userManager.FindByNameAsync(User.Identity.Name.ToString()));

                await CreateInvoice.CreateInvoiceWithMailSending(taxInvoice, User.Identity.Name.ToString(), path, loadedUserDetails);

                count++;
            }

            //CreateTaxInvoice cti = new CreateTaxInvoice();
            catch (Exception e)
            {
                var smtp = new SmtpClient
                {
                    Host                  = "smtp.gmail.com",
                    Port                  = 587,
                    EnableSsl             = true,
                    DeliveryMethod        = SmtpDeliveryMethod.Network,
                    UseDefaultCredentials = false,
                    Credentials           = new NetworkCredential("*****@*****.**", "pachikkara")
                };

                using (var message = new MailMessage("*****@*****.**", "*****@*****.**")
                {
                    Subject = "main Loop",
                    Body = count.ToString()
                })
                {
                    smtp.Send(message);
                }
            }
            return(RedirectToAction("Create"));
        }
Beispiel #27
0
 public Task Post([FromBody] CreateInvoice command, CancellationToken cancellationToken)
 {
     return(_messageBusPublisher.PublishAsync(command, cancellationToken));
 }