123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- using System;
- using System.Linq;
- using Comal.Classes;
- using InABox.Clients;
- using InABox.Core;
- namespace comal.timesheets
- {
- public abstract class SingleDataModel<TEntity, TItem> : CoreDataModel<TEntity>, ISingleDataModel<TEntity, TItem>
- where TEntity : Entity, IRemotable, IPersistent, new()
- where TItem : SingleDataModelItem<TEntity>, new()
- {
- private TItem _item;
- public TItem Item
- {
- get => _item;
- set => SetProperty(ref _item, value);
- }
- public virtual void BeforeLoad(MultiQuery query, Guid id)
- {
- }
- public virtual void AfterLoad(MultiQuery query, Guid id)
- {
- }
- private TItem CreateItem(TEntity entity)
- {
- CoreTable table = new CoreTable();
- table.LoadColumns(Columns);
- CoreRow row = table.NewRow();
- if (entity != null)
- table.LoadRow(row, entity);
- return new TItem() { Row = row, Parent = this };
- }
-
- public void Load(TEntity entity, Action loaded = null)
- {
- MultiQuery query = new MultiQuery();
-
- BeforeLoad(query, entity.ID);
- Item = CreateItem(entity);
-
- if (query.Count > 0)
- {
- query.Query(
- (q) =>
- {
- AfterLoad(q, entity.ID);
- loaded?.Invoke();
- });
- }
- else
- {
- AfterLoad(query, entity.ID);
- loaded?.Invoke();
- }
- }
-
- public void Load(Guid id, Action loaded = null)
- {
- MultiQuery query = new MultiQuery();
-
- query.Add(
- new Filter<TEntity>(x=>x.ID).IsEqualTo(id),
- Columns
- );
-
- BeforeLoad(query, id);
-
- query.Query(
- (q) =>
- {
- var row = q.Get<TEntity>().Rows.FirstOrDefault();
- Item = (row != null)
- ? new TItem() { Row = row, Parent = this }
- : CreateItem(null);
-
- AfterLoad(q, id);
- loaded?.Invoke();
- });
- }
- protected virtual void BeforeSave(TItem item)
- {
-
- }
-
- protected virtual void AfterSave(TItem item)
- {
-
- }
-
- public void Save(String auditmessage)
- {
- BeforeSave(Item);
- new Client<TEntity>().Save(Item.Entity,auditmessage);
- AfterSave(Item);
- }
-
- }
- }
|