private static DateTime PredvidiDanNarudzbe(Sloj_pristupa_podacima.Artikli_na_skladistu ans, int sljedecaNarudzba, int kolicinaNarudzbe)
        {
            Sloj_pristupa_podacima.Artikl artikl = Sloj_pristupa_podacima.UpravljanjeSkladistem.UpravljanjeSkladistemDAL.DohvatiArtikl(ans.artikl);
            List <Sloj_pristupa_podacima.Stavke_dokumenta> stavke = Sloj_pristupa_podacima.UpravljanjeSkladistem.UpravljanjeSkladistemDAL.DohvatiStavkeDokumentaOdabranogArtikla(artikl, INTERVAL_NARUDZBE);

            if (stavke.Count > 0)
            {
                Sloj_pristupa_podacima.Dokument d3 = Sloj_pristupa_podacima.UpravljanjeSkladistem.UpravljanjeSkladistemDAL.DohvatiDokument(stavke.Last().dokument);
                DateTime vrijemeZadnjeNarudzbe     = d3.datum_izdavanja;
                int      trenutnaKolicina          = ans.kolicina;
                while (true)
                {
                    if (trenutnaKolicina - kolicinaNarudzbe >= MINIMALNA_KOLICINA)
                    {
                        trenutnaKolicina     -= kolicinaNarudzbe;
                        vrijemeZadnjeNarudzbe = vrijemeZadnjeNarudzbe.AddDays(sljedecaNarudzba);
                    }
                    else
                    {
                        break;
                    }
                }
                return(vrijemeZadnjeNarudzbe);
            }
            else
            {
                return(DateTime.Now.AddDays(30));
            }
        }
        private static int ProsjecnoVrijemePoNarudzbi(Sloj_pristupa_podacima.Artikli_na_skladistu ans)
        {
            Sloj_pristupa_podacima.Artikl artikl = Sloj_pristupa_podacima.UpravljanjeSkladistem.UpravljanjeSkladistemDAL.DohvatiArtikl(ans.artikl);

            int ukupnoDanaProdaje     = Sloj_pristupa_podacima.UpravljanjeSkladistem.UpravljanjeSkladistemDAL.BrojRacunaProdanogArtikala(artikl);
            int sumaIntervalaNarudzbe = 0;

            if (ukupnoDanaProdaje > 0)
            {
                List <Sloj_pristupa_podacima.Stavke_dokumenta> stavke = Sloj_pristupa_podacima.UpravljanjeSkladistem.UpravljanjeSkladistemDAL.DohvatiStavkeDokumentaOdabranogArtikla(artikl, INTERVAL_NARUDZBE);
                for (int i = stavke.Count - 1; i > 0; i--)
                {
                    Sloj_pristupa_podacima.Dokument d1 = Sloj_pristupa_podacima.UpravljanjeSkladistem.UpravljanjeSkladistemDAL.DohvatiDokument(stavke[i].dokument);
                    Sloj_pristupa_podacima.Dokument d2 = Sloj_pristupa_podacima.UpravljanjeSkladistem.UpravljanjeSkladistemDAL.DohvatiDokument(stavke[i - 1].dokument);
                    int brojDana = d1.datum_izdavanja.Subtract(d2.datum_izdavanja).Days;
                    sumaIntervalaNarudzbe += brojDana;
                }
                int kolicnik = sumaIntervalaNarudzbe /= ukupnoDanaProdaje;
                if (kolicnik > 0)
                {
                    return(kolicnik);
                }
                else
                {
                    return(1);
                }
            }
            return(10);
        }
        private static int AverageKolicineNarudzbe(Sloj_pristupa_podacima.Artikli_na_skladistu ans)
        {
            Sloj_pristupa_podacima.Artikl artikl = Sloj_pristupa_podacima.UpravljanjeSkladistem.UpravljanjeSkladistemDAL.DohvatiArtikl(ans.artikl);
            int kolicina   = Sloj_pristupa_podacima.UpravljanjeSkladistem.UpravljanjeSkladistemDAL.BrojProdanihArtikala(artikl);
            int brojRacuna = Sloj_pristupa_podacima.UpravljanjeSkladistem.UpravljanjeSkladistemDAL.BrojRacunaProdanogArtikala(artikl);

            if (kolicina > 0 && brojRacuna > 0)
            {
                return((int)kolicina / (int)brojRacuna);
            }
            return(1);
        }
 public static string PredvidiVrijemeNarudzbe(Sloj_pristupa_podacima.Artikli_na_skladistu ans)
 {
     Sloj_pristupa_podacima.Artikl artikl = Sloj_pristupa_podacima.UpravljanjeSkladistem.UpravljanjeSkladistemDAL.DohvatiArtikl(ans.artikl);
     MINIMALNA_KOLICINA = artikl.minimalna_kolicina;
     MINIMALNA_DONJA_GRANICA_U_DANIMA = artikl.vrijeme_dostave;
     if (MINIMALNA_KOLICINA >= ans.kolicina)
     {
         return(DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss"));
     }
     else
     {
         int      prosjecnoVrijemeNarudzbe  = ProsjecnoVrijemePoNarudzbi(ans);
         int      prosjecnaKolicinaNarudzbe = AverageKolicineNarudzbe(ans);
         DateTime vrijemeNarudzbe           = PredvidiDanNarudzbe(ans, prosjecnoVrijemeNarudzbe, prosjecnaKolicinaNarudzbe);
         if (vrijemeNarudzbe.AddDays(-MINIMALNA_DONJA_GRANICA_U_DANIMA) <= DateTime.Now)
         {
             return(DateTime.Now.ToString());
         }
         else
         {
             return(vrijemeNarudzbe.AddDays(-MINIMALNA_DONJA_GRANICA_U_DANIMA).ToString("dd.MM.yyyy HH:mm:ss"));
         }
     }
 }
Exemple #5
0
        public static void DodajRed(Form forma, Sloj_pristupa_podacima.Artikli_na_skladistu ans, string datum, Korisnik korisnik)
        {
            Sloj_pristupa_podacima.Artikl artikl = Sloj_pristupa_podacima.UpravljanjeSkladistem.UpravljanjeSkladistemDAL.DohvatiArtikl(ans.artikl);
            Label lblNaziv = new Label();

            lblNaziv.ForeColor = Color.LightGray;
            lblNaziv.Text      = artikl.naziv_artikla;
            lblNaziv.Location  = new Point(20, INITIAL_VERT + VERT_SPACE);

            Label lblDatum = new Label();

            lblDatum.ForeColor = Color.LightGray;
            lblDatum.Text      = datum;
            lblDatum.Location  = new Point(INITIAL_HORIZ + HORIZ_SPACE, INITIAL_VERT + VERT_SPACE);

            Button btnNaruci = new Button();

            btnNaruci.Text      = "Naruči";
            btnNaruci.ForeColor = Color.LightGray;
            btnNaruci.FlatStyle = FlatStyle.Flat;
            btnNaruci.FlatAppearance.BorderSize = 0;
            if (ProvjeriDaLiJeMoguceNaruciti(datum))
            {
                btnNaruci.Enabled = true;
            }
            else
            {
                btnNaruci.Enabled = false;
            }
            btnNaruci.Click += (s, e) =>
            {
                Sloj_pristupa_podacima.Dokument narudzba = new Sloj_pristupa_podacima.Dokument();
                try
                {
                    narudzba.datum_izdavanja = DateTime.Now;
                    narudzba.opis_dokumenta  = "Narudzba za " + artikl.naziv_artikla;
                    narudzba.ukupni_saldo    = artikl.cijena_artikla;
                    narudzba.tip_dokumenta   = 2;
                    narudzba.korisnik        = korisnik.id_korisnik;
                    narudzba.zaposlenik      = Sesija.PrijavljenKorisnik.id_korisnik;
                    Sloj_pristupa_podacima.UpravljanjeNarudzbama.UpravljanjeNarudzbamaDAL.KreirajNarudzbu(narudzba);

                    Sloj_pristupa_podacima.Usluga usluga = new Sloj_pristupa_podacima.Usluga();
                    usluga.naziv_usluge = narudzba.opis_dokumenta;
                    usluga.vrsta_usluge = 1;
                    Sloj_pristupa_podacima.Upravljanje_uslugama.UpravljanjeUslugamaDAL.KreiranjeUsluge(usluga);
                    Sloj_pristupa_podacima.Stavke_dokumenta stavke_Dokumenta = new Sloj_pristupa_podacima.Stavke_dokumenta();
                    stavke_Dokumenta.usluga   = Sloj_pristupa_podacima.Upravljanje_uslugama.UpravljanjeUslugamaDAL.VratiZadnjiUnos(usluga.naziv_usluge).id_usluga;
                    stavke_Dokumenta.dokument = Sloj_pristupa_podacima.UpravljanjeNarudzbama.UpravljanjeNarudzbamaDAL.VratiZadnjiRacun(narudzba).id_dokument;
                    stavke_Dokumenta.artikl   = artikl.id_artikl;
                    Sloj_pristupa_podacima.UpravljanjeNarudzbama.UpravljanjeNarudzbamaDAL.KreiranjeStavkeDokumenta(stavke_Dokumenta);

                    Sloj_pristupa_podacima.Obavijest obavijest = new Sloj_pristupa_podacima.Obavijest();
                    obavijest.Korisnik          = korisnik.id_korisnik;
                    obavijest.Naslov            = "Kreirana narudzba";
                    obavijest.Opis              = narudzba.opis_dokumenta;
                    obavijest.Procitano         = 0;
                    obavijest.Vrijeme_kreiranja = DateTime.Now;
                    obavijest.Zaposlenik        = Sesija.PrijavljenKorisnik.id_korisnik;
                    Sloj_pristupa_podacima.UpravljanjeObavijestima.UpravljanjeObavijestimaDAL.KreirajObavijest(obavijest);
                    Mailer.PosaljiObavijestNaMail(korisnik, narudzba.opis_dokumenta, "Kreirana narudzba");
                }
                catch (Exception)
                {
                    MessageBox.Show("Mail nije poslan!");
                }
            };
            btnNaruci.Location = new Point(INITIAL_HORIZ + 400, INITIAL_VERT + VERT_SPACE);
            INITIAL_VERT      += VERT_SPACE;
            forma.Controls.Add(lblNaziv);
            sveKontrolePredikcije.Add(lblNaziv);
            forma.Controls.Add(lblDatum);
            sveKontrolePredikcije.Add(lblDatum);
            forma.Controls.Add(btnNaruci);
            sveKontrolePredikcije.Add(btnNaruci);
        }