Skocz do zawartości

[Sfera] pobieranie ostatniej ceny nabycia asortymentu

Polecane posty

Potrzebuję pobrać ostatnią cenę nabycia asortymentu, więc robię to tak:

  IAsortymenty asortymenty = sfera.PodajObiektTypu<IAsortymenty>();
  int aid; aid = results.good;
  var asortyment = asortymenty.Dane.Wszystkie().Where(a => a.Id == aid).FirstOrDefault();
  if(asortyment == null) {}
  else {       
  	int stock; stock = results.stock; decimal cenaNabycia = 1m;
    Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - pobieranie ostatniej ceny zakupu: "+asortyment.Nazwa); 
    var partia = asortyment.Przychody.Where(p => p.Magazyn.Id == stock).LastOrDefault().Partia; 
    if(partia == null) Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - brak przychodów dla asorytmenutu.");
    else cenaNabycia = partia.Przyjecie.OkreslKosztJednostkowy();
    response = "{ \"price\":\""+decimal.Round(cenaNabycia,6,MidpointRounding.AwayFromZero)+"\" }";
    
    }

I wszystko działa prawidłowo poza jednym problemem - gdy asortyment nie miał zakupu, z linii pobrania partii, wywala błąd braku obiektu - w sumie jest to prawidłowe, ale nie pomaga tutaj uwarunkowanie obiektu na null, jak przy asortymencie. W jaki sposób w takim razie sprawdzić, czy były jakieś partie na asortymencie? asortyment.Przychody/Przyjecia.Count (także jako metoda) zwraca mi 1, więc chyba nie działa, jakbym oczekiwał. Pomocy?

Link to postu
6 minut temu, Jarek K. napisał:

Skoro zwraca 1 to jednak był jakiś przychód, ale może na innym magazynie, ale nie na stock.

Racja, nie wpadłem na to, a zmyliła mnie zakładka dostawy, okazało się, że rzeczywiście był zakup na innym magazynie, więc po poprawce jest ok.

    if(asortyment.Przychody.Where(p => p.Magazyn.Id == stock).Count()>0) 
      {
      var partia = asortyment.Przychody.Where(p => p.Magazyn.Id == stock).LastOrDefault().Partia; 
      cenaNabycia = partia.Przyjecie.OkreslKosztJednostkowy();
      }
    else Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - brak przychodów dla asorytmenutu.");

 

10 minut temu, Jarek K. napisał:

Przy okazji drobna uwaga: Last nie oznacza ostatni w sensie daty wejścia na magazyn czy jakiejkolwiek informacji tylko w sensie kolekcji, a ta jest nieposortowana.

Tutaj założyłem, że będzie to ostatnia partia jaka powstała :( GUI pobiera cenę ostatniej dostawy, więc pewnie macie na to jakąś fajną metodę? ;)

Link to postu

Owszem, posortować malejąco wg daty i wziąć pierwszy.

.OrderByDescending(p => p.Data).FirstOrDefault()

Ostatnia partia jaka powstała to trzeba by posortować po idzie.

Jeszcze przyszło mi do głowy, że skoro to ma być cena nabycia, to powinno się odsiać zwroty, czyli dodać warunek

p.PrzychodPierwotny == null

Edytowane przez Jarek K.
Link to postu
×
×
  • Dodaj nową pozycję...