Example #1
0
        public ActionResult SaveRacun(string racunGlavaJson, string racunStavkaCollectionJson)
        {
            DataAccessAdapterBase adapter = Helper.GetDataAccessAdapter(User.Identity.Name);
            RacunGlavaEntity      racunGlava4Save;
            bool isSaved = false;

            using (adapter)
            {
                adapter.StartTransaction(System.Data.IsolationLevel.Serializable, "SaveRacun");

                JsonSerializerSettings jsonSettings   = new JsonSerializerSettings();
                CultureInfo            currentCulture = System.Threading.Thread.CurrentThread.CurrentCulture;
                jsonSettings.Culture = currentCulture;

                RacunGlavaEntity racunGlava = JsonConvert.DeserializeObject <RacunGlavaEntity>(racunGlavaJson, jsonSettings);

                if (racunGlava.RacunGlavaId == 0)
                {
                    long firmaId = UserEntity.GetFirmaId(adapter, User.Identity.Name);

                    racunGlava4Save            = racunGlava;
                    racunGlava4Save.Godina     = ConfigEntity.GetInstance(adapter, firmaId).AktivnaGodina;
                    racunGlava4Save.BrojRacuna = BrojacEntity.GetNextNumber(adapter, firmaId, BrojacEnum.Racun, racunGlava4Save.Godina);
                    racunGlava4Save.FirmaId    = firmaId;
                }
                else
                {
                    PrefetchPath2 prefetchPath = new PrefetchPath2(EntityType.RacunGlavaEntity);
                    prefetchPath.Add(RacunGlavaEntity.PrefetchPathRacunStavkaCollection);

                    racunGlava4Save = RacunGlavaEntity.FetchRacunGlava(adapter, prefetchPath, racunGlava.RacunGlavaId);
                    racunGlava4Save.UpdateDataFromOtherObject(racunGlava, null, null);
                }

                racunGlava4Save.TarifaStopa = TarifaEntity.FetchTarifa(adapter, null, racunGlava4Save.TarifaId).Stopa;

                if (racunGlava4Save.Godina != racunGlava4Save.Datum.Year)
                {
                    // TODO: create mechanism for pushing errors to client. Currently check is on client. Remove client check after push error mechanism is implemented.
                }
                else
                {
                    isSaved = adapter.SaveEntity(racunGlava4Save, true, false);
                }

                if (isSaved)
                {
                    IEnumerable <RacunStavkaEntity> racunStavkaCollectionToDelete =
                        racunGlava4Save.RacunStavkaCollection.GetEntitiesNotIncludedInJson(racunStavkaCollectionJson, jsonSettings);

                    foreach (RacunStavkaEntity racunStavka in racunStavkaCollectionToDelete)
                    {
                        if (isSaved)
                        {
                            racunGlava4Save.RacunStavkaCollection.Remove(racunStavka);
                            isSaved = adapter.DeleteEntity(racunStavka);
                        }
                    }

                    racunGlava4Save.RacunStavkaCollection.UpdateEntityCollectionFromJson(racunStavkaCollectionJson, RacunStavkaFields.RacunStavkaId, null, null, jsonSettings);
                    foreach (RacunStavkaEntity racunStavka in racunGlava4Save.RacunStavkaCollection)
                    {
                        if (isSaved)
                        {
                            racunStavka.RecalculateData(racunGlava.TarifaStopa);
                            isSaved = adapter.SaveEntity(racunStavka, false, false);
                        }
                    }
                }

                adapter.Commit();
            }

            dynamic response = new
            {
                IsSaved      = isSaved,
                RacunGlavaId = racunGlava4Save.RacunGlavaId
            };

            return(CreateJsonResponse(response));
        }