Exemple #1
0
        public bool Delete(Racun racun)
        {
            MySqlTransaction trans = null;
            MySqlConnection  con   = null;

            try
            {
                con   = ApotekeDB.Instance.OpenConnection();
                trans = con.BeginTransaction();

                racun.Vrijednost   -= this.Vrijednost;
                racun.Iznos        -= this.IznosKupac;
                racun.IznosPopusta -= this.IznosPopusta;
                racun.DoplataSaPDV -= this.DoplataSaPDV;

                if (this.IznosTakse != 0)
                {
                    racun.Iznos -= this.IznosTakse;
                    decimal stopaTaksi = 0;
                    if (!String.IsNullOrEmpty(Global.Instance.Konfiguracija["StopaTakse"]))
                    {
                        decimal.TryParse(Global.Instance.Konfiguracija["StopaTakse"], out stopaTaksi);
                    }

                    racun.Vrijednost -= Math.Round(this.IznosTakse / (1 + stopaTaksi / 100), 2);
                }

                if (this.Pausal != 0)
                {
                    racun.Iznos      -= this.Pausal;
                    racun.Vrijednost -= Math.Round((this.Pausal / (1 + this.PDVStopa / 100)), 2);
                }

                racun.Zaokruzenje = ((racun.Iznos + racun.DoplataSaPDV - racun.IznosPopusta) - Global.Instance.Zaokruzenje(racun.Iznos + racun.DoplataSaPDV - racun.IznosPopusta)) * (-1);
                if (!racun.Save(trans))
                {
                    trans.Rollback();
                    return(false);
                }

                Roba roba = this.Roba;
                roba.Izlaz        -= this.Kolicina;
                roba.Zaliha       += this.Kolicina;
                roba.ModifikatorID = Global.Instance.LoggedKorisnik.ID;
                if (!roba.Save(trans))
                {
                    trans.Rollback();
                    return(false);
                }

                MySqlCommand command = new MySqlCommand("sp_StavkaRacuna_DelByID", trans.Connection, trans);
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.Parameters.Add(new MySqlParameter("pID", MySqlDbType.Int32)).Value = this.ID;
                command.ExecuteNonQuery();

                trans.Commit();
                con.Close();

                Logging.Log.Create("Stavka je stornirana.",
                                   Logging.LogEntryLevel.Informational, null,
                                   new Logging.LogEntryAttribute("Operater", Global.Instance.LoggedKorisnik.KorisnickoIme),
                                   new Logging.LogEntryAttribute("StavkaID", this.ID.ToString()));

                return(true);
            }
            catch (SaveFailedException saveEx)
            {
                Logging.Log.Create("Neko je promjenio podatke stavke racuna.",
                                   Logging.LogEntryLevel.Critical, saveEx,
                                   new Logging.LogEntryAttribute("Operater", Global.Instance.LoggedKorisnik.KorisnickoIme),
                                   new Logging.LogEntryAttribute("StavkaID", this.ID.ToString()));
                if (trans != null)
                {
                    trans.Rollback();
                }
            }
            catch (System.Exception ex)
            {
                Logging.Log.Create("Greska prilikom brisanja stavke racuna.",
                                   Logging.LogEntryLevel.Critical, ex,
                                   new Logging.LogEntryAttribute("Operater", Global.Instance.LoggedKorisnik.KorisnickoIme),
                                   new Logging.LogEntryAttribute("StavkaID", this.ID.ToString()));
                if (trans != null)
                {
                    trans.Rollback();
                }
            }
            finally
            {
                try
                {
                    if (con != null && con.State != System.Data.ConnectionState.Closed)
                    {
                        con.Close();
                    }
                }
                catch (System.Exception conCloseEx)
                {
                    Logging.Log.Create("Ne moze se zatvoriti konekcija na bazu.",
                                       Logging.LogEntryLevel.Critical, conCloseEx);
                }
            }

            return(false);
        }
