public virtual void Delete(ISession session) { foreach (var user in Users.ToArray()) { user.Delete(); } foreach (var address in Addresses.ToArray()) { address.Delete(); } var payers = Payers.ToArray(); Payers.Clear(); foreach (var payer in payers) { //какая то фигня с загрузкой объектов payer.Clients.Remove(payer.Clients.First(c => c.Id == Id)); if (payer.CanDelete(session)) { session.Delete(payer); } else { payer.UpdatePaymentSum(); } } var rule = Settings.SmartOrderRules; if (rule != null) { var overHaveSameSettins = ActiveRecordLinqBase <DrugstoreSettings> .Queryable.Any(s => s.Id != Id && s.SmartOrderRules == rule); if (!overHaveSameSettins) { Settings.SmartOrderRules = null; session.Delete(rule); } } AuditRecord.DeleteAuditRecords(this); session.Delete(this); }
protected virtual void CommonChangePayer(Action changer, Payer payer) { var oldPayers = Payers.ToArray(); Payers.Clear(); Payers.Add(payer); foreach (var user in Users) { user.Payer.Users.Remove(user); user.Payer = payer; user.Payer.Users.Add(user); } changer(); payer.UpdatePaymentSum(); foreach (var oldPayer in oldPayers) { oldPayer.UpdatePaymentSum(); } }
public virtual void ChangePayer(ISession session, Payer payer) { var oldPayers = Payers.ToArray(); CommonChangePayer(() => { foreach (var address in Addresses) { address.Payer.Addresses.Remove(address); address.Payer = payer; address.Payer.Addresses.Add(address); } var legalEntities = oldPayers.SelectMany(p => p.Orgs).ToList(); if (legalEntities.Count > 1) { throw new Exception(string.Format("Количество ЮрЛиц у клиента {0} более одного, не могу поменять плательщика у клиента", Id)); } var legalEntity = legalEntities.First(); legalEntity.Payer = payer; session.SaveOrUpdate(legalEntity); }, payer); }