using Brizco.Common.Models.Exception; namespace Brizco.Domain.Entities.Tasks; public partial class Task { public static Task Create( string title, string description, TaskType type, bool isDisposable, DateTime setFor, bool hasDisposed, int amount, PurchaseAmountType amountType, Guid complexId, TaskScheduleType scheduleType) { if (scheduleType == TaskScheduleType.Custom && setFor == DateTime.MinValue) throw new AppException("اگر تکرار وظیفه یک روز خاص باشد باید ان روز را انتخاب کنید"); if (scheduleType == TaskScheduleType.Custom) isDisposable = true; return new Task( type, isDisposable, setFor, hasDisposed, amount, amountType, title, description, complexId, scheduleType); } public TaskDay SetDay(DayOfWeek dayOfWeek) { var taskDay = new TaskDay(dayOfWeek, Id); Days.Add(taskDay); return taskDay; } public void AddShift(params Guid[] shiftIds) { foreach (var shiftId in shiftIds) { var plan = new TaskShift(Id, shiftId); Shifts.Add(plan); } } public TaskShift AddShift(Guid shiftId) { var plan = new TaskShift(Id, shiftId); Shifts.Add(plan); return plan; } public void AddPosition(params Guid[] positionIds) { foreach (var positionId in positionIds) { var position = new TaskPosition(positionId, Id); Positions.Add(position); } } public TaskPosition AddPosition(Guid positionId) { var position = new TaskPosition(positionId, Id); Positions.Add(position); return position; } public void AddRoutine(params Guid[] routineIds) { foreach (var routineId in routineIds) { var routine = new TaskRoutine(routineId, Id); Routines.Add(routine); } } public TaskRoutine AddRoutine(Guid routineId) { var routine = new TaskRoutine(routineId, Id); Routines.Add(routine); return routine; } } public partial class Activity { public static Activity Create( ActivityStatus status, DateTime doneAt, string performanceDescription, string title, string description, TaskType type, bool isDisposable, DateTime setFor, bool hasDisposed, int amount, PurchaseAmountType amountType, Guid complexId, TaskScheduleType scheduleType) { return new Activity( status, doneAt, performanceDescription, type, isDisposable, setFor, hasDisposed, amount, amountType, title, description, complexId, scheduleType); } public void SetShiftPlan(Guid shiftPlanId) { this.ShiftPlanId = shiftPlanId; } public void SetUser(Guid userId) { this.UserId = userId; } public void DoneActivity() { DoneAt = DateTime.UtcNow; IsDone = true; Status = ActivityStatus.Done; } public void CompleteActivity(bool isDone, string performanceDescription) { if (!isDone) Status = ActivityStatus.UnDone; else Status = ActivityStatus.Complete; IsDone = isDone; PerformanceDescription = performanceDescription; } public void UnDoneActivity(string undoneReason) { IsDone = false; UnDoneReason = undoneReason; Status = ActivityStatus.UnDone; } }