Skocz do zawartości

Ustawienie ceny cennikowej przez Sferę

Polecane posty

Próbuję ustawić cenę cennikową poprzez Sferę, korzystając z przykładu z waszego manuala, dokładnie tej części kodu:

            towarBO.Dane.CenaEwidencyjna = 12.3m;
            towarBO.Dane.WalutaCenyEwidencyjnej = walutyDD.PLN;

            foreach (PozycjaCennika poz in towarBO.Dane.PozycjeCennika)
            {
                poz.CenaKalkulacyjna = towarBO.Dane.CenaEwidencyjna;
                switch (poz.Cennik.PoziomCen.Nazwa)
                {
                    case "Detaliczny":
                        poz.CenaBrutto = 21.50m;
                        break;
                    case "Hurtowy":
                        poz.CenaNetto = 15m;
                        break;
                }
            }

... a u mnie, wygląda to tak (nie zwracać mocno uwagi na komentarze i WriteLine, bo próbowałem to debugować)...

                    if(price!=0)
                      {
                      Console.WriteLine("Dodajemy cenę: "+price);
                      towar.Dane.CenaEwidencyjna = 0m;
                      if(cur=="PLN") towar.Dane.WalutaCenyEwidencyjnej = waluty.PLN;
                      if(cur=="EUR") towar.Dane.WalutaCenyEwidencyjnej = waluty.EUR;
                      if(cur=="USD") towar.Dane.WalutaCenyEwidencyjnej = waluty.USD;
                      // cennik
                      foreach (PozycjaCennika poz in towar.Dane.PozycjeCennika)
                        {
                      	Console.WriteLine(poz.Cennik.PoziomCen.Nazwa+" <- "+price);
                        poz.CenaKalkulacyjna = towar.Dane.CenaEwidencyjna;
                        switch (poz.Cennik.PoziomCen.Nazwa)
                          {                        		
                          case "Odtworzeniowa":
                          poz.CenaNetto = price;
                          //poz.Marza = 0m;
                          //if(cur=="PLN") poz.WalutaCenyBazowej = waluty.PLN;
                          //if(cur=="EUR") poz.WalutaCenyBazowej = waluty.EUR;
                          //if(cur=="USD") poz.WalutaCenyBazowej = waluty.USD;
                          break;
                          
                          default:
                          Console.WriteLine("Jakaś inna cena istnieje?");
                          break;
                          }
                        }
                      }

 

Sęk w tym, że tak jakby nie widziało żadnych cenników, bo dodałem nawet specjalnie wiersz z defaultem i też nie jestem w stanie dodać ceny, do cennika "Odtworzeniowa". CenaEwidencyjna się rejestruje bez problemu. Czy powinienem ten cennik pierw jakoś zainicjować? Sam cennik ma status obowiązujący, więc niby jest ok.

Link to postu

Zacytowana część kodu dotyczy dodawania towaru i przy tej okazji ustawiania jego cen w cennikach głównych. Czy w Pańskim przypadku również jest to etap dodawania towaru (przed zapisem) czy jest to inny scenariusz? Jeśli jest to zmiana cen towarów, należy to wykonywac od strony cennika, czyli załadować cennik do edycji i zmieniać jego pozycje. Jak to robić optymalnie opisuje rozdział Model obiektowy - Pozycje uproszczone.

Link to postu

Jest to ustawienie ceny podczas dodawania produktu właśnie. Po kolejnym porównaniu kodu, zauważyłem, że u was jest jeszcze dodatkowa linia, ale nie wiem jaki jest jej cel:

int id = asortymenty.Dane.Wszystkie().Select(a => a.Id).Max() + 1;

Może to jej brak, jest moim błędem, ale nie widzę nigdzie użycia tej zmiennej potem.

Link to postu

Na to wygląda, bo np. do pętli:

Cytat

foreach (PozycjaCennika poz in towar.Dane.PozycjeCennika)

... dodałem Sobie wyświetlanie nazwy kolejnych cenników, które powinny się pojawiać:

Cytat

Console.WriteLine(poz.Cennik.PoziomCen.Nazwa+" <- "+price);

... no i nie ma żadnego rezultatu, ba, nawet jakby pętla się nie odbywała. W porównaniu do waszego przykładu, korzystam z obiektu towar, a nie towarBO, tak informacyjnie.

Link to postu

Oczywiście, że tak się bierze. To może tak, podam cały kod dodawania towaru - jest on trochę długi, ale ma kilka zadań. Komentarz "cena" odpowiada za cenę. Dane są przesyłane z zewnątrz i trafiają do obiektu results, skąd są pobierane. Nie kopiowałem tylko towar.Zapisz(), bo mam tam odsyłanie danych zwrotnych.

 

