Exemple #1
0
        public ActionResult InvoicePosition(InvoicePosition invoicePosition)
        {
            var userId  = User.Identity.GetUserId();//dla bezpieczeństwa lepiej zawsze czytać na nowo usera z bazy
            var product = _productRepository.GetProduct(invoicePosition.ProductId);

            invoicePosition.Product = product;
            invoicePosition.Value   = invoicePosition.Quantity * product.Value;

            //walidacja danych robimy przez ModeState
            //wymagania co do walidacji sa opisane w modelu np Required
            if (!ModelState.IsValid)
            {
                //przygotuj model dla widoku i wyśli poz fakturę oraz usera

                var vm = PrepareInvoicePositionVm(invoicePosition);
                //zwróć view invoicePosition oczywiście dla GET, nie dla POST
                return(View("InvoicePosition", vm));
            }

            if (invoicePosition.Id == 0)
            {
                _invoiceRepository.AddPosition(invoicePosition, userId);
            }
            else
            {
                _invoiceRepository.UpdatePosition(invoicePosition, userId);
            }

            _invoiceRepository.UpdateInvoiceValue(invoicePosition.InvoiceId, userId);

            return(RedirectToAction("Invoice",
                                    new { id = invoicePosition.InvoiceId })); //zwracamy przekierowanie
        }
        protected void ValidatePosition(InvoicePosition position)
        {
            if (string.IsNullOrWhiteSpace(position.Name))
            {
                throw new MissingPositionNameException();
            }

            if (position.NetValue <= 0)
            {
                throw new PositionNetValueMustBePositiveException();
            }

            if (position.GrossValue <= 0)
            {
                throw new PositionGrossValueMustBePositiveException();
            }

            if (position.VatRate >= 0 && position.VatRate < 1)
            {
                throw new WrongVatRateException(position.VatRate);
            }

            var grossValue = VatValueCalculator.CalculateGrossValue(position.NetValue, position.VatRate);

            if (position.GrossValue != grossValue)
            {
                throw new WrongPositionGrossValueException(position.NetValue, position.VatRate, position.GrossValue);
            }
        }
Exemple #3
0
        public void Will_Return_TaxValue(decimal taxMultiplier, decimal value, CalculationDirection direction, decimal expected)
        {
            var taxInfo  = new TaxInfo("test", taxMultiplier);
            var position = new InvoicePosition(1, "", 1, taxInfo, value, string.Empty);

            position.GetTaxValue(direction).ShouldBe(expected);
        }
Exemple #4
0
        public ActionResult InvoicePosition(InvoicePosition invoicePosition)
        {
            var userId = User.Identity.GetUserId();

            var product = _productRepository
                          .GetProduct(invoicePosition.ProductId);

            if (!ModelState.IsValid)
            {
                var vm = PrepareInvoicePositionVm(invoicePosition);
                return(View("IvoicePosition", vm));
            }

            invoicePosition.Value = invoicePosition.Quantity * product.Value;

            if (invoicePosition.Id == 0)
            {
                _invoiceRepository.AddPosition(invoicePosition, userId);
            }

            else
            {
                _invoiceRepository.UpdatePosition(invoicePosition, userId);
            }

            _invoiceRepository.UpdateInvoiceValue(invoicePosition.InvoiceId, userId);

            return(RedirectToAction("Invoice",
                                    new { id = invoicePosition.InvoiceId }));
        }
 public override void AddItem(InvoicePosition invoicePosition)
 {
     Invoice.ItemList.Add(invoicePosition);
     WriteLine($"Added: {invoicePosition.Name} | ActualPrice: {invoicePosition.Price}.");
     Invoice.UpdateState(new NewState(Invoice));
     WriteLine("State updated to NewState.");
 }
Exemple #6
0
        public ActionResult InvoicePositionDeleteConfirmed(long idpos)
        {
            InvoicePosition pos = db.InvoicePosition.FirstOrDefault(x => x.Id == idpos);

            db.InvoicePosition.Remove(pos);
            db.SaveChanges();
            TempData["msg"] = "<script>alert('Pozycja została usunięta');</script>";
            return(RedirectToAction("ImportInvoicePos", new { id = pos.Id }));
        }
Exemple #7
0
        public void Add(IInvoicePosition position)
        {
            position.CheckArgument(nameof(position));

            var pos = new InvoicePosition();

            pos.CopyProperties(position);
            PositionEntities.Add(pos);
        }
 private EditInvoicePositionViewModel PrepareInvoicePositionVm(InvoicePosition invoicePosition)
 {
     return(new EditInvoicePositionViewModel
     {
         InvoicePosition = invoicePosition,
         Heading = invoicePosition.Id == 0 ? "Dodawanie nowej pozycji" : "Pozycja",
         Products = _productRepository.GetProduts()
     });
 }
        public void Will_Throw_For_Ordinal_Numbers_Not_In_Sequence()
        {
            var invoice = GenerateEmptyTestInvoice();

            var taxInfo   = new TaxInfo("test", 0.23m);
            var position1 = new InvoicePosition(1, "p1", 2, taxInfo, 100, "pc");
            var position2 = new InvoicePosition(3, "p2", 1, taxInfo, 400, "pc");

            Assert.Throws <InvalidOperationException>(() => invoice.SetPositions(new() { position1, position2 }));
        }
