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); }
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); }