Exemple #2
0
        public static RacunStavka Create(Racun noviRacun, Roba selectedRoba, ref Recept lastRecept, decimal kolicina)
        {
            MySqlTransaction trans = null;

            try
            {
                MySqlConnection con = ApotekeDB.Instance.OpenConnection();
                trans = con.BeginTransaction();

                if (!noviRacun.Save(trans))
                {
                    trans.Rollback();
                    return(null);
                }

                // KREIRANJE STAVKE
                RacunStavka novaStavka = new RacunStavka();
                novaStavka.State   = Apoteke.DataObjects.Core.ObjectState.New;
                novaStavka.RacunID = noviRacun.ID;
                novaStavka.RobaID  = selectedRoba.ID;
                //novaStavka.MjeraID = selectedRoba.MjeraID;
                novaStavka.Kolicina        = kolicina;
                novaStavka.Participacija   = selectedRoba.Participacija;
                novaStavka.ReferalnaCijena = selectedRoba.ReferalnaCijena;
                novaStavka.Popust          = selectedRoba.Popust;
                novaStavka.DoplataBezPDV   = selectedRoba.DoplataBezPDV;

                //jasenko
                novaStavka.DoplataSaPDV = selectedRoba.DoplataSaPDV;

                novaStavka.PDVStopa = selectedRoba.PDVStopa.Stopa;
                novaStavka.Cijena   = selectedRoba.MPC;

                // KREIRANJE RECEPTA
                if (lastRecept == null)
                {
                    //Decimal iznosPopust;
                    //Decimal popust = Math.Round(Decimal.Divide(novaStavka.Popust, 100),2);

                    //iznosPopust = Math.Round(Math.Round(novaStavka.Cijena * novaStavka.Kolicina, 2) * popust,2);
                    //novaStavka.Iznos = Math.Round(novaStavka.Cijena * novaStavka.Kolicina, 2) - iznosPopust;

                    novaStavka.Iznos        = Math.Round(novaStavka.Cijena * novaStavka.Kolicina, 2);
                    novaStavka.IznosPopusta = Math.Round(novaStavka.Iznos * Math.Round(Decimal.Divide(novaStavka.Popust, 100), 2), 2);

                    novaStavka.IznosKupac    = novaStavka.Iznos;
                    novaStavka.IznosKzzo     = Decimal.Zero;
                    novaStavka.Participacija = 0;
                    novaStavka.DoplataSaPDV  = 0;
                    novaStavka.DoplataBezPDV = 0;

                    //eso
                    //if (Global.Instance.Konfiguracija["Kanton"] == "Zenica")
                    // {
                    //     novaStavka.DoplataSaPDV = selectedRoba.DoplataSaPDV;
                    // }

                    //////////////////////////////////



                    if (selectedRoba.Taksa)
                    {
                        string strIznosTakseZaOtapanje = Global.Instance.Konfiguracija["TaksaZaOtapanje"];
                        if (!String.IsNullOrEmpty(strIznosTakseZaOtapanje))
                        {
                            decimal iznosTakseZaOtapanje = 0;
                            decimal.TryParse(strIznosTakseZaOtapanje, out iznosTakseZaOtapanje);
                            if (novaStavka.Kolicina < 0)
                            {
                                novaStavka.IznosTakse = iznosTakseZaOtapanje * -1;
                            }
                            else
                            {
                                novaStavka.IznosTakse = iznosTakseZaOtapanje;
                            }
                        }
                    }
                }
                else
                {
                    novaStavka.BrJedinica        = lastRecept.BrJedinica;
                    novaStavka.Participacija     = lastRecept.Participacija;
                    novaStavka.VrstaID           = lastRecept.VrstaID;
                    novaStavka.LjekarID          = lastRecept.LjekarID;
                    novaStavka.Pausal            = lastRecept.Pausal;
                    novaStavka.BrojRecepta       = lastRecept.BrojRecepta;
                    novaStavka.JMBG              = lastRecept.JMBG;
                    novaStavka.DatumPropisivanja = lastRecept.DatumPropisivanja;
                    if (selectedRoba.TipRobe.Sifra == "55")
                    {
                        novaStavka.BrJedinica = lastRecept.BrJedinica;
                    }

                    novaStavka.Iznos = Math.Round(novaStavka.Cijena * novaStavka.Kolicina, 2);

                    if (Global.Instance.Konfiguracija["Kanton"] == "Sarajevo")
                    {
                        novaStavka.DoplataSaPDV      = Math.Round(Decimal.Multiply(Math.Round(Decimal.Multiply(novaStavka.DoplataBezPDV, (Decimal.Divide(novaStavka.PDVStopa, 100) + 1)), 2), novaStavka.Kolicina), 2);
                        novaStavka.PonovljenRecept   = lastRecept.PonovljenRecept;
                        novaStavka.PropisanaKolicina = lastRecept.PropisanaKolicina;
                    }
                    else
                    {
                        novaStavka.DoplataSaPDV = Math.Round(Decimal.Multiply(novaStavka.DoplataSaPDV, novaStavka.Kolicina), 2);
                    }

                    decimal cijena = 0;

                    if (Global.Instance.Konfiguracija["Kanton"] == "Sarajevo")
                    {
                        cijena = System.Math.Round(novaStavka.ReferalnaCijena +
                                                   (novaStavka.ReferalnaCijena * novaStavka.PDVStopa / 100), 2);
                    }
                    else
                    {
                        decimal cijenaMarza;

                        cijenaMarza = novaStavka.ReferalnaCijena * Convert.ToDecimal(Global.Instance.Konfiguracija["MarzaZDK"]) / 100;

                        cijena = Math.Round((novaStavka.ReferalnaCijena + cijenaMarza) * ((100 + novaStavka.PDVStopa) / 100), 2);
                    }
                    //decimal cijena = novaStavka.ReferalnaCijena;

                    novaStavka.IznosKupac = System.Math.Round(cijena * novaStavka.Kolicina *
                                                              (100 - novaStavka.Participacija) / 100, 2);

                    novaStavka.IznosKzzo = System.Math.Round(novaStavka.ReferalnaCijena * novaStavka.Kolicina *
                                                             (novaStavka.Participacija) / 100, 2);

                    if (novaStavka.VrstaID == 8 && Global.Instance.Konfiguracija["POSPrinterName"] != "Generic / Text Only")
                    {
                        novaStavka.IznosKzzo       = Math.Round(novaStavka.Iznos / ((100 + novaStavka.PDVStopa) / 100), 2);
                        novaStavka.ReferalnaCijena = Math.Round(novaStavka.Cijena / ((100 + novaStavka.PDVStopa) / 100), 2);
                        //novaStavka.Iznos += lastRecept.Pausal;
                    }
                    else
                    {
                        novaStavka.IznosKzzo = Decimal.Zero;
                        //novaStavka.Iznos += lastRecept.Pausal;
                    }
                }


                // PRORACUNAVANJE ZALIHE, VRIJEDNOSTI ( IZNOS BEZ PDV-a ) I IZLAZA ZA
                // STAVKU I NJENO SNIMANJE
                novaStavka.Vrijednost = Math.Round(novaStavka.IznosKupac / (1 + novaStavka.PDVStopa / 100), 2);
                novaStavka.KreatorID  = Global.Instance.LoggedKorisnik.ID;
                novaStavka.Zaliha     = selectedRoba.Zaliha - novaStavka.Kolicina;
                novaStavka.Izlaz      = selectedRoba.Izlaz + novaStavka.Kolicina;

                if (!novaStavka.Save(trans))
                {
                    trans.Rollback();
                    return(null);
                }

                // UPDATE ZALIHE I IZLAZA NA ROBI
                selectedRoba.Zaliha       -= kolicina;
                selectedRoba.Izlaz        += kolicina;
                selectedRoba.ModifikatorID = Global.Instance.LoggedKorisnik.ID;

                if (!selectedRoba.Save(trans))
                {
                    trans.Rollback();
                    return(null);
                }

                // AZURIRANJE IZNOSA RACUNA I NJEGOVO SNIMANJE

                noviRacun.Vrijednost   += novaStavka.Vrijednost;
                noviRacun.Iznos        += novaStavka.IznosKupac;    //******************************************
                noviRacun.IznosPopusta += novaStavka.IznosPopusta;
                noviRacun.DoplataSaPDV += novaStavka.DoplataSaPDV;

                if (novaStavka.Pausal != 0)
                {
                    noviRacun.Vrijednost += Math.Round((novaStavka.Pausal / (1 + novaStavka.PDVStopa / 100)), 2);
                    noviRacun.Iznos      += novaStavka.Pausal;
                }

                if (novaStavka.IznosTakse != 0)
                {
                    decimal stopaTaksi = 0;
                    if (!String.IsNullOrEmpty(Global.Instance.Konfiguracija["StopaTakse"]))
                    {
                        decimal.TryParse(Global.Instance.Konfiguracija["StopaTakse"], out stopaTaksi);
                    }

                    noviRacun.Vrijednost += Math.Round(novaStavka.IznosTakse / (1 + stopaTaksi / 100), 2);
                    noviRacun.Iznos      += novaStavka.IznosTakse;
                }

                //zaokruzenje
                noviRacun.Zaokruzenje   = ((noviRacun.Iznos - noviRacun.IznosPopusta + noviRacun.DoplataSaPDV) - Global.Instance.Zaokruzenje(noviRacun.Iznos - noviRacun.IznosPopusta + noviRacun.DoplataSaPDV)) * (-1); //*****
                noviRacun.NacinPlacanja = NacinPlacanja.Gotovina;
                noviRacun.ModifikatorID = Global.Instance.LoggedKorisnik.ID;

                if (!noviRacun.Save(trans))
                {
                    trans.Rollback();
                    return(null);
                }

                trans.Commit();
                con.Close();
                return(novaStavka);
            }
            catch (SaveFailedException saveEx)
            {
                Logging.Log.Create("Neko je promjenio podatke.",
                                   Logging.LogEntryLevel.Critical, saveEx,
                                   new Logging.LogEntryAttribute("Operater", Global.Instance.LoggedKorisnik.KorisnickoIme));
                if (trans != null)
                {
                    trans.Rollback();
                }
            }
            catch (System.Exception ex)
            {
                Logging.Log.Create("Greska prilikom pravljenja racuna.",
                                   Logging.LogEntryLevel.Critical, ex,
                                   new Logging.LogEntryAttribute("Operater", Global.Instance.LoggedKorisnik.KorisnickoIme));
                if (trans != null)
                {
                    trans.Rollback();
                }
            }

            return(null);
        }