Skocz do zawartości

Rozbicie pozycji na dostawy - sferycznie

Polecane posty

Witam.

Mam listę składającą się z

Symbol Asortymentu, ilość, Kod Dostawy

Czy można taką listę sprawdzić za pomocą sfery przed wystawieniem dokumentu by użytkownikowi przed wystawieniem dokumentu wskazać brakując pozycje.

Jeśli tak to poproszę o który pozwoli mi porównać z moją listą .

DataPrzychodu, SymbolAsortymentu, kod Dostawy, Ilośc, Dostępne, Zadysponowane.

Coś na przykładzie 

image.thumb.png.5a97575531270d5d160d49bf1e5d94db.png

Link to postu

Najprościej byłoby oczywiście sprawdzić dostępne partie już po dodaniu pozycji na dokument (przez interfejs rozbicia pozycji), ale można też uzyskać podobny wynik pobierając z bazy danych informacje o dostępnych ilościach, łącząc je następnie z danymi z listy wejściowej:
 

var symboleAsortymentu = pozycje.Select(p => p.SymbolAsortymentu).Distinct().ToList();
var kodyDostawy = pozycje.Select(p => p.KodDostawy).Distinct().ToList();
var stany = sfera.PodajObiektTypu<IMagazynier>()
    .Dane
    .Przychody()
    .Where(p => symboleAsortymentu.Contains(p.Asortyment.Symbol))
    .Select(p => new
    {
        DataPrzychodu = p.Data,
        SymbolAsortymentu = p.Asortyment.Symbol,
        KodDostawy = p.Partia.Numer,
        DostepnaIlosc = p.Ilosc - ((decimal?)p.Rozchody.Sum(r => r.Ilosc) ?? 0m),
        Zadysponowane = (decimal?)p.Rozchody.Where(r => r.SesjaRezerwujaca != null).Sum(r => r.Ilosc) ?? 0m
    })
    .Where(p => kodyDostawy.Contains(p.KodDostawy))
    .ToList();

var braki =
    (from pozycja in pozycje
    join stan in stany on new { pozycja.SymbolAsortymentu, pozycja.KodDostawy } equals new { stan.SymbolAsortymentu, stan.KodDostawy } into stanJoin
    from stan in stanJoin.DefaultIfEmpty()
    select new
    {
        DataPrzychodu = stan?.DataPrzychodu,
        SymbolAsortymentu = pozycja.SymbolAsortymentu,
        KodDostawy = pozycja.KodDostawy,
        Ilosc = pozycja.Ilosc,
        Dostepne = stan?.DostepnaIlosc ?? 0m,
        Zadysponowane = stan?.Zadysponowane ?? 0m
    })
    .ToList();

 

Link to postu
  • 3 tygodnie później...

Trzeba najpierw przejść do pozycji dokumentu magazynowego, z którego będzie można pobrać informacje o rozchodach pozycji.

 

fs.Dane
  .Pozycje
  .FirstOrDefault()
  .PozycjeRealizowane
  .Where(r => (r.TypDokumentuRealizowanego & (int)(TypDokumentu.WydanieZewnetrzne | TypDokumentu.KorektaWydaniaZewnetrznego)) != 0)
  .Select(r => r.PozycjaRealizowana)
  .SelectMany(p => p.Wydanie?.Rozchody ?? p.Rezerwacja?.Rozchody)
  .Where(r => r != null)
  .GroupBy(r => r.PrzychodZrodlowy)
  .Select(r => new
  {
     SymbolAsortymentu = r.Key.Asortyment.Symbol,
     DataPrzychodu = r.Key.Data,
     Numer = r.Key.Partia.Przyjecie.PozycjaDokumentu.Dokument.NumerWewnetrzny.PelnaSygnatura,
     KodDostawy = r.Key.Partia.Numer,
     TerminWaznosc = r.Key.Partia.Termin,
     Opis = r.Key.Partia.Komentarz,
     Ilosc = r.Sum(g => g.Ilosc)
  })
  .ToList();

 

Link to postu
×
×
  • Dodaj nową pozycję...