Radomił Ząbik 308 Napisano 23 Lutego 2017 Udostępnij Napisano 23 Lutego 2017 w Powielanie asortymenu, przez Sferę (edytowane) Czy jest jakaś bezpośrednia metoda, na powielenie wybranego asortymentu, tak aby od razu można było go edytować? Na tą chwilę, jedyne co znalazłem, to metoda WypelnijNaPodstawie, więc wygląda to mniej więcej tak: var asDoEdycji = asortymenty.Dane.Wszystkie().Where(a => a.Id == aid).FirstOrDefault(); if(asDoEdycji == null) {} else { using(IAsortyment usluga = asortymenty.Utworz()) { usluga.WypelnijNaPodstawie(asDoEdycji); if(usluga.Zapisz()) { } else { usluga.WypiszBledy(); } } } Edytowane 23 Lutego 2017 przez Radomił Ząbik Link to postu
Jarek KοIaѕa 2 Napisano 24 Lutego 2017 Udostępnij Napisano 24 Lutego 2017 w Powielanie asortymenu, przez Sferę Ta metoda to właśnie WypelnijNaPodstawie. Link to postu
Radomił Ząbik 308 Napisano 1 Marca 2017 Autor Udostępnij Napisano 1 Marca 2017 w Powielanie asortymenu, przez Sferę Mam jeszcze dwa problemy z tematem powyżej i nie ukrywam, że potrzebowałbym pomocy. Otóż, co robię - biorę indeks asortymentu, powielam go i zmieniam na usługę - jest nam to potrzebne do obsłużenia procesów produkcyjnych u kooperantów. Więc mam powyższy kawałek kodu, po czym dokonuje zmian na usługę: RodzajAsortymentu rUsluga = rodzaje.DaneDomyslne.Usluga; ... usluga.Dane.Rodzaj = rUsluga; // zmieniamy na usługę I wygląda na to, że nie jest to do końca prawidłowa metoda, bo mam dwa następujące problemy: 1. Błąd, w przypadku gdy asortyment posiadał stany minimalne lub optymalne "Dla asortymentu bez stanów magazynowych nie mogą być określone stany minimalne i optymalne w wybranych magazynach. Próbowałem je wyzerować, ale dostaję wtedy także błąd, że nie mogę ich ustawiać: foreach(Magazyn mag in sfera.PodajObiektTypu<IMagazyny>().Dane.Wszystkie()) { Console.WriteLine(mag.Adres); usluga.UstawStanMinimalny(mag,0); usluga.UstawStanOptymalny(mag,0); } 2. Nowe indeksy, które są teraz usługami, trafiają automatycznie do cenników, w których były wcześniej towary, a nie chciałbym aby tak się działo. Link to postu
Jarek KοIaѕa 2 Napisano 1 Marca 2017 Udostępnij Napisano 1 Marca 2017 w Powielanie asortymenu, przez Sferę Ad.1. Wyzerować przed zmianą rodzaju. Ad.2. Usunąć pozycje z cenników. Link to postu
Radomił Ząbik 308 Napisano 1 Marca 2017 Autor Udostępnij Napisano 1 Marca 2017 w Powielanie asortymenu, przez Sferę (edytowane) Ad.1 - no niestety, też na to wcześniej wpadłem, ale bez efektu. Kombinowałem też z 0 i null, bo na liście w GUI pasowałby null dla optymalnego: usluga.WypelnijNaPodstawie(asDoEdycji); // powielamy asortyment // stan minimalny i maksymalny foreach(Magazyn mag in sfera.PodajObiektTypu<IMagazyny>().Dane.Wszystkie()) { //Console.WriteLine(mag.Id); usluga.UstawStanMinimalny(mag,0); usluga.UstawStanOptymalny(mag,null); } usluga.Dane.Rodzaj = rUsluga; // zmieniamy na usługę ... efekt bez zmian: Ad.2 - yhym, no to ok, jestem w stanie znaleźć pozycję cennika dodatkowego, ale niestety, nie znalazłem dostępu do metody Usuń: // cenniki foreach (PozycjaCennika poz in usluga.Dane.PozycjeCennika) { Console.WriteLine(poz.Cennik.PoziomCen.Nazwa); Console.WriteLine(poz.Cennik.Tytul); Console.WriteLine(poz.Cennik.Bazowy); if(poz.Cennik.Bazowy==false) { // i jaką metodą usunąć pozycję :( } } Edytowane 1 Marca 2017 przez Radomił Ząbik Uzupełnienie punktu 2giego. Link to postu
Jarek KοIaѕa 2 Napisano 1 Marca 2017 Udostępnij Napisano 1 Marca 2017 w Powielanie asortymenu, przez Sferę Miałem na myśli raczej usluga.Dane.StanyWMagazynachZakresy.Clear(); ponieważ ustawienie stanów na 0 pozostawia encję stanu dla magazynu. Link to postu
Radomił Ząbik 308 Napisano 2 Marca 2017 Autor Udostępnij Napisano 2 Marca 2017 w Powielanie asortymenu, przez Sferę Ad1. Tak, tą metodą, udało się wyczyścić bez problemu, dziękuje! Ad2. Niestety, im bardziej kombinuje, tym nie wiem jak te pozycje cennika usunąć. Chyba kwestia leży w tym, że jest to zduplikowane z poprzedniego asortymentu. Generalnie umiem dotrzeć do pozycji, ale nie udało mi się znaleźć metody na jej usunięcie, a próbowałem kilka, poniżej moje eksperymenty: foreach (PozycjaCennika poz in usluga.Dane.PozycjeCennika) // listuję pozycje cennika dla zduplikowanego asortymentu { if(poz.Cennik.Bazowy==false) // szukam pozycji, która jest w cenniku dodatkowym, głównych nie ruszam { // Console.WriteLine(poz.Cennik.Tytul); // weryfikacja tytułu cennika do usunięcia var cennikDoEdycji = menadzerCennikow.Dane.Wszystkie().Where(c => c.Id == poz.Cennik.Id).First(); using (ICennik cennik = menadzerCennikow.Znajdz(cennikDoEdycji)) { // IUproszczonaPozycjaCennika pozycja = cennik.Pozycje.ZnajdzPozycjeCennika(usluga); // podjąłem próbę znalezienia pozycji, ale nie przyjmuje tutaj tego nowego asorymentu w żadnej kombinacji // cennik.Pozycje.Usun(); // jest metoda na usunięcia, ale potrzebuje typu IUproszczonaPozycjaCennika } } } Link to postu
Jarek KοIaѕa 2 Napisano 2 Marca 2017 Udostępnij Napisano 2 Marca 2017 w Powielanie asortymenu, przez Sferę Przed usuwaniem pozycji z cennika ta nowa usługa musi zostać zapisana, dopiero wtedy ją znajdzie. Wykonywane jest zapytanie w bazie danych, gdzie jeszcze nie ma tej niezapisanej usługi. Są jednak jakieś problemy z obiektowym usuwaniem pozycji cennika w takiej sytuacji, bo to sprawdziłem. Proponuję to zrobić bezpośrednio w SQL, oczywiście po zapisaniu usługi: var dbcFactory = sfera.PodajObiektTypu<IDbConnectionFactory>(); using (var connection = dbcFactory.CreateConnection(DbConnectionFlags.NoPooling | DbConnectionFlags.NoEnlist)) using (DbCommand command = connection.CreateCommand()) { try { connection.Open(); command.CommandText = string.Format( "DELETE pc FROM ModelDanychContainer.PozycjeCennika AS pc " + "INNER JOIN ModelDanychContainer.Cenniki AS cen ON pc.Cennik_Id=cen.Id " + "WHERE Asortyment_Id={0:d} AND cen.Bazowy=0", usluga.Dane.Id); command.ExecuteNonQuery(); } catch (Exception ex) { Console.WriteLine("Wystąpił problem:\n{0}", ex.Message); } } Link to postu
Radomił Ząbik 308 Napisano 2 Marca 2017 Autor Udostępnij Napisano 2 Marca 2017 w Powielanie asortymenu, przez Sferę Metoda z bezpośrednim usuwanie z bazy, zadziałała! Dziękuje bardzo za pomoc. Link to postu
Jarek KοIaѕa 2 Napisano 3 Marca 2017 Udostępnij Napisano 3 Marca 2017 w Powielanie asortymenu, przez Sferę Jeszcze dla kompletu metoda obiektowa: ICenniki cenniki = sfera.PodajObiektTypu<ICenniki>(); foreach (Cennik dodatkowy in usluga.Dane.PozycjeCennika.Select(p => p.Cennik).Distinct()) { ICennik dodatkowyBo = cenniki.Znajdz(dodatkowy); foreach (IUproszczonaPozycjaCennika uprPozCen in dodatkowyBo.Pozycje.Wszystkie.Where(p => p.IdAsortymentu == usluga.Dane.Id)) dodatkowyBo.Pozycje.Usun(uprPozCen); if (!dodatkowyBo.Zapisz()) dodatkowyBo.WypiszBledy(); } Link to postu
Radomił Ząbik 308 Napisano 3 Marca 2017 Autor Udostępnij Napisano 3 Marca 2017 w Powielanie asortymenu, przez Sferę O super! To zmodyfikuje na tą, bo to zawsze ładnie wygląda i działa Link to postu
Radomił Ząbik 308 Napisano 5 Maja 2017 Autor Udostępnij Napisano 5 Maja 2017 w Powielanie asortymenu, przez Sferę Wrócę do tematu, bo w wersji 15 weszła jakaś dodatkowa walidacja - wyrzuca, że dla usługi nie można ustawić sposobu rozbijania na partię. Czy ustawienie go jak poniżej, jest prawidłowe: usluga.Dane.SposobRozbiciaNaPartie = 0; Link to postu
Jarek KοIaѕa 2 Napisano 5 Maja 2017 Udostępnij Napisano 5 Maja 2017 w Powielanie asortymenu, przez Sferę (edytowane) Nie można ustawiać innego niż Brak. Brak można ustawić. :) Najlepiej zrobić to z wykorzystaniem odpowiedniego typu wyliczeniowego (patrz dokumentacja). Z drugiej jednak strony ta właściwość jest poprawnie wypełniana w przypadku inicjowania danymi z szablonu (tak jak to się dzieje w UI) i nie ma potrzeby ustawiania ponownie: var towary = sfera.PodajObiektTypu<IAsortymenty>(); using (var usluga = towary.Utworz()) { usluga.WypelnijNaPodstawieSzablonu(sfera.PodajObiektTypu<ISzablonyAsortymentu>().DaneDomyslne.Usluga); usluga.Dane.SposobRozbiciaNaPartie = (byte)SposobRozbiciaNaPartie.Brak; // to jest już niepotrzebne usluga.AutoSymbol(); if (!usluga.Zapisz()) usluga.WypiszBledy(); } Edytowane 5 Maja 2017 przez Jarek K. Link to postu
Radomił Ząbik 308 Napisano 5 Maja 2017 Autor Udostępnij Napisano 5 Maja 2017 w Powielanie asortymenu, przez Sferę Jasne, gdybym tworzył na nowo, to nie ma problemu, ale ja akurat biorę istniejący asortyment, powielam go, modyfikuję i zmieniam na usługę - są to usługi pomocnicze, do asortymentów, celem zamówienia wykonania u poddostawcy. Link to postu
Polecane posty