AVIS – základní scénář užití

Pro snadnější orientaci při práci s AVIS jsme připravili scénář s použitím nejpoužívanějších metod, který řeší obvykle eshopy.

Scénář zahrnuje následující body:

1. Založení kontaktu a kontrola existence kontaktu.

   1.1 Pokud kontakt neexistuje, vytvoření nového.

   1.2 Pokud kontakt existuje, aktualizace kontaktu.

2. Založení dokladu Zakázka s tímto kontaktem.

   2.1 Vytvoření hlavičky dokladu.

   2.2 Vložení identifikátoru nově založeného / aktualizovaného kontaktu do dokladu.

   2.3 Založení pěti vzorových položek s různým množstvím a cenami – v cyklu.

   2.4 Provedení součtu dokladu.

   2.5 Změna stavu položek z konceptu na Dodat.

   2.6 Provedení rezervace položek.

 

Komplexnější způsob použití AVIS je k dispozici ve vzorovém projektu, který lze stáhnout ze stránky Stažení software.

 

Příklad

    class ZakladniPriklad
    {
        public static void ZalozitKontaktAVytvoritZakazku()
        {
            KontaktyReference.KontaktContract kontakt;
            
            kontakt = ZakladniPriklad.NovyKontakt();
            ZakladniPriklad.VytvoritARezerovatZakazku(kontakt);
        }

        public static KontaktyReference.KontaktContract NovyKontakt()
        {
            KontaktyReference.KontaktContract kontakt;
            bool KontaktNeexistuje = false;
            var sc = KontaktyService();

            //kontrolujeme existenci kontaktu v systému, abychom se rozhodli, zda budeme 
            //provádět vložení nového nebo aktualizaci stávajícího kontaktu
            try
            {
                kontakt = sc.NacistKontakt("Altus Software Test");
            }
            catch
            {
                kontakt = new KontaktyReference.KontaktContract();
                KontaktNeexistuje = true;
            }

            kontakt.Firma = "Altus Software Test";      //identifikátor systému Altus Vario string(30)
            kontakt.NazevFirmy = "Altus Software s.r.o.";
            kontakt.TypKontaktu = "Organizace";
            kontakt.Kniha = "Adresář";
            kontakt.Email = "email@altus.cz";
            kontakt.Telefon = "236 190 190";
            kontakt.IC = "61681202";

            kontakt.FakturacniAdresa = new KontaktyReference.AdresaContract
            {
                Ulice = "Rubeška 215/1",
                Obec = "Praha 9",
                Okres = "Hlavní město Praha",
                PSC = "19000"
            };

            kontakt.DorucovaciAdresa = new KontaktyReference.AdresaContract
            {
                Ulice = "Drobného 555/49",
                Obec = "Brno",
                PSC = "60200"
            };

            if (KontaktNeexistuje)
            {
                //vložením získáme rowguid, který přidělilo Vario
                kontakt.rowguid = sc.VlozitKontakt(kontakt);
                //opětovým načtením získáme kontakt, který je doplněný o hodnoty šablony v systému Vario
                kontakt = sc.NacistKontaktPodleId(kontakt.rowguid);
            }
            else 
            {
                sc.AktualizovatKontakt(kontakt);
            }

            return kontakt;
        }

        public static void VytvoritARezerovatZakazku(KontaktyReference.KontaktContract kontakt)
        {
            //vytvoříme doklad
            var doklad = ZakladniPriklad.VytvoritDokladSVicePolozkami(kontakt);

            var sc = DokladyService();

            //založíme doklad do Varia a získáme jeho rowguid
            doklad.rowguid = sc.VlozitNovyDoklad(doklad);

            //znovu načteme doklad s doplněnými údaji
            doklad = sc.NacistDokladRG(doklad.rowguid);

            //zarezervujeme polozky
            var sklad = SkladService();

            foreach (var polozka in doklad.Polozky)
            {
                //nejprve nastavíme stav 'DODAT', tím dojde ke zrušení stavu 'koncept' položky
                sc.DodatPolozkuDokladu(polozka.rowguid);

                //potom provedeme vlastní operaci rezervování
                sklad.Blokovat(polozka.rowguid.ToString(), false, true, true);
            }
        }

        public static DokladyReference.DokladContract VytvoritDokladSVicePolozkami(KontaktyReference.KontaktContract kontakt)
        {
            var doklad = new DokladyReference.DokladContract();
            doklad.Kniha = "Zakázky";
            doklad.TypZaznamu = "ZZ";
            doklad.Poznamka = "Demo AVIS";
            doklad.Mena = "EUR";
            doklad.Firma = kontakt.Firma;       //zadáním identifikátoru firmy dojde k vložení firmy do dokladu
                                                //včetně údajů, předaných při vytváření nového kontaktu
            doklad.Datum = DateTime.Today;
            doklad.DatumZdanitelnehoPlneni = DateTime.Today;

            doklad.FakturacniAdresa  = kontakt.FakturacniAdresa.NaAdresuDokladu();
            doklad.DorucovaciAdresa = kontakt.DorucovaciAdresa.NaAdresuDokladu();

            //pro založení položek použijeme iteraci kolekce s produkty ze vzorových testovacích dat
            List<string> produktyNaPolozky = new List<string>();
            produktyNaPolozky.Add("Autoatlas mini");
            produktyNaPolozky.Add("eKompas GPS");
            produktyNaPolozky.Add("Mapa ČR M 335000");
            produktyNaPolozky.Add("Nůž SPIRIT Multifunkční");
            produktyNaPolozky.Add("Zámek LOCK");

            var polozky = new List<DokladyReference.DokladPolozkaContract>();
            int i = 0;

            foreach (var produkt in produktyNaPolozky)
            {
                i++;
                var polozka = new DokladyReference.DokladPolozkaContract();
                polozka.Produkt = produkt;
                polozka.MnozstviJednotek = i;
                polozka.SazbaDPH = 21m;
                polozka.CenaCelkemBezDPH = polozka.MnozstviJednotek * 100m;
                polozka.CelkemDPH = polozka.CenaCelkemBezDPH * polozka.SazbaDPH / 100;
                polozka.CenaCelkemVcetneDPH = polozka.CenaCelkemBezDPH * (100 + polozka.SazbaDPH) / 100;
                polozky.Add(polozka);
            }

            //položky na výsledném dokladu je nutné sečíst, inegrační služby AVIS tento součet kontrolují
            doklad.Polozky = polozky.ToArray();
            doklad.CelkemVcetneDPH = doklad.Polozky.Select(p => p.CenaCelkemVcetneDPH).Sum();
            doklad.CelkemBezDPH = doklad.Polozky.Select(p => p.CenaCelkemBezDPH).Sum();
            doklad.ZaokrouhlovatSoucet = 0.01m;
            return doklad;
        }
        
        static KontaktyReference.KontaktyClient KontaktyService()
        {
            var kontakty = new KontaktyReference.KontaktyClient();
            kontakty.ClientCredentials.UserName.UserName = "Altus";
            kontakty.ClientCredentials.UserName.Password = "";
            return kontakty;
        }

        static DokladyReference.DokladyClient DokladyService()
        {
            var sc = new DokladyReference.DokladyClient();
            sc.ClientCredentials.UserName.UserName = "Altus";
            sc.ClientCredentials.UserName.Password = "";
            return sc;
        }

        static SkladReference.SkladClient SkladService()
        {
            var sklad = new SkladReference.SkladClient();
            sklad.ClientCredentials.UserName.UserName = "Altus";
            sklad.ClientCredentials.UserName.Password = "";
            return sklad;
        }
    }