Cytat

                  // pobranie danych do wystawiania
                  IAsortymenty asortymenty = sfera.PodajObiektTypu<IAsortymenty>();
                  IJednostkiMiar jednostki = sfera.PodajObiektTypu<IJednostkiMiar>();
                  ICechyAsortymentu cechy = sfera.PodajObiektTypu<ICechyAsortymentu>();
                  JednostkaMiary sztuka = jednostki.DaneDomyslne.Sztuka;
                  JednostkaMiary kg = jednostki.DaneDomyslne.Kilogram;
                  JednostkaMiary metr = jednostki.DaneDomyslne.Metr;
                  JednostkaMiary metrkw = jednostki.DaneDomyslne.MetrKwadratowy;
                  IWalutyDaneDomyslne waluty = sfera.PodajObiektTypu<IWaluty>().DaneDomyslne;
                  
                  using (IAsortyment towar = asortymenty.Utworz())
                    {
                      // utworzenie towaru
                    towar.Dane.Symbol = results.index; // symbol
                    towar.Dane.Nazwa = results.name; // nazwa
                    towar.Dane.PKWiU = results.pkwiu; // PKWiU
                    towar.Dane.Opis = results.comment; // Opis asortymentu
                    int cat; cat = results.cat;
                    towar.Dane.Grupa = sfera.PodajObiektTypu<IGrupyAsortymentu>().Dane.Wszystkie().Where(g => g.Id == cat).FirstOrDefault(); // grupa
                    
                    // cena
                    decimal price; string cur;
                    price = results.price; cur = results.cur;
                    if(price!=0)
                      {
                      Console.WriteLine("Dodajemy cenę: "+price);
                      towar.Dane.CenaEwidencyjna = 0.01m;
                      if(cur=="PLN") towar.Dane.WalutaCenyEwidencyjnej = waluty.PLN;
                      if(cur=="EUR") towar.Dane.WalutaCenyEwidencyjnej = waluty.EUR;
                      if(cur=="USD") towar.Dane.WalutaCenyEwidencyjnej = waluty.USD;
                      // cennik
                      foreach (PozycjaCennika poz in towar.Dane.PozycjeCennika)
                        {
                          Console.WriteLine(poz.Cennik.PoziomCen.Nazwa+" <- "+price);
                        poz.CenaKalkulacyjna = towar.Dane.CenaEwidencyjna;
                        switch (poz.Cennik.PoziomCen.Nazwa)
                          {                                
                          case "Odtworzeniowa":
                          poz.CenaNetto = price;
                          //poz.Marza = 0m;
                          //if(cur=="PLN") poz.WalutaCenyBazowej = waluty.PLN;
                          //if(cur=="EUR") poz.WalutaCenyBazowej = waluty.EUR;
                          //if(cur=="USD") poz.WalutaCenyBazowej = waluty.USD;
                          break;
                          
                          default:
                          Console.WriteLine("Jakaś inna cena istnieje?");
                          break;
                          }
                        }
                      }
                    
                    // jednostki miary i ich konwersje
                    string unit; string unit2; string unit3; 
                    unit = results.unit; unit2 = results.unit2; unit3 = results.unit3;                    
                    var j1 = sztuka; switch (unit){ case "szt": j1 = sztuka; break; case "kg": j1 = kg; break; case "m": j1 = metr; break; case "m2": j1 = metrkw; break; }
                    var j2 = sztuka; switch (unit2){ case "szt": j2 = sztuka; break; case "kg": j2 = kg; break; case "m": j2 = metr; break; case "m2": j2 = metrkw; break; }                    
                    var j3 = sztuka; switch (unit3){ case "szt": j3 = sztuka; break; case "kg": j3 = kg; break; case "m": j3 = metr; break; case "m2": j3 = metrkw; break; }                    
                    var u1 = towar.JednostkiMiary.DodajPodstawowaJednostkeMiary(j1); // podstawowa jednostka miary
                    if(unit2!=null
                      {
                      var u2 = towar.JednostkiMiary.DodajJednostkeMiary(j2,j1,Convert.ToDecimal(results.unit2calc),1); // pierwsza dodatkowa jednostka miary
                      if(unit2=="kg") u1.Masa = Convert.ToDecimal(results.unit2calc);
                      }
                    if(unit3!=null
                      {
                      var u3 = towar.JednostkiMiary.DodajJednostkeMiary(j3,j1,Convert.ToDecimal(results.unit3calc),1); // druga dodatkowa jednostka miary
                      if(unit3=="kg") u1.Masa = Convert.ToDecimal(results.unit3calc);
                      }
                    // dopisanie
                    if(unit=="kg") u1.Masa = 1m;
                    
                    
                         
                    // cechy
                    int f;
                    foreach(var feat in results.feat) {
                      f = feat;
                      towar.Dane.Cechy.Add(cechy.Dane.Wszystkie().Where(c => c.Id == f).FirstOrDefault());
                      }
                    
                    // POLA WŁASNE
                    var towarPW = towar.Dane.PobierzEncjeZaawansowanychPolWlasnych();
                    // slownikowe
                    string dictk; string dictv; string dictn;
                    foreach(dynamic dict in results.dict) { 
                      dictk = dict.k; dictn = dict.n; dictv = dict.v;
                      //Console.WriteLine(dict);
                      var wartoscslownika = sfera.PodajObiektTypu<ISlownikiWlasne>()[dictk].Znajdz(dictv).Dane;
                      towarPW.UstawWartoscPola(dictn,wartoscslownika);
                      }
                    // pozostałe
                    string fieldn; string fieldt; decimal fielddec; string fieldstr; int fieldint;
                    foreach(dynamic field in results.field) { 
                      fieldn = field.n; fieldt = field.t;
                      if(fieldt=="decimal") { fielddec = field.v; towarPW.UstawWartoscPola(fieldn,fielddec); }
                      if(fieldt=="int") { fieldint = field.v; towarPW.UstawWartoscPola(fieldn,fieldint); }
                      if(fieldt=="text") { fieldstr = field.v; towarPW.UstawWartoscPola(fieldn,fieldstr); }
                      }

 

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