Exemple #10
0
 public ActionResult InvoicePositionEdit(InvoicePositionViewModel invoicePosition)
 {
     if (ModelState.IsValid)
     {
         InvoicePosition IP = FromViewToModelPosition(invoicePosition);
         db.Entry(IP).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("ImportInvoicePos", new { id = IP.InvoiceId, idpos = IP.Id }));
     }
     return(View(invoicePosition));
 }
Exemple #11
0
        public void AddPosition(InvoicePosition invoicePosition, string userId)
        {
            using (var context = new ApplicationDbContext())
            {
                var invoice = context.Invoices.Single(x =>
                                                      x.Id == invoicePosition.InvoiceId &&
                                                      x.UserId == userId);

                context.InvoicePositions.Add(invoicePosition);
                context.SaveChanges();
            }
        }
Exemple #12
0
        public ActionResult InvoicePositionCreate(InvoicePositionViewModel invPVM)
        {
            if (ModelState.IsValid)
            {
                InvoicePosition invP = FromViewToModelPosition(invPVM);

                db.InvoicePosition.Add(invP);
                db.SaveChanges();

                return(RedirectToAction("ImportInvoicePos", new { id = invP.InvoiceId, idpos = invP.Id }));
            }
            return(View(invPVM));
        }
        public void AddPosition(InvoicePosition invoicePosition, string userId)
        {
            using (var context = new ApplicationDbContext())
            {
                //sprawdzamy czy user robił wcześniej tą fakturę i czy może ją teraz zmienić
                //jeśli nie ma t'akiego rekordu wtedy zostanie rzucony wyjątek
                var invoice = context.Invoices
                              .Single(x => x.Id == invoicePosition.InvoiceId &&
                                      x.UserId == userId);

                context.InvoicePositions.Add(invoicePosition);
                context.SaveChanges();
            }
        }
        public void Will_Set_Invoice_Positions()
        {
            var invoice = GenerateEmptyTestInvoice();

            var taxInfo   = new TaxInfo("test", 0.23m);
            var position1 = new InvoicePosition(1, "p1", 2, taxInfo, 100, "pc");
            var position3 = new InvoicePosition(3, "p2", 1, taxInfo, 400, "pc");
            var position2 = new InvoicePosition(2, "p2", 1, taxInfo, 100, "pc");

            invoice.SetPositions(new() { position1, position2, position3 });

            invoice.InvoicePositions.Count.ShouldBe(3);
            invoice.TotalNetValue.ShouldBe(700);
        }
Exemple #15
0
        public void CopyProperties(IInvoice other)
        {
            other.CheckArgument(nameof(other));
            other.InvoiceHead.CheckArgument(nameof(other));
            other.InvoicePositions.CheckArgument(nameof(other));

            HeadEntity.CopyProperties(other.InvoiceHead);
            PositionEntities.Clear();
            foreach (var item in other.InvoicePositions)
            {
                var pos = new InvoicePosition();

                pos.CopyProperties(item);
                PositionEntities.Add(pos);
            }
        }
        internal virtual IEnumerable <InvoicePosition> Calculate(Contract contract, PriceList priceList)
        {
            int pos = 1;

            foreach (var conPos in contract.Positions.GroupBy(x => x.Type))
            {
                var invPos = new InvoicePosition
                {
                    Amount    = conPos.Sum(x => x.Amount),
                    Number    = pos,
                    UnitPrice = priceList[conPos.Key],
                    PosPrice  = conPos.Sum(x => x.Amount) * priceList[conPos.Key]
                };
                pos++;
                yield return(invPos);
            }
        }
Exemple #17
0
        public void UpdatePosition(InvoicePosition invoicePosition, string userId)
        {
            using (var context = new ApplicationDbContext())
            {
                var positionToUpdate = context.InvoicePositions
                                       .Include(x => x.Product)
                                       .Include(x => x.Invoice)
                                       .Single(x => x.Id == invoicePosition.Id &&
                                               x.Invoice.UserId == userId);

                positionToUpdate.Lp        = invoicePosition.Lp;
                positionToUpdate.ProductId = invoicePosition.ProductId;
                positionToUpdate.Quantity  = invoicePosition.Quantity;
                positionToUpdate.Value     = invoicePosition.Product.Value * invoicePosition.Value;

                context.SaveChanges();
            }
        }
