using AutoMapper; using Complex.Application.Common; using Complex.Application.Utility; using Complex.Common.Dto; using Complex.Domain.Commons; using Complex.Domain.Entities; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Complex.Application.Services.TransactionServices { public interface ITransactionService { /* گزارش پرداختی های یک واحد گزارش وضعیت پرداخت واحدهای یک مجتمع ثبت یک تراکنش شارژ */ } public class TransactionService : ITransactionService { private readonly IComplexDBContext _complexDBContext; private IMapper _mapper; public TransactionService(IComplexDBContext complexDBContext, IMapper mapper) { _complexDBContext = complexDBContext; _mapper = mapper; } public ResultDto> UnitsByTransStateList(Guid complexId, Guid? UnitId, CommonRequestDto commonRequestDto) { var trans = _complexDBContext.Transactions.Include(t => t.TransactionTitle).Include(t => t.CostCycle).Include(t => t.Person).Where(t => t.ComplexId == complexId) .Where(t => UnitId.HasValue ? t.UnitId == UnitId : true) .ToPagedByOrder(commonRequestDto, out int rowCount).ToList(); var result = trans.Select(t => new TransactionDto { Amount = t.Amount, CostCycleId = t.CostCycleId, CostCycleTitle = t.CostCycle.Title, Description = t.Description, PersonId = t.PersonId, PersonName = t.Person.FirstName + " " + t.Person.LastName, TransactionDate = t.TransactionDate, TransactionPersianDate = t.TransactionPersianDate, TransactionTitle = t.TransactionTitle.Title, UnitCostDate = t.UnitCost.Date, UnitId = t.UnitId, UnitName = t.Unit.UnitName }).ToList(); return new ResultDto> { Data = result, IsSuccess = true, }; } public ResultDto PayCosts(List UnitCostIds, Guid UnitId, long Amount, string UserPhone, string Description) { var costs = _complexDBContext.UnitCosts.Include(uc => uc.CostCycle) .Where(uc => UnitCostIds.Contains(uc.Id) && !uc.TransactionId.HasValue).ToList(); var savedAmount = costs.Sum(c => c.CostCycle.Amount); if (savedAmount != Amount) return new ResultDto { IsSuccess = false, Message = "مبلغ صحیح نمی باشد" }; foreach (var c in costs) { var newTrans = new Transaction { PersonId = UserPhone, TransactionDate = DateTime.Now, Amount = c.CostCycle.Amount, CostCycleId = c.CostCycleId, UnitId = UnitId, TransactionTitleId = c.CostCycle.IncomeCostTitleId, ComplexId = c.CostCycle.ComplexId, Description = Description, TransactionPersianDate = PersianDate.GetDate(DateTime.Now), UnitCostId = c.Id }; c.Transaction = newTrans; //_complexDBContext.Transactions.Add(newTrans); } _complexDBContext.SaveChanges(); return new ResultDto { IsSuccess = true, Message = "ثبت با موفقیت انجام شد" }; } } public class TransactionDto { public string TransactionTitle { set; get; } public string TransactionPersianDate { set; get; } public DateTime TransactionDate { set; get; } public long Amount { set; get; } = 0; public string? Description { set; get; } public Guid? CostCycleId { set; get; } public string CostCycleTitle { set; get; } public Guid? UnitId { set; get; } public string UnitName { set; get; } //public string? TrackingCode { set; get; } //public long Remaining { set; get; } = 0; public DateOnly UnitCostDate { set; get; } public string PersonId { set; get; } public string PersonName { set; get; } } /* public class UnitTrancactionStateDto { public Guid UnitId { get; set; } public string UnitTitle { get; set; } /// /// مقدار شارژ پرداخت نشده /// public int ChargeNoPayAmount { get; set; } /// /// تعداد شارژ پرداخت نشده /// public int ChargeNoPayCount { get; set; } /// /// مقدار پرداخت نشده غیر شارژ /// public int OtherNoPayAmount { get; set; } /// /// میزان پرداخت کرده /// public long PayAmountInYear { set; get; } /// /// تعداد شارژ پرداخت شده /// public int ChargePayCountInYear { set; get; } } public class UnitsByTransState { public Guid UnitId { set; get; } public string UnitName { set; get; } public string UnitUserMobile { set; get; } public string UnitUserFullName { set; get; } public int ChargeReminigCount { set; get; } } */ }