public async Task <Guid> Handle(WydajCommand request, CancellationToken cancellationToken) { var numer = request.Model.KontrahentId.HasValue ? await GetNumerDokumentuWZ(request.PrzedsiebiorstwoId, request.Model.Data.Year) : await GetNumerDokumentuRW(request.PrzedsiebiorstwoId, request.Model.Data.Year); var stanyAktualne = await _stanyAktualneService.GetStanMagazynu(request.Model.MagazynId, request.PrzedsiebiorstwoId); var orderedStanyAktualne = stanyAktualne.Where(x => x.Ilosc > 0) .OrderBy(x => x.CenaNetto).ThenBy(x => x.CenaBrutto).ToList(); var pozycjeDokumentuWydania = new List <PozycjaDokumentu>(); foreach (var p in request.Model.Pozycje) { var iloscDoWydania = p.Ilosc; for (var i = 0; i < orderedStanyAktualne.Count(x => x.ProduktId == p.ProduktId) && iloscDoWydania > 0; i++) { var stan = orderedStanyAktualne.Where(x => x.ProduktId == p.ProduktId).ToList()[i]; var iloscWydawana = iloscDoWydania > stan.Ilosc ? stan.Ilosc : iloscDoWydania; var pozycjaDokumentuWydania = new PozycjaDokumentu { Id = Guid.NewGuid(), CenaNetto = stan.CenaNetto, CenaBrutto = stan.CenaBrutto, Ilosc = iloscWydawana, ProduktId = stan.ProduktId, StawkaVat = stan.StawkaVat, WartoscNetto = decimal.Round(stan.Ilosc * iloscWydawana), WartoscVat = decimal.Round(stan.Ilosc * iloscWydawana * stan.StawkaVat.GetStawkaVat()), WartoscBrutto = decimal.Round(stan.Ilosc * iloscWydawana) + decimal.Round(stan.Ilosc * iloscWydawana * stan.StawkaVat.GetStawkaVat()) }; pozycjeDokumentuWydania.Add(pozycjaDokumentuWydania); iloscDoWydania -= pozycjaDokumentuWydania.Ilosc; } if (iloscDoWydania > 0) { throw new BussinessException("Niewystarczający stan magazynowy"); } } var dokument = new Dokument { Id = Guid.NewGuid(), Data = request.Model.Data, MagazynId = request.Model.MagazynId, Numer = numer, TypDokumentu = TypDokumentu.PrzesuniecieMiedzymagazynoweUjemne, PozycjeDokumentu = pozycjeDokumentuWydania }; return(await _dokumentRepository.Save(dokument)); }
public async Task<Guid> Handle(PrzesunCommand request, CancellationToken cancellationToken) { var stanyAktualne = await _stanyAktualneService.GetStanMagazynu(request.Model.MagazynWydajacyId, request.PrzedsiebiorstwoId); var orderedStanyAktualne = stanyAktualne.Where(x => x.Ilosc > 0) .OrderBy(x => x.CenaNetto).ThenBy(x => x.CenaBrutto).ToList(); var produkty = await _produktRepository.GetList(request.PrzedsiebiorstwoId); var pozycjeDokumentuWydania = new List<PozycjaDokumentu>(); var pozycjeDokumentuPrzyjecia = new List<PozycjaDokumentu>(); foreach (var p in request.Model.Pozycje) { var iloscDoWydania = p.Ilosc; for (var i = 0; i < orderedStanyAktualne.Count(x => x.ProduktId == p.ProduktId) && iloscDoWydania > 0; i++) { var stan = orderedStanyAktualne.Where(x => x.ProduktId == p.ProduktId).ToList()[i]; var iloscWydawana = iloscDoWydania > stan.Ilosc ? stan.Ilosc : iloscDoWydania; var pozycjaDokumentuWydania = new PozycjaDokumentu { Id = Guid.NewGuid(), CenaNetto = stan.CenaNetto, CenaBrutto = stan.CenaBrutto, Ilosc = iloscWydawana, ProduktId = stan.ProduktId, StawkaVat = stan.StawkaVat, WartoscNetto = decimal.Round(stan.Ilosc * iloscWydawana), WartoscVat = decimal.Round(stan.Ilosc * iloscWydawana * stan.StawkaVat.GetStawkaVat()), WartoscBrutto = decimal.Round(stan.Ilosc * iloscWydawana) + decimal.Round(stan.Ilosc * iloscWydawana * stan.StawkaVat.GetStawkaVat()) }; pozycjeDokumentuWydania.Add(pozycjaDokumentuWydania); var pozycjaDokumentuPrzyjecia = new PozycjaDokumentu { Id = Guid.NewGuid(), CenaNetto = stan.CenaNetto, CenaBrutto = stan.CenaBrutto, Ilosc = iloscWydawana, ProduktId = await UtworzProduktNaMagazyniePrzyjecia(produkty, p.ProduktId, request.Model.MagazynPrzyjmujacyId), StawkaVat = stan.StawkaVat, WartoscBrutto = pozycjaDokumentuWydania.WartoscBrutto, WartoscNetto = pozycjaDokumentuWydania.WartoscNetto, WartoscVat = pozycjaDokumentuWydania.WartoscVat }; pozycjeDokumentuPrzyjecia.Add(pozycjaDokumentuPrzyjecia); iloscDoWydania -= pozycjaDokumentuWydania.Ilosc; } if (iloscDoWydania > 0) { throw new BussinessException("Niewystarczający stan magazynowy"); } } var dokumentMinus = new Dokument { Id = Guid.NewGuid(), Data = request.Model.Data, MagazynId = request.Model.MagazynWydajacyId, Numer = $"MM-/{await GetLicznikDokumentu(request.PrzedsiebiorstwoId, request.Model.Data.Year)}/{request.Model.Data.Year}", TypDokumentu = TypDokumentu.PrzesuniecieMiedzymagazynoweUjemne, PozycjeDokumentu = pozycjeDokumentuWydania }; var dokumentPlus = new Dokument { Id = Guid.NewGuid(), Data = request.Model.Data, MagazynId = request.Model.MagazynPrzyjmujacyId, Numer = $"MM+/{await GetLicznikDokumentu(request.PrzedsiebiorstwoId, request.Model.Data.Year)}/{request.Model.Data.Year}", TypDokumentu = TypDokumentu.PrzesuniecieMiedzymagazynoweDodatnie, PozycjeDokumentu = pozycjeDokumentuPrzyjecia }; await _dokumentRepository.Save(dokumentMinus); await _dokumentRepository.Save(dokumentPlus); return dokumentMinus.Id; }
public ActionResult SaveOrder(Dokument dok) { if (!MusicStore.Models.Module.User.IsAuthenticated) return RedirectToAction("Index", "Home"); if (MusicStore.Models.Module.User.GetCurrentRole() != MusicStore.Models.Module.User.Klient) return RedirectToAction("Index", "Home"); DbModule module = DbModule.GetInstance(); dok.DataZamowienia = DateTime.Now; dok.NumerDokumentu = Dokument.GetLastNumber(); module.AddRow(dok); string[] koszyk = Request.Cookies["Cart"].Value.ToString().Split(','); var dict = new System.Collections.Generic.Dictionary<int, int>(); if (!String.IsNullOrEmpty(Request.Cookies["Cart"].Value)) foreach (string Ids in koszyk) { int Id = int.Parse(Ids); if (!dict.ContainsKey(Id)) { dict.Add(Id, 1); } else { dict[Id] += 1; } } var dict2 = new System.Collections.Generic.Dictionary<Album, int>(); decimal wartosc = 0; string waluta = ""; foreach (var obiekt in dict) { var album = module.Albumy.Where(x => x.Id == obiekt.Key).First(); dict2.Add(album, obiekt.Value); wartosc += album.BruttoValue * obiekt.Value; if (waluta == "") { waluta = album.BruttoSymbol; } else if (waluta != album.BruttoSymbol) { waluta = "(Wiele walut)"; wartosc = 0; } } int lp = 1; foreach(var poz in dict2) { PozycjaDokumentu pozycja = new PozycjaDokumentu(dok); pozycja.AlbumName = poz.Key.Nazwa + " (" + poz.Key.Artysta.Nazwa + ")"; pozycja.CenaBrutto = poz.Key.BruttoValue; pozycja.Ilosc = poz.Value; pozycja.Lp = lp; pozycja.State = RowState.Added; pozycja.Waluta = poz.Key.BruttoSymbol; module.AddRow(pozycja); var album = poz.Key; album.StanIlosc -= pozycja.Ilosc; module.Update(album); lp++; } ViewBag.NumerDokumentu = dok.NumerDokumentu; return View(); }