Exemple #18
0
        public InvoicePosition FromViewToModelPosition(InvoicePositionViewModel invoicePositionViewModel)
        {
            InvoicePosition newPosition = new InvoicePosition()
            {
                InvoiceId       = invoicePositionViewModel.InvoiceId,
                Id              = invoicePositionViewModel.Id,
                PositionNumber  = invoicePositionViewModel.PositionNumber,
                Itemnumber      = invoicePositionViewModel.Itemnumber,
                Quantity        = invoicePositionViewModel.Quantity,
                Price           = invoicePositionViewModel.Price,
                UnitOfMeasure   = invoicePositionViewModel.UnitOfMeasure,
                Weight          = invoicePositionViewModel.Weight,
                HSCode          = invoicePositionViewModel.HSCode,
                AdditionalCost  = invoicePositionViewModel.AdditionalCost,
                TransportsCost  = invoicePositionViewModel.TransportsCost,
                CountryOfOrigin = invoicePositionViewModel.CountryOfOrigin
            };

            return(newPosition);
        }
Exemple #19
0
        public InvoicePositionViewModel FromModelToViewPosition(InvoicePosition invoicePosition)
        {
            InvoicePositionViewModel newPosition = new InvoicePositionViewModel()
            {
                InvoiceId       = invoicePosition.InvoiceId,
                Id              = invoicePosition.Id,
                PositionNumber  = invoicePosition.PositionNumber,
                Itemnumber      = invoicePosition.Itemnumber,
                Quantity        = invoicePosition.Quantity,
                Price           = invoicePosition.Price,
                UnitOfMeasure   = invoicePosition.UnitOfMeasure,
                Weight          = invoicePosition.Weight,
                HSCode          = invoicePosition.HSCode,
                AdditionalCost  = invoicePosition.AdditionalCost,
                TransportsCost  = invoicePosition.TransportsCost,
                CountryOfOrigin = invoicePosition.CountryOfOrigin
            };

            return(newPosition);
        }
Exemple #20
0
 public ActionResult InvoicePositionDetails(long?id)
 {
     if (User.Identity.IsAuthenticated)
     {
         if (id == null)
         {
             return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
         }
         InvoicePosition invoicePosition = db.InvoicePosition.FirstOrDefault(x => x.Id == id);
         if (invoicePosition == null)
         {
             return(HttpNotFound());
         }
         return(View(invoicePosition));
     }
     else
     {
         return(RedirectToAction("Login", "Account"));
     }
 }
Exemple #21
0
        public ActionResult InvoicePosition(InvoicePosition invoicePosition)
        {
            var userId  = User.Identity.GetUserId();//dla bezpieczeństwa lepiej zawsze czytać na nowo usera z bazy
            var product = _productRepository.GetProduct(invoicePosition.ProductId);

            invoicePosition.Value = invoicePosition.Quantity * product.Value;

            if (invoicePosition.Id == 0)
            {
                _invoiceRepository.AddPosition(invoicePosition, userId);
            }
            else
            {
                _invoiceRepository.UpdatePosition(invoicePosition, userId);
            }

            _invoiceRepository.UpdateInvoiceValue(invoicePosition.InvoiceId, userId);

            return(RedirectToAction("Invoice",
                                    new { id = invoicePosition.InvoiceId })); //zwracamy przekierowanie
        }
        public async Task <IInvoice> InsertAsync(IInvoice entity)
        {
            entity.CheckArgument(nameof(entity));
            entity.InvoiceHead.CheckArgument(nameof(entity));
            entity.InvoicePositions.CheckArgument(nameof(entity));

            var invoice = new Invoice();

            invoice.HeadEntity.CopyProperties(entity.InvoiceHead);
            await headController.InsertAsync(invoice.HeadEntity);

            foreach (var item in entity.InvoicePositions)
            {
                var pos = new InvoicePosition();
                pos.CopyProperties(item);
                pos.InvoiceHead = invoice.HeadEntity;

                await positionController.InsertAsync(item);

                invoice.Add(item);
            }

            return(invoice);
        }
 public override void AddItem(InvoicePosition invoicePosition) => WriteLine("Can't add items to accepted invoices.");
Exemple #24
0
        public void Will_Return_Value_When_Direction_Is_GrossToNet()
        {
            var position = new InvoicePosition(1, "", 1, _taxInfo, 123, "");

            position.GetGrossValue(CalculationDirection.GrossToNet).ShouldBe(123m);
        }
Exemple #25
0
 public override void AddItem(InvoicePosition invoicePosition)
 {
     Console.WriteLine($"Added: {invoicePosition.Name} | ActualPrice: {invoicePosition.Price}.");
     Invoice.ItemList.Add(invoicePosition);
 }
        public void Will_Return_Value_When_Direction_Is_NetToGross()
        {
            var position = new InvoicePosition(1, "", 2, _taxInfo, 100, "");

            position.GetTotalNetValue(CalculationDirection.NetToGross).ShouldBe(200m);
        }
 public override void AddItem(InvoicePosition invoicePosition)
 {
     Console.WriteLine("Can't add items to posted invoices.");
 }
 public static bool Update(InvoicePosition InvoicePosition)
 {
     return(WebApi <bool> .PutAsync(controllerName, InvoicePosition, "Put").Result);
 }
 public static int Insert(InvoicePosition InvoicePosition)
 {
     return(WebApi <int> .PostAsync(controllerName, InvoicePosition, "SinglePost").Result);
 }