public ReturnedSaveFuncInfo AddToListSanad(SanadDetailBussines sanadDetBusiness)
        {
            var res = new ReturnedSaveFuncInfo();

            try
            {
                res.AddReturnedValue(sanadDetBusiness.CheckValidation());
                if (res.HasError)
                {
                    return(res);
                }
                sanadDetBusiness.MasterGuid = Guid;
                if (Details == null)
                {
                    Details = new List <SanadDetailBussines>();
                }
                var old = Details.FirstOrDefault(q => q.Guid == sanadDetBusiness.Guid);
                if (old != null)
                {
                    Details.Remove(old);
                }
                Details.Add(sanadDetBusiness);
            }
            catch (Exception ex)
            {
                WebErrorLog.ErrorInstence.StartErrorLog(ex);
                res.AddReturnedValue(ex);
            }

            return(res);
        }
        public async Task <ReturnedSaveFuncInfo> RemoveAsync(SqlTransaction tr = null)
        {
            var           res      = new ReturnedSaveFuncInfo();
            var           autoTran = tr == null;
            SqlConnection cn       = null;

            try
            {
                if (autoTran)
                {
                    cn = new SqlConnection(Cache.ConnectionString);
                    await cn.OpenAsync();

                    tr = cn.BeginTransaction();
                }

                res.AddReturnedValue(await UpdateAccounts(Details, true, tr));
                if (res.HasError)
                {
                    return(res);
                }
                res.AddReturnedValue(await SanadDetailBussines.RemoveRangeAsync(Guid, tr));
                if (res.HasError)
                {
                    return(res);
                }
                res.AddReturnedValue(await UnitOfWork.Sanad.RemoveAsync(Guid, tr));
                if (res.HasError)
                {
                    return(res);
                }

                //if (Cache.IsSendToServer)
                //    _ = Task.Run(() => WebRental.SaveAsync(list));
            }
            catch (Exception ex)
            {
                WebErrorLog.ErrorInstence.StartErrorLog(ex);
                res.AddReturnedValue(ex);
            }
            finally
            {
                if (autoTran)
                {
                    res.AddReturnedValue(tr.TransactionDestiny(res.HasError));
                    res.AddReturnedValue(cn.CloseConnection());
                }
            }
            return(res);
        }
        public async Task <ReturnedSaveFuncInfo> SaveAsync(SqlTransaction tr = null)
        {
            var           res      = new ReturnedSaveFuncInfo();
            var           autoTran = tr == null;
            SqlConnection cn       = null;

            try
            {
                if (autoTran)
                {
                    cn = new SqlConnection(Cache.ConnectionString);
                    await cn.OpenAsync();

                    tr = cn.BeginTransaction();
                }

                res.AddReturnedValue(await CheckvalidationAsync());
                if (res.HasError)
                {
                    return(res);
                }

                var oldSanad = await GetAsync(Guid);

                if (oldSanad != null)
                {
                    res.AddReturnedValue(await UpdateAccounts(oldSanad.Details, true, tr));
                    if (res.HasError)
                    {
                        return(res);
                    }
                }

                res.AddReturnedValue(await UnitOfWork.Sanad.SaveAsync(this, tr));
                if (res.HasError)
                {
                    return(res);
                }
                foreach (var item in Details)
                {
                    item.MasterGuid = Guid;
                }
                res.AddReturnedValue(await SanadDetailBussines.RemoveRangeAsync(Guid, tr));
                if (res.HasError)
                {
                    return(res);
                }
                res.AddReturnedValue(await SanadDetailBussines.SaveRangeAsync(Details, tr));
                if (res.HasError)
                {
                    return(res);
                }
                res.AddReturnedValue(await UpdateAccounts(Details, false, tr));
                if (res.HasError)
                {
                    return(res);
                }

                if (Cache.IsSendToServer)
                {
                    _ = Task.Run(() => WebSanad.SaveAsync(this));
                }
            }
            catch (Exception ex)
            {
                WebErrorLog.ErrorInstence.StartErrorLog(ex);
                res.AddReturnedValue(ex);
            }
            finally
            {
                if (autoTran)
                {
                    res.AddReturnedValue(tr.TransactionDestiny(res.HasError));
                    res.AddReturnedValue(cn.CloseConnection());
                }
            }
            return(res);
        }