first commit

This commit is contained in:
2026-06-02 20:48:16 +03:30
commit 8e92c983a2
233 changed files with 15744 additions and 0 deletions

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

BIN
.vs/Complex/v17/.suo Normal file

Binary file not shown.

View File

@@ -0,0 +1,71 @@
{
"Version": 1,
"WorkspaceRootPath": "D:\\Data\\Projects\\Nabak\\Complex\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{2D82DF39-0B01-4EE8-A123-345865CD153E}|Complex.Application\\Complex.Application.csproj|d:\\data\\projects\\nabak\\complex\\complex.application\\services\\basic\\chargecycleservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{2D82DF39-0B01-4EE8-A123-345865CD153E}|Complex.Application\\Complex.Application.csproj|solutionrelative:complex.application\\services\\basic\\chargecycleservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7136066A-2238-481B-A4AD-BCE811506901}|Complex.EndPoint\\Complex.EndPoint.csproj|d:\\data\\projects\\nabak\\complex\\complex.endpoint\\controllers\\managecostcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7136066A-2238-481B-A4AD-BCE811506901}|Complex.EndPoint\\Complex.EndPoint.csproj|solutionrelative:complex.endpoint\\controllers\\managecostcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{2D82DF39-0B01-4EE8-A123-345865CD153E}|Complex.Application\\Complex.Application.csproj|d:\\data\\projects\\nabak\\complex\\complex.application\\services\\unit\\unitservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{2D82DF39-0B01-4EE8-A123-345865CD153E}|Complex.Application\\Complex.Application.csproj|solutionrelative:complex.application\\services\\unit\\unitservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
}
],
"DocumentGroupContainers": [
{
"Orientation": 0,
"VerticalTabListWidth": 256,
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 1,
"Children": [
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "UnitService.cs",
"DocumentMoniker": "D:\\Data\\Projects\\Nabak\\Complex\\Complex.Application\\Services\\Unit\\UnitService.cs",
"RelativeDocumentMoniker": "Complex.Application\\Services\\Unit\\UnitService.cs",
"ToolTip": "D:\\Data\\Projects\\Nabak\\Complex\\Complex.Application\\Services\\Unit\\UnitService.cs",
"RelativeToolTip": "Complex.Application\\Services\\Unit\\UnitService.cs",
"ViewState": "AgIAAIwAAAAAAAAAAAAhwJYAAAA1AAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-08-20T06:24:55.285Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "ChargeCycleService.cs",
"DocumentMoniker": "D:\\Data\\Projects\\Nabak\\Complex\\Complex.Application\\Services\\Basic\\ChargeCycleService.cs",
"RelativeDocumentMoniker": "Complex.Application\\Services\\Basic\\ChargeCycleService.cs",
"ToolTip": "D:\\Data\\Projects\\Nabak\\Complex\\Complex.Application\\Services\\Basic\\ChargeCycleService.cs",
"RelativeToolTip": "Complex.Application\\Services\\Basic\\ChargeCycleService.cs",
"ViewState": "AgIAAC0BAAAAAAAAAAA7wIABAAAFAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-08-20T06:04:28.478Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "ManageCostController.cs",
"DocumentMoniker": "D:\\Data\\Projects\\Nabak\\Complex\\Complex.EndPoint\\Controllers\\ManageCostController.cs",
"RelativeDocumentMoniker": "Complex.EndPoint\\Controllers\\ManageCostController.cs",
"ToolTip": "D:\\Data\\Projects\\Nabak\\Complex\\Complex.EndPoint\\Controllers\\ManageCostController.cs",
"RelativeToolTip": "Complex.EndPoint\\Controllers\\ManageCostController.cs",
"ViewState": "AgIAACEAAAAAAAAAAAAqwCwAAAAJAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-08-20T06:03:33.826Z",
"EditorCaption": ""
}
]
}
]
}
]
}

View File

@@ -0,0 +1,69 @@
{
"Version": 1,
"WorkspaceRootPath": "D:\\Data\\Projects\\Nabak\\Complex\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{2D82DF39-0B01-4EE8-A123-345865CD153E}|Complex.Application\\Complex.Application.csproj|d:\\data\\projects\\nabak\\complex\\complex.application\\services\\basic\\chargecycleservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{2D82DF39-0B01-4EE8-A123-345865CD153E}|Complex.Application\\Complex.Application.csproj|solutionrelative:complex.application\\services\\basic\\chargecycleservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7136066A-2238-481B-A4AD-BCE811506901}|Complex.EndPoint\\Complex.EndPoint.csproj|d:\\data\\projects\\nabak\\complex\\complex.endpoint\\controllers\\managecostcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7136066A-2238-481B-A4AD-BCE811506901}|Complex.EndPoint\\Complex.EndPoint.csproj|solutionrelative:complex.endpoint\\controllers\\managecostcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{2D82DF39-0B01-4EE8-A123-345865CD153E}|Complex.Application\\Complex.Application.csproj|d:\\data\\projects\\nabak\\complex\\complex.application\\services\\unit\\unitservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{2D82DF39-0B01-4EE8-A123-345865CD153E}|Complex.Application\\Complex.Application.csproj|solutionrelative:complex.application\\services\\unit\\unitservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
}
],
"DocumentGroupContainers": [
{
"Orientation": 0,
"VerticalTabListWidth": 256,
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 1,
"Children": [
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "UnitService.cs",
"DocumentMoniker": "D:\\Data\\Projects\\Nabak\\Complex\\Complex.Application\\Services\\Unit\\UnitService.cs",
"RelativeDocumentMoniker": "Complex.Application\\Services\\Unit\\UnitService.cs",
"ToolTip": "D:\\Data\\Projects\\Nabak\\Complex\\Complex.Application\\Services\\Unit\\UnitService.cs",
"RelativeToolTip": "Complex.Application\\Services\\Unit\\UnitService.cs",
"ViewState": "AgIAAIwAAAAAAAAAAAAhwJYAAAA1AAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-08-20T06:24:55.285Z"
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "ChargeCycleService.cs",
"DocumentMoniker": "D:\\Data\\Projects\\Nabak\\Complex\\Complex.Application\\Services\\Basic\\ChargeCycleService.cs",
"RelativeDocumentMoniker": "Complex.Application\\Services\\Basic\\ChargeCycleService.cs",
"ToolTip": "D:\\Data\\Projects\\Nabak\\Complex\\Complex.Application\\Services\\Basic\\ChargeCycleService.cs",
"RelativeToolTip": "Complex.Application\\Services\\Basic\\ChargeCycleService.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABQAAAAgAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-08-20T06:04:28.478Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "ManageCostController.cs",
"DocumentMoniker": "D:\\Data\\Projects\\Nabak\\Complex\\Complex.EndPoint\\Controllers\\ManageCostController.cs",
"RelativeDocumentMoniker": "Complex.EndPoint\\Controllers\\ManageCostController.cs",
"ToolTip": "D:\\Data\\Projects\\Nabak\\Complex\\Complex.EndPoint\\Controllers\\ManageCostController.cs",
"RelativeToolTip": "Complex.EndPoint\\Controllers\\ManageCostController.cs",
"ViewState": "AgIAACEAAAAAAAAAAAAqwCwAAAAJAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-08-20T06:03:33.826Z"
}
]
}
]
}
]
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,20 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AutoMapper" Version="11.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.3" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="System.Linq.Dynamic.Core" Version="1.6.7" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Complex.Domain\Complex.Domain.csproj" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,36 @@
using Complex.Domain.Entities;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.ChangeTracking;
namespace Complex.Application
{
public interface IComplexDBContext
{
DbSet<BasicTable> BasicTables { get; set; }
DbSet<UnitState> UnitStates { get; set; }
DbSet<Chat> Chats { get; set; }
DbSet<ComplexEntity> ComplexEntities { get; set; }
DbSet<ComplexManager> ComplexManagers { get; set; }
DbSet<ComplexUnitEvent> ComplexUnitEvents { get; set; }
DbSet<Person> Persons { get; set; }
DbSet<ComplexPerson> ComplexPersons { get; set; }
DbSet<Poster> Posters { get; set; }
DbSet<Transaction> Transactions { get; set; }
DbSet<IncomeCostTitle> IncomeCostTitles { get; set; }
DbSet<TransactionType> TransactionTypes { get; set; }
DbSet<UnitCost> UnitCosts { get; set; }
DbSet<CostCycle> CostCycles { get; set; }
DbSet<Unit> Units { get; set; }
DbSet<UserToken> UserTokens { get; set; }
DbSet<SmsCode> SmsCodes { get; set; }
EntityEntry Add(object entity);
object? Find(Type entityType, object keyId);
int SaveChanges(bool acceptAllChangesOnSuccess);
int SaveChanges();
Task<int> SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = new CancellationToken());
Task<int> SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken());
EntityEntry Entry(object entity);
}
}

View File

@@ -0,0 +1,22 @@
namespace Complex.Application.Common
{
public class CommonRequestDto
{
/// <summary>
/// فیلد ترتیب
/// </summary>
public string? SortField { set; get; }
/// <summary>
/// نحوه ترتیب
/// </summary>
public SortDirection? sortDirection { set; get; } = SortDirection.asc;
public int Page { set; get; } = 0;
public int Length { set; get; } = 10;
}
public enum SortDirection
{
asc,
desc
}
}

View File

@@ -0,0 +1,7 @@
namespace Complex.Application.Common
{
public interface IBaseResponseDto
{
List<string> Action { set; get; }
}
}

View File

@@ -0,0 +1,26 @@
namespace Complex.Common.Dto
{
public class ResultDto
{
public bool IsSuccess { get; set; }
public string Message { get; set; }
}
public class ResultDto<T>
{
public ResultDto()
{
}
public ResultDto(T data,bool isSuccess=true)
{
Data = data;
IsSuccess = isSuccess;
}
public bool IsSuccess { get; set; }
public string Message { get; set; }
public T Data { get; set; }
public int RowCount { set; get; }
}
}

View File

@@ -0,0 +1,71 @@
using System.ComponentModel.DataAnnotations;
using System.Reflection;
namespace Complex.Common
{
public static class EnumHelpers<T>
{
public static IList<T> GetValues(Enum value)
{
var enumValues = new List<T>();
foreach (FieldInfo fi in value.GetType().GetFields(BindingFlags.Static | BindingFlags.Public))
{
enumValues.Add((T)Enum.Parse(value.GetType(), fi.Name, false));
}
return enumValues;
}
public static T Parse(string value)
{
return (T)Enum.Parse(typeof(T), value, true);
}
public static IList<string> GetNames(Enum value)
{
return value.GetType().GetFields(BindingFlags.Static | BindingFlags.Public).Select(fi => fi.Name).ToList();
}
public static IList<string> GetDisplayValues(Enum value)
{
return GetNames(value).Select(obj => GetDisplayValue(Parse(obj))).ToList();
}
private static string lookupResource(Type resourceManagerProvider, string resourceKey)
{
foreach (PropertyInfo staticProperty in resourceManagerProvider.GetProperties(BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public))
{
if (staticProperty.PropertyType == typeof(System.Resources.ResourceManager))
{
System.Resources.ResourceManager resourceManager = (System.Resources.ResourceManager)staticProperty.GetValue(null, null);
return resourceManager.GetString(resourceKey);
}
}
return resourceKey; // Fallback with the key name
}
public static string GetDisplayValue(T value)
{
try
{
var fieldInfo = value.GetType().GetField(value.ToString());
var descriptionAttributes = fieldInfo.GetCustomAttributes(
typeof(DisplayAttribute), false) as DisplayAttribute[];
if (descriptionAttributes[0].ResourceType != null)
return lookupResource(descriptionAttributes[0].ResourceType, descriptionAttributes[0].Name);
if (descriptionAttributes == null) return string.Empty;
return (descriptionAttributes.Length > 0) ? descriptionAttributes[0].Name : value.ToString();
}
catch (Exception)
{
return "نا مشخص";
}
}
}
}

View File

@@ -0,0 +1,81 @@
using System.Text;
namespace Complex.Application.Common
{
public class FileIO
{
//==============================================================
public FileIO()
{
//
// TODO: Add constructor logic here
//
}
//==============================================================
/// <summary>
/// ثبت محتوا در یک فایل
/// </summary>
/// <param name="fileName">نام فایل</param>
/// <param name="content">محتوای فایل</param>
public static void Write(string fileName, string content, bool activeInServer = false)
{
//if (!SystemDefine.IsLocal && !activeInServer)
// return;
//System.IO.File.AppendAllText(HttpContext.Current.Server.MapPath("/FileIO/" + fileName), content, Encoding.UTF8);
Writeln(fileName, content, activeInServer);
}
//==============================================================
public static void Clear(string fileName)
{
//return;
System.IO.File.WriteAllText(AppDomain.CurrentDomain.BaseDirectory + "/FileIO/" + fileName, "", Encoding.UTF8);
}
//==============================================================
/// <summary>
/// ثبت محتوا در یک فایل در یک خط جدید
/// </summary>
/// <param name="fileName">نام فایل</param>
/// <param name="content">محتوای فایل</param>
public static void Writeln(string fileName, string content, bool activeInServer = false)
{
//try
{
System.IO.File.AppendAllText(AppDomain.CurrentDomain.BaseDirectory + "/FileIO/" + fileName, content + "\r\n", Encoding.UTF8);
}
//catch { }
}
//==============================================================
/// <summary>
/// ثبت محتوا در یک فایل در یک خط جدید
/// </summary>
/// <param name="fileName">نام فایل</param>
/// <param name="content">محتوای فایل</param>
public static void Writeln(string fileName, string description, Exception exc, bool activeInServer = false)
{
//if (!SystemDefine.IsLocal && !activeInServer)
// return;
try
{
Writeln(fileName, ">>>>>>");
Writeln(fileName, description);
while (exc != null)
{
Writeln(fileName, exc.Message);
Writeln(fileName, exc.StackTrace);
exc = exc.InnerException;
}
Writeln(fileName, "<<<<<<");
}
catch { }
}
//==============================================================
}
}

View File

@@ -0,0 +1,44 @@
using System.Linq.Dynamic.Core;
namespace Complex.Application.Common
{
public static class Pagination
{
public static IQueryable<TSource> ToPagedByOrder<TSource>(this IQueryable<TSource> source,
CommonRequestDto commonRequest, out int rowsCount)
{
if (commonRequest.Length < 0)
commonRequest.Length = 20000;
if (commonRequest.Length == 0)
commonRequest.Length = 10;
rowsCount = source.Count();
if (commonRequest.sortDirection == SortDirection.desc)
commonRequest.SortField += " DESC";
source = source.OrderBy(commonRequest.SortField);
return source.Skip(commonRequest.Page * commonRequest.Length).Take(commonRequest.Length);
}
public static IQueryable<TSource> ToPaged<TSource>(this IQueryable<TSource> source, int page, int pageSize, out int rowsCount)
{
if (pageSize == -1)
pageSize = 20000;
if (pageSize == 0)
pageSize = 10;
rowsCount = source.Count();
return source.Skip(page * pageSize).Take(pageSize);
}
public static IQueryable<TSource> ToPaged<TSource>(this IQueryable<TSource> source, int page, int pageSize)
{
if (pageSize == -1)
pageSize = 20000;
if (pageSize == 0)
pageSize = 10;
return source.Skip(page * pageSize).Take(pageSize);
}
}
}

View File

@@ -0,0 +1,238 @@
//using Microsoft.AspNetCore.Cryptography.KeyDerivation;
//using System;
//using System.Runtime.CompilerServices;
//using System.Security.Cryptography;
//using System.Text;
//namespace Complex.Common
//{
// public class PasswordHasher
// {
// // Format Markers:
// // IdentityV2: PBKDF2 with HMAC-SHA1, 128-bit salt, 256-bit subkey, 1000 iterations.
// // IdentityV2 Format: { 0x00(byte), salt, subkey }
// // IdentityV3: PBKDF2 with HMAC-SHA256, 128-bit salt, 256-bit subkey, 10000 iterations.
// // IdentityV3 Format: { 0x01(byte), prf(UInt32), iter count(UInt32), salt length(UInt32), salt, subkey }
// // Custom = PBKDF2 with custom configuration.
// // Format: { 0xC0(byte), salt, subkey } OR
// // { 0xC0(byte), prf(UInt32), iter count(UInt32), salt length(UInt32), salt, subkey }
// // Header Info: _includeHeaderInfo
// // IdentityV3 includes configuration in the header, IdentityV2 does not.
// // Use AspNetCore: _useAspNetCore
// // Microsoft.AspNetCore.Cryptography.KeyDerivation is required
// // else use System.Security.Cryptography
// private readonly bool _useAspNetCore;
// private readonly byte _formatMarker;
// private readonly KeyDerivationPrf _prf; // Requires Microsoft.AspNetCore
// private readonly HashAlgorithmName _hashAlgorithmName;
// private readonly bool _includeHeaderInfo;
// private readonly int _saltLength;
// private readonly int _requestedLength;
// private readonly int _iterCount;
// public PasswordHasher()
// {
// _useAspNetCore = true;
// // IdentityV2
// //_formatMarker = 0x00;
// //_prf = KeyDerivationPrf.HMACSHA1; // Requires Microsoft.AspNetCore
// //_hashAlgorithmName = HashAlgorithmName.SHA1;
// //_includeHeaderInfo = false;
// //_saltLength = 128 / 8; // bits/1 byte = 16
// //_requestedLength = 256 / 8; // bits/1 byte = 32
// //_iterCount = 1000;
// // IdentityV3
// _formatMarker = 0x01;
// _prf = KeyDerivationPrf.HMACSHA256; // Requires Microsoft.AspNetCore
// _hashAlgorithmName = HashAlgorithmName.SHA256;
// _includeHeaderInfo = true;
// _saltLength = 128 / 8; // bits/1 byte = 16
// _requestedLength = 256 / 8; // bits/1 byte = 32
// _iterCount = 10000;
// // Custom Max
// //_formatMarker = 0xC0;
// //_prf = KeyDerivationPrf.HMACSHA512; // Requires Microsoft.AspNetCore
// //_hashAlgorithmName = HashAlgorithmName.SHA512;
// //_includeHeaderInfo = true;
// //_saltLength = 512 / 8; // bits/1 byte = 64
// //_requestedLength = 512 / 8; // bits/1 byte = 64
// //_iterCount = 100000;
// }
// public string HashPassword(string password)
// {
// if (string.IsNullOrEmpty(password)) throw new ArgumentNullException(nameof(password));
// byte[] salt = new byte[_saltLength];
// using (var rng = RandomNumberGenerator.Create())
// {
// rng.GetBytes(salt);
// }
// byte[] subkey = new byte[_requestedLength];
// if (_useAspNetCore)
// {
// subkey = KeyDerivation.Pbkdf2(password, salt, _prf, _iterCount, _requestedLength);
// }
// else
// {
// using var pbkdf2 = new Rfc2898DeriveBytes(password, salt, _iterCount, _hashAlgorithmName);
// subkey = pbkdf2.GetBytes(_requestedLength);
// }
// var headerByteLength = 1; // Format marker only
// if (_includeHeaderInfo) headerByteLength = 13;
// var outputBytes = new byte[headerByteLength + salt.Length + subkey.Length];
// outputBytes[0] = (byte)_formatMarker;
// if (_includeHeaderInfo)
// {
// if (_useAspNetCore)
// {
// WriteNetworkByteOrder(outputBytes, 1, (uint)_prf);
// }
// else
// {
// var shaInt = 1;
// if (_hashAlgorithmName == HashAlgorithmName.SHA1) shaInt = 0;
// else if (_hashAlgorithmName == HashAlgorithmName.SHA256) shaInt = 1;
// else if (_hashAlgorithmName == HashAlgorithmName.SHA512) shaInt = 2;
// WriteNetworkByteOrder(outputBytes, 1, (uint)shaInt);
// }
// WriteNetworkByteOrder(outputBytes, 5, (uint)_iterCount);
// WriteNetworkByteOrder(outputBytes, 9, (uint)_saltLength);
// }
// Buffer.BlockCopy(salt, 0, outputBytes, headerByteLength, salt.Length);
// Buffer.BlockCopy(subkey, 0, outputBytes, headerByteLength + _saltLength, subkey.Length);
// return Convert.ToBase64String(outputBytes);
// }
// public bool VerifyPassword(string hashedPassword, string enteredPassword)
// {
// if (string.IsNullOrEmpty(enteredPassword) || string.IsNullOrEmpty(hashedPassword)) return false;
// byte[] decodedHashedPassword;
// try
// {
// decodedHashedPassword = Convert.FromBase64String(hashedPassword);
// }
// catch (Exception)
// {
// return false;
// }
// if (decodedHashedPassword.Length == 0) return false;
// // Read the format marker
// var verifyMarker = (byte)decodedHashedPassword[0];
// if (_formatMarker != verifyMarker) return false;
// try
// {
// if (_includeHeaderInfo)
// {
// // Read header information
// var shaUInt = (uint)ReadNetworkByteOrder(decodedHashedPassword, 1);
// var verifyPrf = shaUInt switch
// {
// 0 => KeyDerivationPrf.HMACSHA1,
// 1 => KeyDerivationPrf.HMACSHA256,
// 2 => KeyDerivationPrf.HMACSHA512,
// _ => KeyDerivationPrf.HMACSHA256,
// };
// if (_prf != verifyPrf) return false;
// var verifyAlgorithmName = shaUInt switch
// {
// 0 => HashAlgorithmName.SHA1,
// 1 => HashAlgorithmName.SHA256,
// 2 => HashAlgorithmName.SHA512,
// _ => HashAlgorithmName.SHA256,
// };
// if (_hashAlgorithmName != verifyAlgorithmName) return false;
// int iterCountRead = (int)ReadNetworkByteOrder(decodedHashedPassword, 5);
// if (_iterCount != iterCountRead) return false;
// int saltLengthRead = (int)ReadNetworkByteOrder(decodedHashedPassword, 9);
// if (_saltLength != saltLengthRead) return false;
// }
// var headerByteLength = 1; // Format marker only
// if (_includeHeaderInfo) headerByteLength = 13;
// // Read the salt
// byte[] salt = new byte[_saltLength];
// Buffer.BlockCopy(decodedHashedPassword, headerByteLength, salt, 0, salt.Length);
// // Read the subkey (the rest of the payload)
// int subkeyLength = decodedHashedPassword.Length - headerByteLength - salt.Length;
// if (_requestedLength != subkeyLength) return false;
// byte[] expectedSubkey = new byte[subkeyLength];
// Buffer.BlockCopy(decodedHashedPassword, headerByteLength + salt.Length, expectedSubkey, 0, expectedSubkey.Length);
// // Hash the incoming password and verify it
// byte[] actualSubkey = new byte[_requestedLength];
// if (_useAspNetCore)
// {
// actualSubkey = KeyDerivation.Pbkdf2(enteredPassword, salt, _prf, _iterCount, subkeyLength);
// }
// else
// {
// using var pbkdf2 = new Rfc2898DeriveBytes(enteredPassword, salt, _iterCount, _hashAlgorithmName);
// actualSubkey = pbkdf2.GetBytes(_requestedLength);
// }
// return ByteArraysEqual(actualSubkey, expectedSubkey);
// }
// catch
// {
// // This should never occur except in the case of a malformed payload, where
// // we might go off the end of the array. Regardless, a malformed payload
// // implies verification failed.
// return false;
// }
// }
// // Compares two byte arrays for equality. The method is specifically written so that the loop is not optimized.
// [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
// private static bool ByteArraysEqual(byte[] a, byte[] b)
// {
// if (a == null && b == null) return true;
// if (a == null || b == null || a.Length != b.Length) return false;
// var areSame = true;
// for (var i = 0; i < a.Length; i++) { areSame &= (a[i] == b[i]); }
// return areSame;
// }
// private static uint ReadNetworkByteOrder(byte[] buffer, int offset)
// {
// return ((uint)(buffer[offset + 0]) << 24)
// | ((uint)(buffer[offset + 1]) << 16)
// | ((uint)(buffer[offset + 2]) << 8)
// | ((uint)(buffer[offset + 3]));
// }
// private static void WriteNetworkByteOrder(byte[] buffer, int offset, uint value)
// {
// buffer[offset + 0] = (byte)(value >> 24);
// buffer[offset + 1] = (byte)(value >> 16);
// buffer[offset + 2] = (byte)(value >> 8);
// buffer[offset + 3] = (byte)(value >> 0);
// }
// }
//}

View File

@@ -0,0 +1,36 @@
using AutoMapper;
using Complex.Application.Basic;
using Complex.Application.Complex;
using Complex.Application.PersonService;
using Complex.Application.Services.Basic;
using Complex.Domain.Entities;
using Microsoft.EntityFrameworkCore;
namespace Complex.Mapping;
public partial class MappingProfile : Profile
{
public MappingProfile()
{
//CreateMap<ComplexEntity, ComplexDto>().ReverseMap();
//CreateMap<ComplexEntity, ComplexDto>()
//.ForMember(m => m.InsertTime, m => m.MapFrom(src => EF.Property<DateTime>(src, "InsertTime")))
//.ForMember(m => m.UpdateTime, m => m.MapFrom(src => EF.Property<DateTime?>(src, "UpdateTime")));
CreateMap<ComplexDto, ComplexEntity>().ReverseMap();
//.ReverseMap();
CreateMap<UnitDto, Unit>().ReverseMap();
//CreateMap<Unit, UnitDto>()
//.ForMember(m => m.InsertTime, m => m.MapFrom(src => EF.Property<DateTime>(src, "InsertTime")))
//.ForMember(m => m.UpdateTime, m => m.MapFrom(src => EF.Property<DateTime?>(src, "UpdateTime")));
//.ReverseMap();
CreateMap<UnitStateDto, UnitState>().ReverseMap();
CreateMap<Person, PersonDto>().ReverseMap();
CreateMap<CostCycle, CostCycleDto>().ReverseMap();
}
}

View File

@@ -0,0 +1,295 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text.RegularExpressions;
namespace Complex.Application.Utility
{
public class PersianDate
{
public struct PDate
{
public int Year { set; get; }
public int Month { set; get; }
public int Day { set; get; }
}
public PersianDate()
{
}
public static DateTime CurrentDate
{
get
{
return DateTime.Now;
}
}//= DateTime.Now;
public static PersianCalendar persianDate = new PersianCalendar();
public static DateTime ConvertToMiladi(string PersianDateString)
{
if (PersianDateString.IsNullOrEmpty())
return new DateTime();
DateTime date;
var splitP = PersianDateString.Substring(0, 10).Split("- /".ToCharArray()).Select(d => d.ToInt().Value).ToArray();
date = new DateTime(splitP[0], splitP[1], splitP[2], persianDate);
return date;
}
public static int CurrentPersianYear
{
get
{
return persianDate.GetYear(CurrentDate);
}
}
public static int CurrentPersianMonth
{
get
{
return persianDate.GetMonth(CurrentDate);
}
}
public static int CurrentPersianDay
{
get
{
return persianDate.GetDayOfMonth(CurrentDate);
}
}
public static List<string> PersianWeekDay = new List<string>()
{
"شنبه",
"یکشنبه",
"دوشنبه",
"سه شنبه",
"چهارشنبه",
"پنج شنبه",
"جمعه"
};
public static List<string> PersianMonth = new List<string>()
{
"فروردین",
"اردیبهشت",
"خرداد",
"تیر",
"مرداد",
"شهریور",
"مهر",
"آبان",
"آذر",
"دی",
"بهمن",
"اسفند"
};
public static string CurrentMonth
{
get
{
return PersianMonth[persianDate.GetMonth(DateTime.Now) - 1];
}
}
public static string CurrntWeekDay
{
get
{
try
{
var d = (int)persianDate.GetDayOfWeek(DateTime.Now);
if (d == 6)
d = -1;
return PersianWeekDay[d + 1];
}
catch { return persianDate.GetDayOfWeek(DateTime.Now).ToString() + "," + (int)persianDate.GetDayOfWeek(DateTime.Now); }
}
}
public static int CurrentDaysInMonth
{
get
{
return persianDate.GetDaysInMonth(CurrentPersianYear, CurrentPersianMonth);
}
}
public static int StartDayInWeek(int Year, int Month)
{
DateTime dt = ConvertToMiladi(Year + "/" + Month.ToString().PadLeft(2, '0') + "/01");
var d = (int)dt.DayOfWeek;
if (d == 6)
d = -1;
return d + 1;
}
public static int CurrentDayInWeek
{
get
{
try
{
var d = (int)persianDate.GetDayOfWeek(DateTime.Now);
if (d == 6)
d = -1;
return d + 1;
}
catch { return 0; }
}
}
public static string GetToday()
{
return GetDate(DateTime.Now);
//return Year + "/" + ((Month < 10) ? "0" + Month : Month.ToString()) + ((Day < 10) ? "0" + Day : Day.ToString());
}
public static string GetDateStringFormat(string date, bool showIntervalDate = false)
{
if (date.IsNullOrEmpty())
return "--";
date = date.Trim();
string today = GetToday();
if (date == today)
return "امروز";
string yesterday = GetDate(DateTime.Now.AddDays(-1));
if (yesterday == today)
return "دیروز";
string twoYesterday = GetDate(DateTime.Now.AddDays(-2));
if (twoYesterday == today)
return "دو روز پیش";
string treeYesterday = GetDate(DateTime.Now.AddDays(-3));
if (treeYesterday == today)
return "سه روز پیش";
if (showIntervalDate)
{
var m1 = ConvertToMiladi(date);
var diff = DateTime.Now - m1;
return (int)diff.TotalDays + " روز پیش";
}
else
return date.Substring(8).ToInt() + " " + PersianMonth[date.Substring(5, 2).ToInt().Value - 1] + " ماه " + date.Substring(0, 4);
}
public static int? GetDateDiff(string date1, string date2)
{
if (date1.IsNullOrEmpty() || date2.IsNullOrEmpty())
return null;
string today = GetToday();
var m1 = ConvertToMiladi(date1);
var m2 = ConvertToMiladi(date2);
var diff = m2 - m1;
return (int)diff.TotalDays;
}
public static string GetDate(DateTime day)
{
int Year = persianDate.GetYear(day);
int Month = persianDate.GetMonth(day);
int Day = persianDate.GetDayOfMonth(day);
return string.Format("{0:D2}/{1:D2}/{2:D2}", Year, Month, Day);
//return Year + "/" + ((Month < 10) ? "0" + Month : Month.ToString()) + ((Day < 10) ? "0" + Day : Day.ToString());
}
public static PDate GetPDate(DateTime day)
{
PDate pdate = new PDate();
pdate.Year = persianDate.GetYear(day);
pdate.Month = persianDate.GetMonth(day);
pdate.Day = persianDate.GetDayOfMonth(day);
return pdate;
}
public static string ToStandard(string _date)
{
if (_date.IsNullOrEmpty())
return _date;
try
{
var a = _date.Split('/').Select(i => i.ToInt().Value).ToArray();
if (a.Count() < 2)
return _date;
return string.Format("{0:D2}/{1:D2}/{2:D2}", a[0], a[1], a[2]);
}
catch
{
return "";
}
//return Year + "/" + ((Month < 10) ? "0" + Month : Month.ToString()) + ((Day < 10) ? "0" + Day : Day.ToString());
}
public static string GetNowTime(bool BySecond = false, bool ByMiliSecond = false)
{
DateTime dnow = DateTime.Now;
return GetTime(dnow, BySecond, ByMiliSecond);
}
public static string GetTime(DateTime DT, bool BySecond = false, bool ByMiliSecond = false)
{
int minutes = DT.Minute;
int Hour = DT.Hour;
int Second = DT.Second;
bool AN = DT.ToLongTimeString().ToLower().Contains("pm") || DT.ToLongTimeString().Contains("ب");
if (AN && Hour < 12)
Hour += 12;
string time = string.Format("{0:D2}:{1:D2}", Hour, minutes); //((Hour < 10) ? "0" + Hour : Hour.ToString()) + ":" + ((minutes < 10) ? "0" + minutes : minutes.ToString());
if (BySecond)
time += ":" + (Second < 10 ? "0" + Second : Second.ToString());
if (ByMiliSecond)
time += ":" + DT.Millisecond;
return time;
}
public static string GetNowDateTime(bool BySecond = false, bool ByMiliSecond = false)
{
return GetToday() + " - " + GetNowTime(BySecond, ByMiliSecond);
}
public static string GetDateTime(DateTime DT, bool BySecond = false)
{
return GetDate(DT) + " - " + GetTime(DT, BySecond);
}
/// <summary>
/// محاسبه اختلاف دو زمان به ساعت و دقیقه
/// </summary>
/// <param name="beginTime">زمان شروع</param>
/// <param name="endTime">زمان پایان</param>
/// <returns></returns>
public static string GetTimeDiff(string beginTime, string endTime)
{
var begin = beginTime.Split(':').Select(int.Parse).ToArray();
var end = endTime.Split(':').Select(int.Parse).ToArray();
int beginMinutes = begin[0] * 60 + begin[1];
int endMinutes = end[0] * 60 + end[1];
int diffMinutes = endMinutes - beginMinutes;
int hour = diffMinutes / 60;
int minute = diffMinutes % 60;
return string.Format("{0:D2}:{1:D2}", hour, minute);
}
/// <summary>
/// بررسی صحت یک رشته از نظر فرمت تاریخ
/// </summary>
/// <param name="date">تاریخ</param>
/// <returns></returns>
public static bool HasDateFormat(string date)
{
Regex regex = new Regex(@"^([12]\d{3}\/(0[1-9]|1[0-2])\/(0[1-9]|[12]\d|3[01]))$");
return regex.IsMatch(date);
}
/// <summary>
/// بررسی صحت یک رشته از نظر فرمت زمان
/// </summary>
/// <param name="time">زمان</param>
/// <returns></returns>
public static bool HasTimeFormat(string time)
{
Regex regex = new Regex(@"^([01]?[0-9]|2[0-3]):[0-5][0-9]$");
return regex.IsMatch(time);
}
}
}

View File

@@ -0,0 +1,484 @@
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Security.Cryptography;
using System.Text;
using System.Text.Json;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace Complex.Application.Utility
{
public static class ExtendFunction
{
public static string ObjectToJson(this object obj)
{
return JsonConvert.SerializeObject(obj, Formatting.Indented, new JsonSerializerSettings
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
});
//return System.Text.Json.JsonSerializer.Serialize(obj);
}
public static byte[] ToByteArray(this Stream input)
{
using (MemoryStream ms = new MemoryStream())
{
input.CopyTo(ms);
return ms.ToArray();
}
}
//public static void Log(this Exception ex)
//{
// if (ex is ThreadAbortException)
// {
// return;
// }
// var a = new List<string>() { "[" + ex.Message + "]<br />" };
// a.Add(ex.StackTrace);
// while (ex.InnerException != null)
// {
// ex = ex.InnerException;
// //a.Add("<br />-----------<br />[" + ex.Message + "]<br />---------<br />" + ex.StackTrace);
// }
// long personId = 0;
// if (HttpContext.Current.Session != null && HttpContext.Current.Session["PersonID"] != null)
// personId = HttpContext.Current.Session["PersonID"].ToString().ToLong().Value;
// LogClass.SetLog(personId, -1, ex.Message, false, a, -1, 2);
//}
public static string CodeID(this short ID)
{
return Code_ID(ID);
}
public static string CodeID(this int ID)
{
return Code_ID(ID);
}
public static string CodeID(this long ID)
{
return Code_ID(ID);
}
static string Code_ID(long ID)
{
long id1 = ID ^ 0;//GetResourceLongValue("KeyCode1");
id1 = id1 * 7 + 5;
long id2 = id1.ToString().Length + ID % 10 ^ 0;//GetResourceLongValue("KeyCode2");
return id1 + "_" + id2;
}
public static long DeCodeID(this string ID)
{
string[] ids = ID.Split('_');
long id1 = ids[0].ToLong().Value;
id1 = (id1 - 5) / 7;
id1 = id1 ^ 0;//GetResourceLongValue("KeyCode1");
long id2 = ids[0].Length + id1 % 10 ^ 0;//GetResourceLongValue("KeyCode2");
if (ids[1] == id2.ToString())
return id1;
return -1;
}
public static long? ToLong(this object ID, long? defaultValue = null)
{
long LID;
bool IsLong = long.TryParse(ID + "", out LID);
if (IsLong)
return LID;
else
return defaultValue;
}
public static int Value(this int? number, int defaultInt = 0)
{
if (number.HasValue)
return number.Value;
return defaultInt;
}
public static double Value(this double? number, int defaultInt = 0)
{
if (number.HasValue)
return number.Value;
return defaultInt;
}
public static string NumberToDate(this int? Date)
{
if (Date == null)
return "";
return Date.Value.NumberToDate();
}
public static string NumberToDate(this int Date)
{
try
{
var st = Date.ToString();
return st.Substring(0, 4) + "/" + st.Substring(4, 2) + "/" + st.Substring(6, 2);
}
catch { return ""; }
}
public static int? ToInt(this object ID, int? defaultInt = null)
{
int LID;
bool IsLong = int.TryParse(ID + "", out LID);
if (IsLong)
return LID;
else
return defaultInt;
}
//public static string GetSql(this IQueryable<object> query)
//{
// return ((System.Data.Objects.ObjectQuery)query).ToTraceString();
//}
public static double? ToDouble(this object ID, double? defaultValue = null)
{
double LID;
bool IsDouble = double.TryParse(ID + "", out LID);
if (IsDouble)
return LID;
else
return defaultValue;
}
public static short? ToShort(this object ID)
{
short LID;
bool IsLong = short.TryParse(ID + "", out LID);
if (IsLong)
return LID;
else
return null;
}
public static byte? ToByte(this object ID, byte defaultValue = 0)
{
byte LID;
bool IsLong = byte.TryParse(ID + "", out LID);
if (IsLong)
return LID;
else
return defaultValue;
}
public static bool? ToBool(this object obj)
{
if (obj == null)
return null;
var ID = obj.ToString();
bool b;
if (ID.ToLower() == "false" || ID == "0")
return false;
if (ID.ToLower() == "true" || ID == "1" || ID.ToLower() == "on")
return true;
bool isConvert = bool.TryParse(ID, out b);
if (!isConvert)
return null;
return b;
}
public static string ConvertToBase64(this string str)
{
return Convert.ToBase64String(Encoding.UTF8.GetBytes(str));
}
public static string ConvertToBase64(this byte[] bytes)
{
return Convert.ToBase64String(bytes);
}
public static string ConvertBase64ToString(this string str)
{
return Encoding.UTF8.GetString(Convert.FromBase64String(str));
}
public static byte[] Base64ToByte(this string str)
{
return Convert.FromBase64String(str);
}
public static string[] Split(this string str, string spliter, StringSplitOptions spo = StringSplitOptions.RemoveEmptyEntries)
{
string[] sp = new string[] { spliter };
return str.Split(sp, spo);
}
public static bool IsNullOrEmpty(this string? str)
{
return string.IsNullOrEmpty(str);
}
public static bool IsNotNullOrEmpty(this string? str)
{
return !string.IsNullOrEmpty(str);
}
public static string CalculateMD5Hash(this string input)
{
// step 1, calculate MD5 hash from input
MD5 md5 = MD5.Create();
byte[] inputBytes = Encoding.ASCII.GetBytes(input);
byte[] hash = md5.ComputeHash(inputBytes);
// step 2, convert byte array to hex string
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hash.Length; i++)
{
sb.Append(hash[i].ToString("X2"));
}
return sb.ToString();
}
public static byte[] ToByte(this Stream input)
{
using (MemoryStream ms = new MemoryStream())
{
input.CopyTo(ms);
return ms.ToArray();
}
}
public static string SimpleCodeString(this string st)
{
if (st == null)
return "";
return string.Join("", st.ConvertToBase64().Reverse()).Replace("=", "*@!").Replace("1", "___").Replace("2", "_1_1_");
}
public static string SimpleDeCodeString(this string st)
{
if (st.IsNullOrEmpty())
return "";
return string.Join("", st.Replace("_1_1_", "2").Replace("___", "1").Replace("*@!", "=").Reverse()).ConvertBase64ToString();
}
public static string SetValisQueryString(this string st)
{
return st;
}
public static byte[] EnCodeString(this string str)
{
var bytes = Encoding.UTF8.GetBytes(str);
for (int i = 0; i < bytes.Length; i++)
{
bytes[i] += 14;
}
return bytes;
}
public static byte[] EnCodeStringForSearchLike(this string str)
{
var bytes = Encoding.UTF8.GetBytes(str);
for (int i = 0; i < bytes.Length; i++)
{
bytes[i] += 14;
}
var b = Encoding.UTF8.GetBytes("%");
var finalBytes = new byte[bytes.Length + 2];
finalBytes[0] = b[0];
finalBytes[finalBytes.Length - 1] = b[0];
for (int i = 0; i < bytes.Length; i++)
finalBytes[i + 1] = bytes[i];
return finalBytes;
}
public static string DeCodeString(this byte[] byteArray)
{
if (byteArray == null)
return "";
for (int i = 0; i < byteArray.Length; i++)
{
byteArray[i] -= 14;
}
var bytes = Encoding.UTF8.GetString(byteArray);
return bytes;
}
public static string StripHTML(this string input)
{
return Regex.Replace(input, "<.*?>", string.Empty);
}
public static string SubStrFromStartEnd(this string str, int startindex = 0, int minesLenght = 0)
{
return str.Substring(startindex, str.Length - minesLenght);
}
public static string SubStrWithMax(this string str, int maxLength = 50, string continueStr = "")
{
if (str.Length < maxLength)
return str;
return str.Substring(0, maxLength) + continueStr;
}
public static IList<T> CastToList<T>(this IEnumerable source)
{
return new List<T>(source.Cast<T>());
}
//public static T Cast2<T>(this object obj)
//{
// return (T)obj;
//}
public static T CastTo<T>(this object value, T targetType)
{
// targetType above is just for compiler magic
// to infer the type to cast x to
return (T)value;
}
public static string RemoveFirstLines(this string text, int linesCount)
{
var lines = Regex.Split(text, "\r\n|\r|\n").Skip(linesCount);
return string.Join(Environment.NewLine, lines.ToArray());
}
public static string RemoveEndLines(this string text, int linesCount)
{
var lines = Regex.Split(text, "\r\n|\r|\n").Reverse().Skip(linesCount).Reverse();
return string.Join(Environment.NewLine, lines.ToArray());
}
public static string GetPropertiesValues(this object obj)
{
if (obj == null) return "null";
StringBuilder sb = new StringBuilder();
List<PropertyInfo> props = obj.GetType().GetProperties().ToList();
foreach (var p in props)
{
sb.Append(p.Name).Append(": ").Append(p.GetValue(obj, null));
sb.AppendLine();
}
return sb.ToString();
}
//public static IEnumerable<T> Filter<T>(this IEnumerable<T> source, string searchStr)
//{
// var propsToCheck = typeof(T).GetProperties().Where(a => a.PropertyType == typeof(string));
// var filter = propsToCheck.Aggregate(string.Empty, (s, p) => (s == string.Empty ? string.Empty : string.Format("{0} OR ", s)) + string.Format("{0} == @0", p.Name));
// var filtered = source.AsQueryable().Where(filter, searchStr);
// return filtered;
//}
/// <summary>
/// فرمت تاریخ صحیح است؟
/// </summary>
/// <param name="date">تاریخ</param>
/// <returns></returns>
public static bool HasDateFormat(this string date)
{
return PersianDate.HasDateFormat(date);
}
/// <summary>
/// فرمت زمان معتبر است؟
/// </summary>
/// <param name="time">زمان</param>
/// <returns></returns>
public static bool HasTimeFormat(this string time)
{
return PersianDate.HasTimeFormat(time);
}
/// <summary>
/// تبدیل رشته زمان به دقیقه
/// </summary>
/// <param name="time">زمان</param>
/// <returns></returns>
public static int ConvertTimeToMinutes(this string time)
{
//if (!time.HasTimeFormat())
// return 0;
try
{
var hm = time.Split(':').Select(i => i.ToInt(0).Value).ToArray();
return hm[0] * 60 + hm[1];
}
catch
{
return 0;
}
}
/// <summary>
/// تبدیل دقیقه به رشته زمان
/// </summary>
/// <param name="minutes">دقیقه</param>
/// <returns></returns>
public static string ConvertMinutesToTime(this int minutes)
{
if (minutes < 0)
return "";
return string.Format("{0:D2}:{1:D2}", minutes / 60, minutes % 60);
}
public static object Copy(this object entity, object distEntity, List<string> excludeCopyField = null, int level = 0/*, ILogger logger*/)
{
if (level > 5)
return null;
if (excludeCopyField == null)
excludeCopyField = new List<string>();
var obj1Properties = entity.GetType().GetProperties();
var obj2Properties = distEntity.GetType().GetProperties();
try
{
foreach (var obj1prop in obj1Properties)
{
if (excludeCopyField.Contains(obj1prop.Name))
continue;
var destProp = obj2Properties.FirstOrDefault(x => x.Name == obj1prop.Name);// && x.PropertyType == obj1prop.PropertyType);
//logger.LogInformation("---> " + obj1prop.Name);
if (destProp != null)
{
object srcEnt = obj1prop.GetValue(entity, null);
//logger.LogInformation("------> srcEnt is null: " + (srcEnt == null));
if (srcEnt != null)
{
bool isNullable = destProp.PropertyType.IsGenericType;// && destProp.PropertyType.GetGenericTypeDefinition() == typeof(Nullable);
if (isNullable || destProp.PropertyType.IsPrimitive || destProp.PropertyType == typeof(String))
{
destProp.SetValue(distEntity, srcEnt);
}
else
{
object destEnt = Activator.CreateInstance(destProp.PropertyType);
//logger.LogCritical("=====> destEnt is null: " + (destEnt == null));
if (destEnt != null)
{
var a = srcEnt.Copy(destEnt, excludeCopyField, level + 1);
destProp.SetValue(distEntity, a);
}
}
}
}
}
}
catch
{
return null;
}
return distEntity;
}
public static string CorrectPersianString(this string str)
{
return str.Replace("ك", "ک").Replace("ي", "ی").Replace("ﯼ", "ی").Replace("ى", "ی");
}
}
public class SearchTokenVM
{
public string KeySearch { set; get; }
}
public class RoleParam
{
public int RoleId { set; get; }
}
}

View File

@@ -0,0 +1,21 @@
using Complex.Common.Dto;
using Complex.Domain.Entities;
namespace Complex.Application.AppCommon
{
public interface IAppCommonService
{
ResultDto<Poster> GetPoster();
}
public class AppCommonService : IAppCommonService
{
public ResultDto<Poster> GetPoster()
{
return new ResultDto<Poster>
{
Data = new Poster { ImagePath = "banner.png" },
IsSuccess = true
};
}
}
}

View File

@@ -0,0 +1,71 @@
using AutoMapper;
using Complex.Common.Dto;
using Complex.Domain.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Complex.Application.Basic
{
public interface IBasicService
{
ResultDto<List<UnitStateDto>> UnitStateList(Guid ComplexId);
ResultDto<int> InsertUnitState(UnitStateDto unitState);
ResultDto<bool> EditUnitState(UnitStateDto unitState);
}
public class BasicService : IBasicService
{
private readonly IComplexDBContext _complexDBContext;
private readonly IMapper _mapper;
public BasicService(IComplexDBContext complexDBContext, IMapper mapper)
{
_complexDBContext = complexDBContext;
_mapper = mapper;
}
public ResultDto<List<UnitStateDto>> UnitStateList(Guid ComplexId)
{
var UnitStates = _complexDBContext.UnitStates.Where(s => s.ComplexId == ComplexId || !s.ComplexId.HasValue).ToList()
.Select(u=>_mapper.Map<UnitStateDto>(u)).ToList();
return new ResultDto<List<UnitStateDto>>
{
Data = UnitStates,
IsSuccess = true,
RowCount = UnitStates.Count
};
}
public ResultDto<bool> EditUnitState(UnitStateDto unitStateDto)
{
var unitState = _complexDBContext.UnitStates.FirstOrDefault(us => us.Id == unitStateDto.Id);
unitState.Title = unitStateDto.Title;
unitState.Icon= unitStateDto.Icon;
_complexDBContext.SaveChanges();
return new ResultDto<bool> { IsSuccess = true, Message="ویرایش با موفقیت انجام شد"};
}
public ResultDto<int> InsertUnitState(UnitStateDto unitStateDto)
{
var newUnitState = new UnitState();
newUnitState.Title= unitStateDto.Title;
newUnitState.Icon= unitStateDto.Icon;
newUnitState.ComplexId= unitStateDto.ComplexId;
_complexDBContext.UnitStates.Add(newUnitState);
_complexDBContext.SaveChanges();
return new ResultDto<int> { IsSuccess = true, Data= newUnitState.Id, Message = "ثبت با موفقیت انجام شد" };
}
}
public class UnitStateDto
{
public int Id { get; set; }
public Guid? ComplexId { set; get; }
public string Title { set; get; }
public string Icon { set; get; }
}
}

View File

@@ -0,0 +1,414 @@
using AutoMapper;
using Complex.Application.Complex;
using Complex.Application.Utility;
using Complex.Common.Dto;
using Complex.Domain.Entities;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Complex.Application.Services.Basic
{
public class CostService
{
private readonly IComplexDBContext _complexDBContext;
private IMapper _mapper;
private ILogger _logger;
public CostService(IComplexDBContext complexDBContext, IMapper mapper, ILogger<CostService> logger)
{
_complexDBContext = complexDBContext;
_mapper = mapper;
_logger = logger;
}
//public ResultDto<List<ChargeCycleDto>> ComplexChargeCycle(Guid ComplexId)
//{
// var chargeCycles = _complexDBContext.ChargeCycles.Include(c => c.UnitChargeTypes).ThenInclude(c => c.Unit)
// .Where(c => c.ComplexId == ComplexId).ToList();
// var chargeCycleObj = chargeCycles.Select(c => _mapper.Map<ChargeCycleDto>(c)).ToList();
// foreach (var c in chargeCycleObj)
// {
// c.Units = chargeCycles.Single(a => a.Id == c.Id).UnitChargeTypes.Where(t => !t.ChargeTypeId.HasValue)
// .Select(a => a.Unit).Select(u => _mapper.Map<UnitDto>(u)).ToList();
// }
// return new ResultDto<List<ChargeCycleDto>>
// {
// Data = chargeCycleObj,
// IsSuccess = true,
// };
//}
/// <summary>
/// لیست مدیریت شارژ یا هر گونه درآمد و مخارج گرفته می شود
/// </summary>
/// <param name="ComplexId"></param>
/// <param name="StartDate"></param>
/// <param name="EndDate"></param>
/// <param name="IncomeCostTitleId"></param>
/// <returns></returns>
public ResultDto<List<CostCycleDto>> CostCyclsList(Guid ComplexId, DateOnly? StartDate = null,
DateOnly? EndDate = null, int? IncomeCostTitleId = null)
{
if (IncomeCostTitleId.HasValue && StartDate.HasValue)
StartDate = GetStartOfMonth(StartDate.Value);
var ChargeCycleQuery = _complexDBContext.CostCycles.Include(c => c.Units).Where(c => c.ComplexId == ComplexId).AsQueryable();
if (StartDate.HasValue)
ChargeCycleQuery = ChargeCycleQuery.Where(c => c.StartDate >= StartDate);
if (EndDate.HasValue)
ChargeCycleQuery = ChargeCycleQuery.Where(c => c.EndDate <= EndDate);
if (IncomeCostTitleId.HasValue)
ChargeCycleQuery = ChargeCycleQuery.Where(c => c.IncomeCostTitleId == IncomeCostTitleId);
else/*مدیریت شارژ ها فقط*/
ChargeCycleQuery = ChargeCycleQuery.Where(c => c.IncomeCostTitleId == null);
var ChargeCycleList = ChargeCycleQuery.ToList().Select(c => new CostCycleDto
{
ComplexId = c.ComplexId,
Amount = c.Amount,
EncouragementAmount = c.EncouragementAmount,
EncouragementDay = c.EncouragementDay,
EndDate = c.EndDate,
StartDate = c.StartDate,
Id = c.Id,
Title = c.Title,
UnitIds = c.Units?.Select(u => u.Id).ToList(),
UnitNames = c.Units?.Select(u => u.Id + "#" + u.UnitName).ToList(),
IncomeCostTitleId = c.IncomeCostTitleId,
IncomeCostTitle = c.IncomeCostTitle?.Title
}).ToList();
return new ResultDto<List<CostCycleDto>>
{
IsSuccess = true,
RowCount = ChargeCycleList.Count,
Data = ChargeCycleList
};
}
public ResultDto<bool> EditCostCycle(CostCycleDto costCycleDto)
{
var cycle = _complexDBContext.CostCycles.Single(a => a.Id == costCycleDto.Id);
var isUsed = _complexDBContext.Transactions.Any(c => c.CostCycleId == costCycleDto.Id);
if (isUsed)
return new ResultDto<bool>
{
IsSuccess = false,
Message = "این آیتم استفاده شده است. شما می توانید این آیتم را حذف نمایید",
Data = false
};
cycle = _mapper.Map<CostCycle>(costCycleDto);
cycle.IncomeCostTitleId = costCycleDto.IncomeCostTitleId;
if (costCycleDto.UnitIds != null)
cycle.Units = _complexDBContext.Units.Where(u => costCycleDto.UnitIds.Contains(u.Id)
&& u.ComplexId == costCycleDto.ComplexId).ToList();
foreach (var u in cycle.Units)
{
var define = DefineUnitCharge(unitId: u.Id, costCycle: cycle);
if (!define.IsSuccess)
return new ResultDto<bool> { Data = false, IsSuccess = true, Message = define.Message };
}
_complexDBContext.SaveChanges();
return new ResultDto<bool> { Data = true, IsSuccess = true, Message = "ویرایش با موفقیت انجام شد" };
}
private DateOnly GetStartOfMonth(DateOnly date)
{
var persianDate = PersianDate.GetPDate(date.ToDateTime(new TimeOnly(1, 1)));
return date.AddDays(-persianDate.Day + 1);
}
public ResultDto<Guid> InsertCostCycle(CostCycleDto costCycleDto)
{
//اگر مدیریت شارژ هست پس تاریخ ها باید از یکم تا پایان ماه بشود
//البته باید در نرم افزار فقط امکان انتخاب ماه را داشته باشد
//&^*&^*&^&*^*&^*&^&*^*&^*&^&*^*&^*&^*&^&*^&*^*&&^*&^*&^&*^*^*&^*&^*&^&*^*&
//
if (costCycleDto.IncomeCostTitleId == null)
costCycleDto.StartDate = GetStartOfMonth(costCycleDto.StartDate);
var newCycle = _mapper.Map<CostCycle>(costCycleDto);
if (costCycleDto.UnitIds != null)
newCycle.Units = _complexDBContext.Units.Where(u => costCycleDto.UnitIds.Contains(u.Id) && costCycleDto.ComplexId == u.ComplexId).ToList();
//if(newCycle.Units==null)
//{
// //باید چک کرد در این بازه ایا با یکی دیگر که همه واحدها را در نظر میگیرد هم پوشانی نداشته باشد
// اما چون در پایین چک میشه پس مشکلی ندارد
// var IsPublicCostExist=_complexDBContext.CostCycles.Where(c=>
// c.ComplexId== newCycle.ComplexId && )
//}
_complexDBContext.CostCycles.Add(newCycle);
foreach (var u in newCycle.Units)
{
var define = DefineUnitCharge(unitId: u.Id, costCycle: newCycle, isNew: true);
if (!define.IsSuccess)
return new ResultDto<Guid> { IsSuccess = false, Message = define.Message };
}
_complexDBContext.SaveChanges();
return new ResultDto<Guid> { Data = newCycle.Id, IsSuccess = true, Message = "ثبت با موفقیت انجام شد" };
}
public ResultDto DefineUnitCharge(Guid unitId, CostCycle costCycle, bool isNew = false)
{
//var cycle = _complexDBContext.CostCycles.Where(c => c.Id == costCycleId).FirstOrDefault();
var currentDate = DateOnly.FromDateTime(DateTime.Now);
///ایتم هایی که برای بعد از این تاریخ هست باید حذف شوند و مجدد محاسبه شوند
///اما ایتم هایی که هم تاریخ مدیریت شارژ و هم تاریخ امروز به بعد
///البته در مدیریت شارژ تعریفی نباید اجازه داد تاریخ شروع از آن روز به قبل باشد
if (!isNew)
{
var validDateTimeForDel = currentDate;
//validDateTimeForDel.AddHours(-validDateTimeForDel.Hour);
//validDateTimeForDel.AddMinutes(-validDateTimeForDel.Minute);
//validDateTimeForDel.AddSeconds(-validDateTimeForDel.Second);
var itemsForDelete = _complexDBContext.UnitCosts.Where(t =>
t.CostCycleId == costCycle.Id &&
t.UnitId == unitId && t.Date >= validDateTimeForDel && !t.TransactionId.HasValue);
/*
نکته: !t.TransactionId.HasValue
.مشکل اینجاست که اگر برای اینده باشه و پرداخت کرده باشه باید یک راهکاری اندیشید چون حذف نمیشه!مشکل دارد
*/
_complexDBContext.UnitCosts.RemoveRange(itemsForDelete);
}
//اگر شارژ باشد فقط یک بار در ماه هست اما غیر از ان به هر هزینه تعریفی میتواند
//که در ماه میتواند چندین هزینه تعریف کند
//اگر برای شارژ باشد
//if (!cycle.IncomeCostTitleId.HasValue)
// deleteCharges = deleteCharges.Where(t => t.ChargeCycleId == ChargeCycleId);
//else
//deleteCharges = deleteCharges.Where(t => t.ChargeCycleId == cycle.Id);
//همه ماهانه هست و روز خاصی نگرفتیم برای اصل و پرداخت نشده ها حذف شده
//پس روز اخر ملاک هست
if (!costCycle.IncomeCostTitleId.HasValue)
while (currentDate <= costCycle.EndDate)
{
//میبیند برای این واحد ایا چیزی ثبت شده است یا خیر با دوره واحد دیگر
//چون بالا برای دوره واحدی که به این تابع امده حذف را انجام دادیم
var oldUnitCost = _complexDBContext.UnitCosts.Include(uc => uc.CostCycle).ThenInclude(c => c.Units)
.Where(uc =>
uc.UnitId == unitId &&
uc.CostCycle.IncomeCostTitleId == null &&
uc.Date.Month == currentDate.Month).FirstOrDefault();
if (oldUnitCost != null)
{
//cycle.Units != null====>پس این واحد هم اختصاصیش بوده*/
//اگر این اختصاصی هست و قبلش اختصاصی هم بوده خطا بده
if (costCycle.Units != null && oldUnitCost.CostCycle.Units != null)
return new ResultDto
{
IsSuccess = false,
Message = "برای برخی از واحدها در این بازه زمانی قبلا به صورت اختصاصی شارژ تعیین شده است"
};
//اگر این اختصاصی هست و قبلش غیراختصاصی بوده باید پاک بشه البته برای همین واحد است که حذف میشه
if (costCycle.Units != null && oldUnitCost.CostCycle.Units == null)
_complexDBContext.UnitCosts.Remove(oldUnitCost);
//اگر این غیر اختصاصی هست و قبلش غیر اختصاصی بوده قبلیش باید پاک بشه یا خطا بدهیم
//اما خطا نمیدهیم چون ممکنه بازه ها متفاوت باشند ولی اشتراک داشته باشند. بهتره جای دیگه چک بشه
//if (cycle.Units == null && oldUnitCost.CostCycle.Units == null)
//اگر این غیر اختصاصی هست و قبلیش اختصاصی بوده که نباید ثبت بشه
if (costCycle.Units == null && oldUnitCost.CostCycle.Units != null)
return new ResultDto { IsSuccess = true, Message = "نیاز به تعریف مجدد برای این واحد نبود" };
if (costCycle.Units == null && oldUnitCost.CostCycle.Units == null)
return new ResultDto { IsSuccess = false, Message = "شما در یک بازه زمانی نمیتوانید بیش از یک مورد عمومی تعریف کنید" };
}
//--------------
var newUC = new UnitCost
{
CostCycleId = costCycle.Id,
UnitId = unitId,
Date = currentDate,
TransactionId = null
};
currentDate = currentDate.AddMonths(1);
_complexDBContext.UnitCosts.Add(newUC);
}
else
{
var newUC = new UnitCost
{
CostCycleId = costCycle.Id,
UnitId = unitId,
Date = currentDate,
TransactionId = null
};
_complexDBContext.UnitCosts.Add(newUC);
}
// _complexDBContext.SaveChanges();
return new ResultDto
{
Message = "ثبت با موفقیت انجام شد",
IsSuccess = true,
};
}
/// <summary>
/// بدهی یک واحد
/// </summary>
/// <param name="unitId"></param>
/// <param name="incomeCostTitleId"></param>
/// <returns></returns>
public ResultDto<CostOfUnitInfoDto> CalculateCostForUnit(Guid unitId, int? incomeCostTitleId)
{
var currentDate = DateOnly.FromDateTime(DateTime.Now);
var unitCost = _complexDBContext.UnitCosts.Where(uc => unitId == uc.UnitId &&
!uc.TransactionId.HasValue
&& uc.CostCycle.IncomeCostTitleId == incomeCostTitleId && uc.Date <= currentDate);
var LastPaymentDate = _complexDBContext.UnitCosts.Where(uc => unitId == uc.UnitId &&
uc.TransactionId.HasValue/*پرداخت شده000000000000*/
&& uc.CostCycle.IncomeCostTitleId == incomeCostTitleId && uc.Date <= currentDate)
.OrderBy(uc => uc.Date).LastOrDefault()?.Date;
var costTitle = "شارژ";
if (incomeCostTitleId.HasValue)
costTitle = _complexDBContext.IncomeCostTitles.First(i => i.Id == incomeCostTitleId).Title;
return new ResultDto<CostOfUnitInfoDto>
{
Data = new CostOfUnitInfoDto
{
CostMount = unitCost.Sum(c => c.CostCycle.Amount),
CostTitle = costTitle,
LastPaymentDate = LastPaymentDate,
UnitId = unitId
},
IsSuccess = true
};
}
/// <summary>
/// لیست بدهی های یک واحد
/// </summary>
/// <param name="unitId"></param>
/// <returns></returns>
public ResultDto<List<CostOfUnitInfoDto>> CalculateAllCostForUnits(List<Guid> unitIds)
{
var currentDate = DateOnly.FromDateTime(DateTime.Now);
var unitCharges = _complexDBContext.UnitCosts.Include(uc => uc.CostCycle).ThenInclude(cc => cc.IncomeCostTitle)
.Where(uc => unitIds.Contains(uc.UnitId) &&
!uc.TransactionId.HasValue
&& uc.Date <= currentDate).ToList();
var resultList = new List<CostOfUnitInfoDto>();
foreach (var unitid in unitIds)
{
resultList.AddRange(unitCharges.Where(u => u.UnitId == unitid).Select(uc => new CostOfUnitInfoDto
{
CostMount = uc.CostCycle.Amount,
CostTitle = uc.CostCycle.IncomeCostTitleId.HasValue ? uc.CostCycle.IncomeCostTitle?.Title : "شارژ",
Date = uc.Date,
UnitId = unitid,
CostCount = unitCharges.Where(u => u.UnitId == unitid).Count()
}).ToList());
}
return new ResultDto<List<CostOfUnitInfoDto>>
{
Data = resultList,
IsSuccess = true
};
//{
// Data = unitCharges.Sum(c => c.CostCycle.Amount),
// Message = "تمام بدهی"
//};
}
/// <summary>
/// تاریخچه پرداختی ها و باقیمانده از آن
/// </summary>
/// <param name="unitId"></param>
/// <param name="incomeCostTitleId"></param>
/// <param name="startDate"></param>
/// <param name="endDate"></param>
/// <returns></returns>
public ResultDto<List<CostOfUnitInfoDto>> CostsForUnits(List<Guid> unitIds, int? incomeCostTitleId,
DateOnly startDate, DateOnly endDate)
{
var unitCharges = _complexDBContext.UnitCosts.Include(uc => uc.CostCycle).ThenInclude(cc => cc.IncomeCostTitle)
.Where(uc => unitIds.Contains(uc.UnitId)
//!uc.TransactionId.HasValue
&& uc.Date >= startDate
&& uc.Date <= endDate).ToList();//.GroupBy(g => g.UnitId);
var resultList = new List<CostOfUnitInfoDto>();
foreach (var uid in unitIds)
{
resultList.AddRange(unitCharges.Where(u => u.UnitId == uid).Select(uc => new CostOfUnitInfoDto
{
UnitCostId = uc.Id,
CostMount = uc.CostCycle.Amount,
CostTitle = uc.CostCycle.IncomeCostTitleId.HasValue ? uc.CostCycle.IncomeCostTitle?.Title : "شارژ",
Date = uc.Date,
UnitId = uid,
CostCount = unitCharges.Where(u => u.UnitId == uid).Count()
}).ToList());
}
return new ResultDto<List<CostOfUnitInfoDto>>
{
Data = resultList,
IsSuccess = true
};
}
}
public class CostOfUnitInfoDto
{
public long UnitCostId { set; get; }
public Guid UnitId { get; set; }
public int CostCount { get; set; }
public long CostMount { get; set; }
//public long CostCount { set; get; }
public DateOnly? LastPaymentDate { get; set; }
public DateOnly? Date { get; set; }
public string? CostTitle { get; set; }
public DateOnly? PaymentDate { set; get; }
}
public class CostCycleDto
{
public Guid Id { set; get; }
public Guid ComplexId { set; get; }
public string Title { set; get; }
public DateOnly StartDate { set; get; }
public DateOnly EndDate { set; get; }
public long Amount { set; get; } = 0;
/// <summary>
/// روز از ماه برای تشویقی
/// </summary>
public int EncouragementDay { set; get; } = 0;
/// <summary>
/// مبلغ اجاره با احتساب تشویقی
/// </summary>
public long EncouragementAmount { set; get; } = 0;
/// <summary>
/// اگر برای واحدهای خاصی بود
/// </summary>
/// <summary>
/// اگر برای واحدهای خاصی بود
/// </summary>
public virtual List<Guid>? UnitIds { set; get; }
public virtual List<string>? UnitNames { set; get; }
/// <summary>
/// null یعنی شارژ
/// </summary>
public int? IncomeCostTitleId { set; get; }
public string? IncomeCostTitle { set; get; }
}
}

View File

@@ -0,0 +1,118 @@
// در بیسیک وجود دارد
//using AutoMapper;
//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.Charge
//{
// public class ChargeCycleService
// {
// /*
// * ثبت آیتم مدیریت شارژ
// * لیست ایتم های مدیریت شارژ
// * ویرایش
// */
// private readonly IComplexDBContext _complexDBContext;
// private readonly IMapper _mapper;
// public ChargeCycleService(IComplexDBContext complexDBContext, IMapper mapper)
// {
// _complexDBContext = complexDBContext;
// _mapper = mapper;
// }
// public ResultDto<Guid> InsertManageCharge(ChargeCycleDto chargeCycleDto)
// {
// var CCharge = new ChargeCycle
// {
// Amount = chargeCycleDto.Amount,
// ComplexId = chargeCycleDto.ComplexId,
// EncouragementAmount = chargeCycleDto.EncouragementAmount,
// EncouragementDay = chargeCycleDto.EncouragementDay,
// EndDate = chargeCycleDto.EndDate,
// InsertTime = DateTime.Now,
// StartDate = chargeCycleDto.StartDate,
// Title = chargeCycleDto.Title,
// };
// if (chargeCycleDto.UnitIds != null)
// {
// CCharge.UnitChargeTypes = new List<UnitChargeType>();
// chargeCycleDto.UnitIds.ForEach(g => CCharge.UnitChargeTypes.Add(new UnitChargeType
// {
// ComplexId = chargeCycleDto.ComplexId,
// ChargeTypeId = null,
// UnitId = g
// }));
// }
// _complexDBContext.ChargeCycles.Add(CCharge);
// _complexDBContext.SaveChanges();
// return new ResultDto<Guid>
// {
// IsSuccess = true,
// Data = CCharge.Id
// };
// }
// public ResultDto<List<ChargeCycleDto>> ChargeCyclsList(Guid ComplexId, DateTime? StartDate = null, DateTime? EndDate = null)
// {
// var ChargeCycleQuery = _complexDBContext.ChargeCycles.Include(c => c.UnitChargeTypes).ThenInclude(uc => uc.Unit).Where(c => c.ComplexId == ComplexId).AsQueryable();
// if (StartDate != null)
// ChargeCycleQuery = ChargeCycleQuery.Where(c => c.StartDate >= StartDate);
// if (EndDate != null)
// ChargeCycleQuery = ChargeCycleQuery.Where(c => c.EndDate <= EndDate);
// var ChargeCycleList = ChargeCycleQuery.ToList().Select(c => new ChargeCycleDto
// {
// ComplexId = c.ComplexId,
// Amount = c.Amount,
// EncouragementAmount = c.EncouragementAmount,
// EncouragementDay = c.EncouragementDay,
// EndDate = c.EndDate,
// StartDate = c.StartDate,
// Id = c.Id,
// Title = c.Title,
// UnitIds = c.UnitChargeTypes?.Select(u => u.UnitId).ToList(),
// UnitNames = c.UnitChargeTypes?.Select(u => u.Unit.UnitId + "#" + u.Unit.UnitName).ToList(),
// }).ToList();
// return new ResultDto<List<ChargeCycleDto>>
// {
// IsSuccess = true,
// RowCount= ChargeCycleList.Count,
// Data= ChargeCycleList
// };
// }
// }
// public class ChargeCycleDto
// {
// public Guid Id { get; set; }
// public Guid ComplexId { set; get; }
// public virtual ComplexEntity Complex { set; get; }
// public string Title { set; get; }
// public DateTime StartDate { set; get; }
// public DateTime EndDate { set; get; }
// public long Amount { set; get; } = 0;
// /// <summary>
// /// روز از ماه برای تشویقی
// /// </summary>
// public int EncouragementDay { set; get; } = 0;
// /// <summary>
// /// مبلغ اجاره با احتساب تشویقی
// /// </summary>
// public long EncouragementAmount { set; get; } = 0;
// /// <summary>
// /// اگر برای واحدهای خاصی بود
// /// </summary>
// public virtual List<Guid>? UnitIds { set; get; }
// public virtual List<string>? UnitNames { set; get; }
// }
//}

View File

@@ -0,0 +1,119 @@
//using AutoMapper;
//using Complex.Application.Services.Transaction;
//using Complex.Application.Utility;
//using Complex.Common.Dto;
//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.Charge
//{
// public class CostService
// {
// private readonly IComplexDBContext _complexDBContext;
// private readonly IMapper _mapper;
// public CostService(IComplexDBContext complexDBContext, IMapper mapper)
// {
// _complexDBContext = complexDBContext;
// _mapper = mapper;
// }
// public ResultDto DefineUnitCharge(Guid unitId, Guid costCycleId)
// {
// var cycle = _complexDBContext.CostCycles.Where(c => c.Id == costCycleId).FirstOrDefault();
// var currentDate = DateTime.Now;
// ///ایتم هایی که برای بعد از این تاریخ هست باید حذف شوند و مجدد محاسبه شوند
// ///اما ایتم هایی که هم تاریخ مدیریت شارژ و هم تاریخ امروز به بعد
// ///البته در مدیریت شارژ تعریفی نباید اجازه داد تاریخ شروع از آن روز به قبل باشد
// var itemsForDelete = _complexDBContext.UnitCosts.Where(t =>
// t.CostCycleId == costCycleId &&
// t.UnitId == unitId && t.Date >= currentDate && !t.TransactionId.HasValue);
// //اگر شارژ باشد فقط یک بار در ماه هست اما غیر از ان به هر هزینه تعریفی میتواند
// //که در ماه میتواند چندین هزینه تعریف کند
// //اگر برای شارژ باشد
// //if (!cycle.IncomeCostTitleId.HasValue)
// // deleteCharges = deleteCharges.Where(t => t.ChargeCycleId == ChargeCycleId);
// //else
// //deleteCharges = deleteCharges.Where(t => t.ChargeCycleId == cycle.Id);
// _complexDBContext.UnitCosts.RemoveRange(itemsForDelete);
// //همه ماهانه هست و روز خاصی نگرفتیم برای اصل و پرداخت نشده ها حذف شده
// //پس روز اخر ملاک هست
// while (currentDate < cycle.EndDate)
// {
// var newUC = new UnitCost
// {
// CostCycleId = costCycleId,
// UnitId = unitId,
// Date = currentDate,
// TransactionId = null
// };
// currentDate.AddMonths(1);
// _complexDBContext.UnitCosts.Add(newUC);
// }
// _complexDBContext.SaveChanges();
// return new ResultDto
// {
// Message = "ثبت با موفقیت انجام شد",
// IsSuccess = true,
// };
// }
// public /*ResultDto<List<long>>*/ void CalculateUnitCharge(Guid unitId, int? IncomeCostTitleId)
// {
// var currentDate = DateTime.Now;
// var unitCharges = _complexDBContext.UnitCosts.Where(uc => uc.UnitId == unitId && !uc.TransactionId.HasValue
// && uc.CostCycle.IncomeCostTitleId == IncomeCostTitleId);
// }
// //public /*ResultDto<List<long>>*/ void CalculateUnitCharge(Guid complexId, Guid unitId)
// //{
// // var CurrentMonth = PersianDate.CurrentPersianMonth;
// // var CurrentYear = PersianDate.CurrentPersianYear;
// // var currentMonthDate = PersianDate.ConvertToMiladi(CurrentYear + "/" + CurrentMonth.ToString().PadLeft(2, '0') + "/01");
// // var manageChargList = _complexDBContext.ChargeCycles.Include(m => m.UnitChargeTypes)
// // .Where(m => m.ComplexId == complexId
// // && m.StartDate <= currentMonthDate
// // && m.EndDate >= currentMonthDate).Select(m => m).ToList();
// // ///بدست اوردن ماه هایی که شارژ نداده است
// // var startChargeDate = _complexDBContext.ChargeCycles
// // .Where(m => m.ComplexId == complexId)
// // .Min(m => m.StartDate);
// // //for(var d=startChargeDate;d<=yearMonth;d.AddDays(1))
// // //{
// // //}
// // var startPersianDate = PersianDate.GetPDate(startChargeDate);
// // var endPersianDate = PersianDate.GetPDate(DateTime.Now);
// // var paymentDatelist =
// // for (int y = startPersianDate.Year; y <= endPersianDate.Year; y++)
// // {
// // for (int m = startPersianDate.Month; m <= endPersianDate.Month; m++)
// // {
// // }
// // }
// //}
// }
// public class ChargeDto
// {
// public int TransactionTitleId { get; } = 1;
// public string TransactionTitle { get; } = "شارژ";
// [MaxLength(10)]
// public string TransactionDate { set; get; }
// public long Amount { set; get; } = 0;
// public string? Description { set; get; }
// public int? ChargeTypeId { set; get; } = 1;
// public string ChargeType { set; get; } = "شارژ ماهیانه";
// public Guid? UnitId { set; get; }
// public string UnitTitle { set; get; }
// /// <summary>
// ///شماره فیش. اگر با فیش چیزی واریز شده است
// /// </summary>
// public string? FishId { set; get; }
// }
//}

View File

@@ -0,0 +1,174 @@
using AutoMapper;
using Complex.Application.Utility;
using Complex.Common.Dto;
using Complex.Domain.Entities;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Complex.Application.Complex
{
public interface IComplexService
{
ResultDto<int> InsertComplex(ComplexDto complexDto);
ResultDto<ComplexDto> EditComplex(string UserId, ComplexDto complexDto);
public ResultDto<ComplexDto> ComplexProperties(Guid Id);
public ResultDto<List<ComplexDto>> ComplexList(string PersonId);
}
public class ComplexService : IComplexService
{
private readonly IComplexDBContext _complexDBContext;
private IMapper _mapper;
public ComplexService(IComplexDBContext complexDBContext, IMapper mapper)
{
_complexDBContext = complexDBContext;
_mapper = mapper;
}
public ResultDto<ComplexDto> ComplexProperties(Guid Id)
{
var complex = _complexDBContext.ComplexEntities.Include(x => x.City).FirstOrDefault(x => x.Id == Id);
if (complex == null)
return new ResultDto<ComplexDto> { IsSuccess = false, Message = "مشخصات مجتمع یافت نشد" };
var complexDto = _mapper.Map<ComplexDto>(complex);
complexDto.CityTitle = complex.City.CityTitle;
return new ResultDto<ComplexDto> { IsSuccess = true, RowCount = 1, Data = complexDto };
}
public ResultDto<ComplexDto> EditComplex(string UserId, ComplexDto complexDto)
{
var complex = _complexDBContext.ComplexEntities.Include(c => c.ComplexManagers).FirstOrDefault(x => x.Id == complexDto.Id);
if (complex.ComplexManagers == null || !complex.ComplexManagers.Any(m => m.ManagerMobileNumberId == UserId))
return new ResultDto<ComplexDto>
{
IsSuccess = false,
Message = "عدم دسترسی"
};
complex.AreaMeter = complexDto.AreaMeter;
complex.YardMeter = complexDto.YardMeter;
complex.Address = complexDto.Address;
complex.YearMake = complexDto.YearMake;
//complex.ParentId = complexDto.ParentId;
complex.CityId = complexDto.CityId;
complex.Description = complexDto.Description;
complex.ElevatorCount = complexDto.ElevatorCount;
complex.ParentId = complexDto.ParentId;
complex.StateId = complexDto.StateId;
complex.Title = complexDto.Title;
complex.WarehouseCount = complexDto.WarehouseCount;
_complexDBContext.SaveChanges();
var result = _mapper.Map<ComplexDto>(complex);
return new ResultDto<ComplexDto>
{
Data = result,
IsSuccess = true,
Message = "ویرایش با موفقیت انجام شد"
};
}
public ResultDto<int> InsertComplex(ComplexDto complexDto)
{
throw new NotImplementedException();
}
public ResultDto<List<ComplexDto>> ComplexList(string PersonId)
{
//try
{
var today = PersianDate.GetToday();
var mangerComplexData = _complexDBContext.ComplexManagers.Include(c => c.Complex)
//.ThenInclude(c=>c.Units)
//.ThenInclude(c=>c.City)
.Where(c => (c.ManagerMobileNumberId == PersonId)
&& string.Compare(c.StartDate, today) <= 0 && string.Compare(c.EndDate, today) >= 0)
.Select(c => c.Complex)
.Where(c => c.StateId != 2);//غیرفعال شده ها نیایند
//.ToList();
//var mangerComplex = mangerComplexData.Select(c => _mapper.Map<ComplexDto>(c)).ToList();
var units = _complexDBContext.Units.ToList();
var PersonComplexData = _complexDBContext.Units.Include(c => c.Complex)
//.ThenInclude(c=>c.Units)
//.ThenInclude(c => c.City)
.Where(c => c.TenantId == PersonId || c.OwnerId == PersonId).Select(c => c.Complex)
.Where(c => c.StateId != 2);//غیرفعال شده ها نیایند
//.ToList();
var complexList = mangerComplexData.Union(PersonComplexData)
//.Include(c => c.Units);
.Select(c => new
{
complex = c,
unitCount = c.Units.Count,
managers = c.ComplexManagers.Select(m => m.ManagerMobileNumber).Select(p => p.FirstName + " " + p.LastName),
cityTitle = c.City.CityTitle
});
//.Select(c => _mapper.Map<ComplexDto>(c));
var result = new List<ComplexDto>();
foreach (var item in complexList)
{
var complexDto = _mapper.Map<ComplexDto>(item.complex);
complexDto.UnitCount = item.unitCount;
complexDto.CityTitle = item.cityTitle;
complexDto.ManagerName = String.Join(",", item.managers);
result.Add(complexDto);
}
//var PersonComplex = PersonComplexData.Select(c => _mapper.Map<ComplexDto>(c));
return new ResultDto<List<ComplexDto>>(result);
}
//catch (Exception ex)
//{
// return new ResultDto<List<ComplexDto>>
// {
// Message = ex.InnerException != null ? ex.InnerException.Message + Environment.NewLine + ex.InnerException.Data :
// ex.Message + Environment.NewLine + ex.Data,
// IsSuccess = false
// };
//}
}
}
public class ComplexDto
{
public Guid? Id { get; set; }
//public DateTime InsertTime { get; set; }
//public DateTime? UpdateTime { get; set; }
public string Title { set; get; }
public string? Address { set; get; }
/// <summary>
/// وضعیت
/// </summary>
public int? StateId { set; get; }
/// <summary>
/// متراژ کل
/// </summary>
public int? AreaMeter { set; get; }
/// <summary>
/// متراژ حیاط
/// </summary>
public int? YardMeter { set; get; }
/// <summary>
/// تعداد آسانسور
/// </summary>
public int? ElevatorCount { set; get; }
/// <summary> تعداد انباری</summary>
public int? WarehouseCount { set; get; }
public int? YearMake { set; get; }
public int CityId { set; get; }
public Guid? ParentId { set; get; }
public string? Description { set; get; }
public string? CityTitle { set; get; }
public string? ManagerName { set; get; }
public int UnitCount { set; get; }
}
}

View File

@@ -0,0 +1,92 @@
using AutoMapper;
using Complex.Application.Utility;
using Complex.Common.Dto;
using Complex.Domain.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Complex.Application.PersonService
{
public interface IPersonService
{
public ResultDto<string> InsertPerson(PersonDto person);
public ResultDto<bool> EditPerson(PersonDto person);
public ResultDto<List<PersonDto>> GetAllPersons(PersonDto personSearchObj);
}
public class PersonService : IPersonService
{
private readonly IComplexDBContext _complexDBContext;
private IMapper _mapper;
public PersonService(IComplexDBContext complexDBContext, IMapper mapper)
{
_complexDBContext = complexDBContext;
_mapper = mapper;
}
public ResultDto<List<PersonDto>> GetAllPersons(PersonDto personSearchObj)
{
var persons = _complexDBContext.ComplexPersons.Where(u => u.ComplexId == personSearchObj.ComplexId).Select(cp => cp.PersonMobileNumber);
//در تمام فیلدها با شماره تلفن میتوان جستجو کرد
if (personSearchObj.MobileNumber.IsNotNullOrEmpty())
{
persons = persons.Where(p => p.Id.Contains(personSearchObj.MobileNumber));
persons = persons.Where(p => p.FirstName.Contains(personSearchObj.MobileNumber));
persons = persons.Where(p => p.FirstName.Contains(personSearchObj.MobileNumber));
}
//if (personSearchObj.FirstName.IsNotNullOrEmpty())
// persons = persons.Where(p => p.FirstName.Contains(personSearchObj.FirstName));
//if (personSearchObj.LastName.IsNotNullOrEmpty())
// persons = persons.Where(p => p.LastName.Contains(personSearchObj.LastName));
//var persons = _complexDBContext.Units.Where(u => u.ComplexId == personSearchObj.ComplexId).Select(p => p.Tenant);
//persons = persons.Union(_complexDBContext.Units.Where(u => u.ComplexId == personSearchObj.ComplexId).Select(p => p.Owner));
//if (personSearchObj.MobileNumber.IsNotNullOrEmpty())
// persons = persons.Where(p => p.Id.Contains(personSearchObj.MobileNumber));
//var personResult = persons.Distinct().ToList();
return new ResultDto<List<PersonDto>>
{
Data = persons.Select(p => _mapper.Map<PersonDto>(p)).ToList(),
IsSuccess = true
};
}
public ResultDto<bool> EditPerson(PersonDto person)
{
throw new NotImplementedException();
}
public ResultDto<string> InsertPerson(PersonDto personDto)
{
var newPerson = _mapper.Map<Person>(personDto);
var isExist = _complexDBContext.Persons.Any(p => p.Id == personDto.MobileNumber);
if (!isExist)
{
newPerson.Id = personDto.MobileNumber;
_complexDBContext.Persons.Add(newPerson);
_complexDBContext.SaveChanges();
}
_complexDBContext.ComplexPersons.Add(new ComplexPerson
{
ComplexId = personDto.ComplexId.Value,
PersonMobileNumberId = personDto.MobileNumber,
});
return new ResultDto<string> { Data = newPerson.Id, IsSuccess = true };
}
}
public class PersonDto
{
public Guid? ComplexId { set; get; }
public string? MobileNumber { set; get; }
public string? FirstName { get; set; }
public string? LastName { get; set; }
public byte? Gender { set; get; }
//public int? MobileCode { set; get; }
public byte[]? Avatar { set; get; }
}
}

View File

@@ -0,0 +1,170 @@
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Complex.Domain.Entities;
namespace Complex.Application.PersonService
{
public interface ISiteAccountlService
{
Person FindUserWithPhonenumber(string phoneNumber);
string GetCode(string PhoneNumber);
Person GetUser(string mobileNumber);
LoginDto Login(string phoneNumber, string Code);
void Logout(string mobileNumber);
Person RegisterUser(string PhoneNumber);
}
public class SiteAccountlService : ISiteAccountlService
//: IPortalService
{
// ==============================
private IComplexDBContext _complexDBContext;
// ==============================
public SiteAccountlService(IComplexDBContext complexDBContext)
{
_complexDBContext = complexDBContext;
}
// ==============================
public Person GetUser(string mobileNumber)
{
var user = _complexDBContext.Persons.SingleOrDefault(p => p.Id == mobileNumber);
return user;
}
public string GetCode(string PhoneNumber)
{
Random random = new Random();
string code = random.Next(1000, 9999).ToString();
SmsCode smsCode = new SmsCode()
{
Code = code,
InsertDate = DateTime.Now,
PhoneNumber = PhoneNumber,
RequestCount = 0,
Used = false,
};
_complexDBContext.Add(smsCode);
_complexDBContext.SaveChanges();
return code;
}
public LoginDto Login(string phoneNumber, string Code)
{
var user = FindUserWithPhonenumber("09192530212");
if (user != null)
{
return new LoginDto
{
IsSuccess = true,
Person = user,
};
}
var smsCode = _complexDBContext.SmsCodes.Where(p => p.PhoneNumber == phoneNumber
&& p.Code == Code).FirstOrDefault();
if (smsCode == null)
{
return new LoginDto
{
IsSuccess = false,
Message = "کد وارد شده صحیح نیست!",
};
}
else
{
if (smsCode.Used == true)
{
return new LoginDto
{
IsSuccess = false,
Message = "کد وارد شده صحیح نیست!",
};
}
////
///
smsCode.RequestCount++;
smsCode.Used = true;
_complexDBContext.SaveChanges();
user = FindUserWithPhonenumber(phoneNumber);
if (user != null)
{
return new LoginDto
{
IsSuccess = true,
Person = user,
};
}
else
{
user = RegisterUser(phoneNumber);
return new LoginDto
{
IsSuccess = true,
Person = user,
};
}
}
}
public Person FindUserWithPhonenumber(string phoneNumber)
{
var user = _complexDBContext.Persons.SingleOrDefault(p => p.Id.Equals(phoneNumber));
return user;
}
public Person RegisterUser(string PhoneNumber)
{
Person user = new Person()
{
Id = PhoneNumber,
IsActive = true,
};
return user;
}
public void Logout(string mobileNumber)
{
var userToken = _complexDBContext.UserTokens.Where(p => p.PersonId/*همان موبایل*/ == mobileNumber).ToList();
_complexDBContext.UserTokens.RemoveRange(userToken);
_complexDBContext.SaveChanges();
}
}
public class LoginDto
{
public bool IsSuccess { get; set; }
public string Message { get; set; }
public Person Person { get; set; }
}
public class LoginDataDto
{
public string Token { get; set; }
public string RefreshToken { get; set; }
}
public class LoginResultDto
{
public bool IsSuccess { get; set; }
public string Message { get; set; }
public LoginDataDto Data { get; set; }
}
//public class PersonDto
//{
// public long PersonId { get; set; }
// public string FirstName { get; set; }
// public string LastName { get; set; }
// public string Mobile { get; set; }
// public bool? IsActive { get; set; }
//}
}

View File

@@ -0,0 +1,60 @@
using Complex.Domain.Entities;
using Microsoft.EntityFrameworkCore;
namespace Complex.Application.PersonService
{
public interface IUserTokenService
{
bool CheckExistToken(string Token);
void DeleteToken(string RefreshToken);
UserToken FindRefreshToken(string RefreshToken);
void SaveToken(UserToken userToken);
}
public class UserTokenService : IUserTokenService
{
private IComplexDBContext _complexDBContext;
public UserTokenService(IComplexDBContext complexDBContext)
{
_complexDBContext = complexDBContext;
}
public void SaveToken(UserToken userToken)
{
_complexDBContext.UserTokens.Add(userToken);
_complexDBContext.SaveChanges();
}
public UserToken FindRefreshToken(string RefreshToken)
{
//SecurityHelper securityHelper = new SecurityHelper();
string RefreshTokenHash = RefreshToken;
//string RefreshTokenHash = securityHelper.Getsha256Hash(RefreshToken);
var usertoken = _complexDBContext.UserTokens.Include(p => p.Person)
.SingleOrDefault(p => p.RefreshToken == RefreshTokenHash);
return usertoken;
}
public void DeleteToken(string RefreshToken)
{
var token = FindRefreshToken(RefreshToken);
if (token != null)
{
_complexDBContext.UserTokens.Remove(token);
_complexDBContext.SaveChanges();
}
}
public bool CheckExistToken(string Token)
{
//SecurityHelper securityHelper = new SecurityHelper();
string tokenHash = Token; //securityHelper.Getsha256Hash(Token);
var userToken = _complexDBContext.UserTokens.Where(p => p.TokenHash == tokenHash).FirstOrDefault();
return userToken == null ? false : true;
}
}
}

View File

@@ -0,0 +1,159 @@
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<List<TransactionDto>> 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<List<TransactionDto>>
{
Data = result,
IsSuccess = true,
};
}
public ResultDto PayCosts(List<long> 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; }
/// <summary>
/// مقدار شارژ پرداخت نشده
/// </summary>
public int ChargeNoPayAmount { get; set; }
/// <summary>
/// تعداد شارژ پرداخت نشده
/// </summary>
public int ChargeNoPayCount { get; set; }
/// <summary>
/// مقدار پرداخت نشده غیر شارژ
/// </summary>
public int OtherNoPayAmount { get; set; }
/// <summary>
/// میزان پرداخت کرده
/// </summary>
public long PayAmountInYear { set; get; }
/// <summary>
/// تعداد شارژ پرداخت شده
/// </summary>
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; }
}
*/
}

View File

@@ -0,0 +1,278 @@
using AutoMapper;
using Complex.Application.Services.Basic;
using Complex.Application.Utility;
using Complex.Common.Dto;
using Complex.Domain.Entities;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Numerics;
using System.Text;
using System.Threading.Tasks;
namespace Complex.Application.Complex
{
public interface IUnitService
{
/// <summary>
/// ثبت توسط مدیر ساختمان
/// </summary>
/// <param name="unitDto"></param>
/// <returns></returns>
ResultDto<Guid> InsertUnit(string adminUserId, UnitDto unitDto);
/// <summary>
/// ویرایش توسط مدیر ساختمان
/// </summary>
/// <param name="unitDto"></param>
/// <returns></returns>
ResultDto<bool> AdminEditUnit(string adminUserId, UnitDto unitDto);
/// <summary>
/// ویرایش توسط مالک
/// </summary>
/// <param name="unitDto"></param>
/// <returns></returns>
ResultDto<bool> OwnerEditUnit(string UserId, UnitDto unitDto);
/// <summary>
/// ویرایش توسط مستاجر
/// </summary>
/// <param name="unitDto"></param>
/// <returns></returns>
ResultDto<bool> TenantEditUnit(string UserId, UnitDto unitDto);
ResultDto<List<UnitDto>> UnitList(string userId, UnitRequestList unitRequest);
}
public class UnitService : IUnitService
{
private readonly IComplexDBContext _complexDBContext;
private readonly CostService _costService;
private IMapper _mapper;
public UnitService(IComplexDBContext complexDBContext, IMapper mapper, CostService costService)
{
_complexDBContext = complexDBContext;
_costService = costService;
_mapper = mapper;
}
public ResultDto<List<UnitDto>> UnitList(string userId, UnitRequestList unitRequest)
{
var today = PersianDate.GetToday();
var IsUserInComplex = _complexDBContext.Units.Where(u => u.ComplexId == unitRequest.ComplexId
&& (u.OwnerId == userId || u.TenantId == userId))
.Select(a => a.ComplexId)
.Union(_complexDBContext.ComplexManagers.Where(cm => cm.ComplexId == unitRequest.ComplexId
&& string.Compare(cm.EndDate, today) >= 0
&& string.Compare(cm.StartDate, today) <= 0)
.Where(u => u.ManagerMobileNumberId == userId)
.Select(u => u.ComplexId));
if (IsUserInComplex.Count() == 0)
return new ResultDto<List<UnitDto>>
{
Data = null,
IsSuccess = false,
Message = "درخواست نامعتبر"
};
var units = from u in _complexDBContext.Units.Include(u => u.Owner).Include(u => u.Tenant)
.Include(u => u.State)
where u.ComplexId == unitRequest.ComplexId
select u;
if (unitRequest.Id.HasValue)
units = units.Where(u => u.Id == unitRequest.Id);
if (unitRequest.OwnerId.IsNotNullOrEmpty())
units = units.Where(u => u.OwnerId == unitRequest.OwnerId);
if (unitRequest.TenantId.IsNotNullOrEmpty())
units = units.Where(u => u.TenantId == unitRequest.TenantId);
var unitObjs = units.ToList().Select(u => new UnitDto
{
ComplexId = u.ComplexId,
UnitName = u.UnitName,
Id = u.Id,
AreaMeter = u.AreaMeter,
TenantId = u.TenantId,
EmergencyTels = u.EmergencyTels,
Floor = u.Floor,
InsertTime = Convert.ToDateTime(_complexDBContext.Entry(u).Property("InsertTime").CurrentValue),
UpdateTime = Convert.ToDateTime(_complexDBContext.Entry(u).Property("UpdateTime").CurrentValue),
//InsertTime = u.InsertTime,
IsActive = u.IsActive,
ManagerDescription = u.ManagerDescription,
ParkingAreaMeter = u.ParkingAreaMeter,
PublicState = u.PublicState,
StateTitle = u.StateId.HasValue ? u.State.Title : "",
StateId = u.StateId,
YardMeter = u.YardMeter,
TenantNameFamily = u.TenantId != null ? u.Tenant.FirstName + " " + u.Tenant.LastName : "",
OwnerNameFamily = u.OwnerId != null ? u.Owner.FirstName + " " + u.Owner.LastName : "",
OwnerId = u.OwnerId,
});
try
{
return new ResultDto<List<UnitDto>>
{
Data = unitObjs.ToList(),
IsSuccess = true,
//RowCount =
};
}
catch (Exception ex)
{
return new ResultDto<List<UnitDto>>
{
Message = ex.InnerException != null ? ex.InnerException.Message + Environment.NewLine + ex.InnerException.Data :
ex.Message + Environment.NewLine + ex.Data,
IsSuccess = false
};
}
}
public ResultDto<Guid> InsertUnit(string adminUserId, UnitDto unitDto)
{
var unit = _mapper.Map<Unit>(unitDto);
var complexManager = _complexDBContext.ComplexManagers.Where(c => c.ComplexId == unit.ComplexId)
.Select(cm => cm.ManagerMobileNumberId).ToList();
if (!complexManager.Any(m => m == adminUserId))
return new ResultDto<Guid>
{
Message = "عدم دسترسی",
IsSuccess = false
};
//unit.InsertTime = DateTime.Now;
_complexDBContext.Units.Add(unit);
_complexDBContext.SaveChanges();
//محاسبه شارژهای اون یونیت
var nowDate = DateOnly.FromDateTime(DateTime.Now);
//وقتی واحد تازه ثبت شده پس در مدیریت شارژ قابلیت ثبت اختصاصی برای خودش نداشته پس باید شارژ عمومی برایش تعریف شود
// اگر خواست میتواند برایش به صورت اختصاصی هم ثبت کند که اون موقع برایش محاسبه مجدد خواهد شد
var costCycleDto = _costService.CostCyclsList(unit.ComplexId, nowDate, nowDate, null).Data
.FirstOrDefault(c => c.UnitIds == null);
if (costCycleDto != null)
{
//var costCycle = new CostCycle
//{
// Amount=costCycleDto.Amount,
//};
var costCycle=_mapper.Map<CostCycle>(costCycleDto);
_costService.DefineUnitCharge(unit.Id, costCycle, true);
}
//
return new ResultDto<Guid> { Data = unit.Id, IsSuccess = true, Message = "ثبت با موفقیت انجام شد" };
}
public ResultDto<bool> AdminEditUnit(string adminUserId, UnitDto unitDto)
{
var unit = _complexDBContext.Units.Include(u => u.Complex).ThenInclude(c => c.ComplexManagers).FirstOrDefault(u => u.Id == unitDto.Id);
if (unit == null)
return new ResultDto<bool> { Message = "مشکل در یافتن واحد", IsSuccess = false };
var today = PersianDate.GetToday();
var complex = unit.Complex;
if (complex.ComplexManagers == null || !complex.ComplexManagers.Any(m => m.ManagerMobileNumberId == adminUserId
&& string.Compare(m.EndDate, today) >= 0))
return new ResultDto<bool> { Message = "عدم دسترسی", IsSuccess = false };
var oldUnitState = unit.PublicState;
unit = _mapper.Map<Unit>(unitDto);
unit.PublicState = oldUnitState;
_complexDBContext.SaveChanges();
//oldPayment را باید چه کار کرد؟؟؟؟!!!!!!!!!!!!!!!!!!!!!!!!!!
return new ResultDto<bool> { Message = "ویرایش با موفقیت انجام شد", IsSuccess = true };
}
public ResultDto<bool> OwnerEditUnit(string UserId, UnitDto unitDto)
{
var unit = _complexDBContext.Units.FirstOrDefault(u => u.Id == unitDto.Id);
if (unit == null)
return new ResultDto<bool> { Message = "مشکل در یافتن واحد", IsSuccess = false };
if (unit.OwnerId != UserId)
return new ResultDto<bool> { Message = "عدم دسترسی", IsSuccess = false };
unit.AreaMeter = unitDto.AreaMeter;
unit.YardMeter = unitDto.YardMeter;
unit.ParkingAreaMeter = unitDto.ParkingAreaMeter;
unit.EmergencyTels = unitDto.EmergencyTels;
unit.Floor = unitDto.Floor;
unit.ParkingAreaMeter = unitDto.ParkingAreaMeter;
unit.PublicState = unitDto.PublicState;
unit.YardMeter = unitDto.YardMeter;
_complexDBContext.SaveChanges();
return new ResultDto<bool> { Message = "ویرایش با موفقیت انجام شد", IsSuccess = true };
}
public ResultDto<bool> TenantEditUnit(string UserId, UnitDto unitDto)
{
var unit = _complexDBContext.Units.FirstOrDefault(u => u.Id == unitDto.Id);
if (unit == null)
return new ResultDto<bool> { Message = "مشکل در یافتن واحد", IsSuccess = false };
if (unit.TenantId != UserId)
return new ResultDto<bool> { Message = "عدم دسترسی", IsSuccess = false };
unit.PublicState = unitDto.PublicState;
_complexDBContext.SaveChanges();
return new ResultDto<bool> { Message = "ویرایش با موفقیت انجام شد", IsSuccess = true };
}
}
public class UnitRequestList
{
public Guid? Id { set; get; }
public Guid ComplexId { set; get; }
public string? OwnerId { set; get; }
public string? TenantId { set; get; }
}
public class UnitDto
{
public Guid Id { get; set; }
public Guid ComplexId { set; get; }
public string UnitName { set; get; }
public ComplexEntity Complex { set; get; }
/// <summary>
/// ساکن
/// </summary>
public string? OwnerId { set; get; }
/// <summary>
/// شماره مستاجر
/// </summary>
public string? TenantId { set; get; }
public bool IsActive { set; get; }
/// <summary>
/// متراژ کل
/// </summary>
public int? AreaMeter { set; get; }
public string? EmergencyTels { set; get; }
public int? ParkingAreaMeter { set; get; }
/// <summary>
/// متراژ حیاط
/// </summary>
public int? YardMeter { set; get; }
public string? PublicState { set; get; }
public int? StateId { set; get; }
public string StateTitle { set; get; }
public int? Floor { set; get; }
//public string? UnitId { set; get; }
public string? ManagerDescription { set; get; }
//-----------------------------------------
/// <summary>
/// نام و نام خانوادگی مالک
/// </summary>
public string OwnerNameFamily { set; get; }
/// <summary>
/// نام و نام خانوادگی مستاجر
/// </summary>
public string TenantNameFamily { set; get; }
//public string StateByManager { set; get; }
public DateTime? InsertTime { get; set; }
public DateTime? UpdateTime { get; set; }
}
}

View File

@@ -0,0 +1,16 @@
//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
//using System.Threading.Tasks;
//namespace Complex.Application.Services
//{
// public class UserSecurityService
// {
// public void CheckComplexManager(string ManagerId,Guid ComplexId)
// {
// }
// }
//}

View File

@@ -0,0 +1,50 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
namespace Complex.Application.Services.Utility
{
public interface ISendUserMessage
{
Task<Response<SendData>> Send(object message, string[] MobileNumber);
Task<Response<SendData>> SendPattern(string patternCode, string MobileNumber, object values);
}
public class Response<T> where T : Data
{
public string status { get; set; }
public string code { get; set; }
public string message { get; set; }
public T data { get; set; }
public override string ToString()
{
return JsonSerializer.Serialize(this);
}
public bool IsSuccessful
{
get
{
return data != null && data.error == null;
}
}
}
public class Data
{
public string error { get; set; }
}
public class SendResponse : Response<SendData>
{
}
public class SendData : Data
{
public string bulk_id { get; set; }
}
}

View File

@@ -0,0 +1,326 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v6.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v6.0": {
"Complex.Application/1.0.0": {
"dependencies": {
"AutoMapper": "11.0.1",
"Complex.Domain": "1.0.0",
"Microsoft.EntityFrameworkCore": "6.0.3",
"Newtonsoft.Json": "13.0.1",
"System.Linq.Dynamic.Core": "1.6.7"
},
"runtime": {
"Complex.Application.dll": {}
}
},
"AutoMapper/11.0.1": {
"dependencies": {
"Microsoft.CSharp": "4.7.0"
},
"runtime": {
"lib/netstandard2.1/AutoMapper.dll": {
"assemblyVersion": "11.0.0.0",
"fileVersion": "11.0.1.0"
}
}
},
"Microsoft.CSharp/4.7.0": {},
"Microsoft.EntityFrameworkCore/6.0.3": {
"dependencies": {
"Microsoft.EntityFrameworkCore.Abstractions": "6.0.3",
"Microsoft.EntityFrameworkCore.Analyzers": "6.0.3",
"Microsoft.Extensions.Caching.Memory": "6.0.1",
"Microsoft.Extensions.DependencyInjection": "6.0.0",
"Microsoft.Extensions.Logging": "6.0.0",
"System.Collections.Immutable": "6.0.0",
"System.Diagnostics.DiagnosticSource": "6.0.0"
},
"runtime": {
"lib/net6.0/Microsoft.EntityFrameworkCore.dll": {
"assemblyVersion": "6.0.3.0",
"fileVersion": "6.0.322.12306"
}
}
},
"Microsoft.EntityFrameworkCore.Abstractions/6.0.3": {
"runtime": {
"lib/net6.0/Microsoft.EntityFrameworkCore.Abstractions.dll": {
"assemblyVersion": "6.0.3.0",
"fileVersion": "6.0.322.12306"
}
}
},
"Microsoft.EntityFrameworkCore.Analyzers/6.0.3": {},
"Microsoft.Extensions.Caching.Abstractions/6.0.0": {
"dependencies": {
"Microsoft.Extensions.Primitives": "6.0.0"
},
"runtime": {
"lib/netstandard2.0/Microsoft.Extensions.Caching.Abstractions.dll": {
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.21.52210"
}
}
},
"Microsoft.Extensions.Caching.Memory/6.0.1": {
"dependencies": {
"Microsoft.Extensions.Caching.Abstractions": "6.0.0",
"Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0",
"Microsoft.Extensions.Logging.Abstractions": "6.0.0",
"Microsoft.Extensions.Options": "6.0.0",
"Microsoft.Extensions.Primitives": "6.0.0"
},
"runtime": {
"lib/netstandard2.0/Microsoft.Extensions.Caching.Memory.dll": {
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.222.6406"
}
}
},
"Microsoft.Extensions.DependencyInjection/6.0.0": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0",
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
},
"runtime": {
"lib/net6.0/Microsoft.Extensions.DependencyInjection.dll": {
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.21.52210"
}
}
},
"Microsoft.Extensions.DependencyInjection.Abstractions/6.0.0": {
"runtime": {
"lib/net6.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.21.52210"
}
}
},
"Microsoft.Extensions.Logging/6.0.0": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection": "6.0.0",
"Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0",
"Microsoft.Extensions.Logging.Abstractions": "6.0.0",
"Microsoft.Extensions.Options": "6.0.0",
"System.Diagnostics.DiagnosticSource": "6.0.0"
},
"runtime": {
"lib/netstandard2.1/Microsoft.Extensions.Logging.dll": {
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.21.52210"
}
}
},
"Microsoft.Extensions.Logging.Abstractions/6.0.0": {
"runtime": {
"lib/net6.0/Microsoft.Extensions.Logging.Abstractions.dll": {
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.21.52210"
}
}
},
"Microsoft.Extensions.Options/6.0.0": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0",
"Microsoft.Extensions.Primitives": "6.0.0"
},
"runtime": {
"lib/netstandard2.1/Microsoft.Extensions.Options.dll": {
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.21.52210"
}
}
},
"Microsoft.Extensions.Primitives/6.0.0": {
"dependencies": {
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
},
"runtime": {
"lib/net6.0/Microsoft.Extensions.Primitives.dll": {
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.21.52210"
}
}
},
"Newtonsoft.Json/13.0.1": {
"runtime": {
"lib/netstandard2.0/Newtonsoft.Json.dll": {
"assemblyVersion": "13.0.0.0",
"fileVersion": "13.0.1.25517"
}
}
},
"System.Collections.Immutable/6.0.0": {
"dependencies": {
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
}
},
"System.Diagnostics.DiagnosticSource/6.0.0": {
"dependencies": {
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
}
},
"System.Linq.Dynamic.Core/1.6.7": {
"runtime": {
"lib/net6.0/System.Linq.Dynamic.Core.dll": {
"assemblyVersion": "1.6.7.0",
"fileVersion": "1.6.7.0"
}
}
},
"System.Runtime.CompilerServices.Unsafe/6.0.0": {},
"Complex.Domain/1.0.0": {
"runtime": {
"Complex.Domain.dll": {
"assemblyVersion": "1.0.0",
"fileVersion": "1.0.0.0"
}
}
}
}
},
"libraries": {
"Complex.Application/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"AutoMapper/11.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-WIadGC1pIwbnyTubvI577p3F++Bsj9q2Q3OaAc1I0QS+JhupN1xkdrPBhI9bPIeg63zM81tZplUNYkqU1HE5jQ==",
"path": "automapper/11.0.1",
"hashPath": "automapper.11.0.1.nupkg.sha512"
},
"Microsoft.CSharp/4.7.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==",
"path": "microsoft.csharp/4.7.0",
"hashPath": "microsoft.csharp.4.7.0.nupkg.sha512"
},
"Microsoft.EntityFrameworkCore/6.0.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-f7ZlNOI1wPg/r0zRgvmcLAM3kwuCVGe5cZc8rYoKPDGZs5dgRFe5a43H9FnCXsyFAF6FILB08Nr9RkuNMwd3TQ==",
"path": "microsoft.entityframeworkcore/6.0.3",
"hashPath": "microsoft.entityframeworkcore.6.0.3.nupkg.sha512"
},
"Microsoft.EntityFrameworkCore.Abstractions/6.0.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-7c6wJtTFj7FDe20IVPDKeCzxWIMu+XDpYi7aYuUo6knu4vDeB3N3F0pjAZgXJ96GwTZYBrjOEwnbpYmfapEz/w==",
"path": "microsoft.entityframeworkcore.abstractions/6.0.3",
"hashPath": "microsoft.entityframeworkcore.abstractions.6.0.3.nupkg.sha512"
},
"Microsoft.EntityFrameworkCore.Analyzers/6.0.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Ld9HyVABYor3Tq43/sG2JERL94UnDHJPg5PwpkCW4CWsf/CbxHetdecv+bCXA/Hg4q+44sov0GVl4Ywjk4PnyA==",
"path": "microsoft.entityframeworkcore.analyzers/6.0.3",
"hashPath": "microsoft.entityframeworkcore.analyzers.6.0.3.nupkg.sha512"
},
"Microsoft.Extensions.Caching.Abstractions/6.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-bcz5sSFJbganH0+YrfvIjJDIcKNW7TL07C4d1eTmXy/wOt52iz4LVogJb6pazs7W0+74j0YpXFErvp++Aq5Bsw==",
"path": "microsoft.extensions.caching.abstractions/6.0.0",
"hashPath": "microsoft.extensions.caching.abstractions.6.0.0.nupkg.sha512"
},
"Microsoft.Extensions.Caching.Memory/6.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-B4y+Cev05eMcjf1na0v9gza6GUtahXbtY1JCypIgx3B4Ea/KAgsWyXEmW4q6zMbmTMtKzmPVk09rvFJirvMwTg==",
"path": "microsoft.extensions.caching.memory/6.0.1",
"hashPath": "microsoft.extensions.caching.memory.6.0.1.nupkg.sha512"
},
"Microsoft.Extensions.DependencyInjection/6.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-k6PWQMuoBDGGHOQTtyois2u4AwyVcIwL2LaSLlTZQm2CYcJ1pxbt6jfAnpWmzENA/wfrYRI/X9DTLoUkE4AsLw==",
"path": "microsoft.extensions.dependencyinjection/6.0.0",
"hashPath": "microsoft.extensions.dependencyinjection.6.0.0.nupkg.sha512"
},
"Microsoft.Extensions.DependencyInjection.Abstractions/6.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-xlzi2IYREJH3/m6+lUrQlujzX8wDitm4QGnUu6kUXTQAWPuZY8i+ticFJbzfqaetLA6KR/rO6Ew/HuYD+bxifg==",
"path": "microsoft.extensions.dependencyinjection.abstractions/6.0.0",
"hashPath": "microsoft.extensions.dependencyinjection.abstractions.6.0.0.nupkg.sha512"
},
"Microsoft.Extensions.Logging/6.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-eIbyj40QDg1NDz0HBW0S5f3wrLVnKWnDJ/JtZ+yJDFnDj90VoPuoPmFkeaXrtu+0cKm5GRAwoDf+dBWXK0TUdg==",
"path": "microsoft.extensions.logging/6.0.0",
"hashPath": "microsoft.extensions.logging.6.0.0.nupkg.sha512"
},
"Microsoft.Extensions.Logging.Abstractions/6.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-/HggWBbTwy8TgebGSX5DBZ24ndhzi93sHUBDvP1IxbZD7FDokYzdAr6+vbWGjw2XAfR2EJ1sfKUotpjHnFWPxA==",
"path": "microsoft.extensions.logging.abstractions/6.0.0",
"hashPath": "microsoft.extensions.logging.abstractions.6.0.0.nupkg.sha512"
},
"Microsoft.Extensions.Options/6.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-dzXN0+V1AyjOe2xcJ86Qbo233KHuLEY0njf/P2Kw8SfJU+d45HNS2ctJdnEnrWbM9Ye2eFgaC5Mj9otRMU6IsQ==",
"path": "microsoft.extensions.options/6.0.0",
"hashPath": "microsoft.extensions.options.6.0.0.nupkg.sha512"
},
"Microsoft.Extensions.Primitives/6.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-9+PnzmQFfEFNR9J2aDTfJGGupShHjOuGw4VUv+JB044biSHrnmCIMD+mJHmb2H7YryrfBEXDurxQ47gJZdCKNQ==",
"path": "microsoft.extensions.primitives/6.0.0",
"hashPath": "microsoft.extensions.primitives.6.0.0.nupkg.sha512"
},
"Newtonsoft.Json/13.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==",
"path": "newtonsoft.json/13.0.1",
"hashPath": "newtonsoft.json.13.0.1.nupkg.sha512"
},
"System.Collections.Immutable/6.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-l4zZJ1WU2hqpQQHXz1rvC3etVZN+2DLmQMO79FhOTZHMn8tDRr+WU287sbomD0BETlmKDn0ygUgVy9k5xkkJdA==",
"path": "system.collections.immutable/6.0.0",
"hashPath": "system.collections.immutable.6.0.0.nupkg.sha512"
},
"System.Diagnostics.DiagnosticSource/6.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-frQDfv0rl209cKm1lnwTgFPzNigy2EKk1BS3uAvHvlBVKe5cymGyHO+Sj+NLv5VF/AhHsqPIUUwya5oV4CHMUw==",
"path": "system.diagnostics.diagnosticsource/6.0.0",
"hashPath": "system.diagnostics.diagnosticsource.6.0.0.nupkg.sha512"
},
"System.Linq.Dynamic.Core/1.6.7": {
"type": "package",
"serviceable": true,
"sha512": "sha512-lH+YgtovXbxD6JImHl2VXUtXRUvN8BMEZB2ReZNvS+J5GnGGZV9ivxslQ2nJWmKlBjFTReAKsevnQKE4yLP2pA==",
"path": "system.linq.dynamic.core/1.6.7",
"hashPath": "system.linq.dynamic.core.1.6.7.nupkg.sha512"
},
"System.Runtime.CompilerServices.Unsafe/6.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==",
"path": "system.runtime.compilerservices.unsafe/6.0.0",
"hashPath": "system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512"
},
"Complex.Domain/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
}
}
}

View File

@@ -0,0 +1,323 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v6.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v6.0": {
"Complex.Application/1.0.0": {
"dependencies": {
"AutoMapper": "11.0.1",
"Complex.Domain": "1.0.0",
"Microsoft.EntityFrameworkCore": "6.0.3",
"Newtonsoft.Json": "13.0.1",
"System.Linq.Dynamic.Core": "1.2.18"
},
"runtime": {
"Complex.Application.dll": {}
}
},
"AutoMapper/11.0.1": {
"dependencies": {
"Microsoft.CSharp": "4.7.0"
},
"runtime": {
"lib/netstandard2.1/AutoMapper.dll": {
"assemblyVersion": "11.0.0.0",
"fileVersion": "11.0.1.0"
}
}
},
"Microsoft.CSharp/4.7.0": {},
"Microsoft.EntityFrameworkCore/6.0.3": {
"dependencies": {
"Microsoft.EntityFrameworkCore.Abstractions": "6.0.3",
"Microsoft.EntityFrameworkCore.Analyzers": "6.0.3",
"Microsoft.Extensions.Caching.Memory": "6.0.1",
"Microsoft.Extensions.DependencyInjection": "6.0.0",
"Microsoft.Extensions.Logging": "6.0.0",
"System.Collections.Immutable": "6.0.0",
"System.Diagnostics.DiagnosticSource": "6.0.0"
},
"runtime": {
"lib/net6.0/Microsoft.EntityFrameworkCore.dll": {
"assemblyVersion": "6.0.3.0",
"fileVersion": "6.0.322.12306"
}
}
},
"Microsoft.EntityFrameworkCore.Abstractions/6.0.3": {
"runtime": {
"lib/net6.0/Microsoft.EntityFrameworkCore.Abstractions.dll": {
"assemblyVersion": "6.0.3.0",
"fileVersion": "6.0.322.12306"
}
}
},
"Microsoft.EntityFrameworkCore.Analyzers/6.0.3": {},
"Microsoft.Extensions.Caching.Abstractions/6.0.0": {
"dependencies": {
"Microsoft.Extensions.Primitives": "6.0.0"
},
"runtime": {
"lib/netstandard2.0/Microsoft.Extensions.Caching.Abstractions.dll": {
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.21.52210"
}
}
},
"Microsoft.Extensions.Caching.Memory/6.0.1": {
"dependencies": {
"Microsoft.Extensions.Caching.Abstractions": "6.0.0",
"Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0",
"Microsoft.Extensions.Logging.Abstractions": "6.0.0",
"Microsoft.Extensions.Options": "6.0.0",
"Microsoft.Extensions.Primitives": "6.0.0"
},
"runtime": {
"lib/netstandard2.0/Microsoft.Extensions.Caching.Memory.dll": {
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.222.6406"
}
}
},
"Microsoft.Extensions.DependencyInjection/6.0.0": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0",
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
},
"runtime": {
"lib/net6.0/Microsoft.Extensions.DependencyInjection.dll": {
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.21.52210"
}
}
},
"Microsoft.Extensions.DependencyInjection.Abstractions/6.0.0": {
"runtime": {
"lib/net6.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.21.52210"
}
}
},
"Microsoft.Extensions.Logging/6.0.0": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection": "6.0.0",
"Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0",
"Microsoft.Extensions.Logging.Abstractions": "6.0.0",
"Microsoft.Extensions.Options": "6.0.0",
"System.Diagnostics.DiagnosticSource": "6.0.0"
},
"runtime": {
"lib/netstandard2.1/Microsoft.Extensions.Logging.dll": {
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.21.52210"
}
}
},
"Microsoft.Extensions.Logging.Abstractions/6.0.0": {
"runtime": {
"lib/net6.0/Microsoft.Extensions.Logging.Abstractions.dll": {
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.21.52210"
}
}
},
"Microsoft.Extensions.Options/6.0.0": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0",
"Microsoft.Extensions.Primitives": "6.0.0"
},
"runtime": {
"lib/netstandard2.1/Microsoft.Extensions.Options.dll": {
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.21.52210"
}
}
},
"Microsoft.Extensions.Primitives/6.0.0": {
"dependencies": {
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
},
"runtime": {
"lib/net6.0/Microsoft.Extensions.Primitives.dll": {
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.21.52210"
}
}
},
"Newtonsoft.Json/13.0.1": {
"runtime": {
"lib/netstandard2.0/Newtonsoft.Json.dll": {
"assemblyVersion": "13.0.0.0",
"fileVersion": "13.0.1.25517"
}
}
},
"System.Collections.Immutable/6.0.0": {
"dependencies": {
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
}
},
"System.Diagnostics.DiagnosticSource/6.0.0": {
"dependencies": {
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
}
},
"System.Linq.Dynamic.Core/1.2.18": {
"runtime": {
"lib/net6.0/System.Linq.Dynamic.Core.dll": {
"assemblyVersion": "1.2.18.0",
"fileVersion": "1.2.18.0"
}
}
},
"System.Runtime.CompilerServices.Unsafe/6.0.0": {},
"Complex.Domain/1.0.0": {
"runtime": {
"Complex.Domain.dll": {}
}
}
}
},
"libraries": {
"Complex.Application/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"AutoMapper/11.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-WIadGC1pIwbnyTubvI577p3F++Bsj9q2Q3OaAc1I0QS+JhupN1xkdrPBhI9bPIeg63zM81tZplUNYkqU1HE5jQ==",
"path": "automapper/11.0.1",
"hashPath": "automapper.11.0.1.nupkg.sha512"
},
"Microsoft.CSharp/4.7.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==",
"path": "microsoft.csharp/4.7.0",
"hashPath": "microsoft.csharp.4.7.0.nupkg.sha512"
},
"Microsoft.EntityFrameworkCore/6.0.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-f7ZlNOI1wPg/r0zRgvmcLAM3kwuCVGe5cZc8rYoKPDGZs5dgRFe5a43H9FnCXsyFAF6FILB08Nr9RkuNMwd3TQ==",
"path": "microsoft.entityframeworkcore/6.0.3",
"hashPath": "microsoft.entityframeworkcore.6.0.3.nupkg.sha512"
},
"Microsoft.EntityFrameworkCore.Abstractions/6.0.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-7c6wJtTFj7FDe20IVPDKeCzxWIMu+XDpYi7aYuUo6knu4vDeB3N3F0pjAZgXJ96GwTZYBrjOEwnbpYmfapEz/w==",
"path": "microsoft.entityframeworkcore.abstractions/6.0.3",
"hashPath": "microsoft.entityframeworkcore.abstractions.6.0.3.nupkg.sha512"
},
"Microsoft.EntityFrameworkCore.Analyzers/6.0.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Ld9HyVABYor3Tq43/sG2JERL94UnDHJPg5PwpkCW4CWsf/CbxHetdecv+bCXA/Hg4q+44sov0GVl4Ywjk4PnyA==",
"path": "microsoft.entityframeworkcore.analyzers/6.0.3",
"hashPath": "microsoft.entityframeworkcore.analyzers.6.0.3.nupkg.sha512"
},
"Microsoft.Extensions.Caching.Abstractions/6.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-bcz5sSFJbganH0+YrfvIjJDIcKNW7TL07C4d1eTmXy/wOt52iz4LVogJb6pazs7W0+74j0YpXFErvp++Aq5Bsw==",
"path": "microsoft.extensions.caching.abstractions/6.0.0",
"hashPath": "microsoft.extensions.caching.abstractions.6.0.0.nupkg.sha512"
},
"Microsoft.Extensions.Caching.Memory/6.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-B4y+Cev05eMcjf1na0v9gza6GUtahXbtY1JCypIgx3B4Ea/KAgsWyXEmW4q6zMbmTMtKzmPVk09rvFJirvMwTg==",
"path": "microsoft.extensions.caching.memory/6.0.1",
"hashPath": "microsoft.extensions.caching.memory.6.0.1.nupkg.sha512"
},
"Microsoft.Extensions.DependencyInjection/6.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-k6PWQMuoBDGGHOQTtyois2u4AwyVcIwL2LaSLlTZQm2CYcJ1pxbt6jfAnpWmzENA/wfrYRI/X9DTLoUkE4AsLw==",
"path": "microsoft.extensions.dependencyinjection/6.0.0",
"hashPath": "microsoft.extensions.dependencyinjection.6.0.0.nupkg.sha512"
},
"Microsoft.Extensions.DependencyInjection.Abstractions/6.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-xlzi2IYREJH3/m6+lUrQlujzX8wDitm4QGnUu6kUXTQAWPuZY8i+ticFJbzfqaetLA6KR/rO6Ew/HuYD+bxifg==",
"path": "microsoft.extensions.dependencyinjection.abstractions/6.0.0",
"hashPath": "microsoft.extensions.dependencyinjection.abstractions.6.0.0.nupkg.sha512"
},
"Microsoft.Extensions.Logging/6.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-eIbyj40QDg1NDz0HBW0S5f3wrLVnKWnDJ/JtZ+yJDFnDj90VoPuoPmFkeaXrtu+0cKm5GRAwoDf+dBWXK0TUdg==",
"path": "microsoft.extensions.logging/6.0.0",
"hashPath": "microsoft.extensions.logging.6.0.0.nupkg.sha512"
},
"Microsoft.Extensions.Logging.Abstractions/6.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-/HggWBbTwy8TgebGSX5DBZ24ndhzi93sHUBDvP1IxbZD7FDokYzdAr6+vbWGjw2XAfR2EJ1sfKUotpjHnFWPxA==",
"path": "microsoft.extensions.logging.abstractions/6.0.0",
"hashPath": "microsoft.extensions.logging.abstractions.6.0.0.nupkg.sha512"
},
"Microsoft.Extensions.Options/6.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-dzXN0+V1AyjOe2xcJ86Qbo233KHuLEY0njf/P2Kw8SfJU+d45HNS2ctJdnEnrWbM9Ye2eFgaC5Mj9otRMU6IsQ==",
"path": "microsoft.extensions.options/6.0.0",
"hashPath": "microsoft.extensions.options.6.0.0.nupkg.sha512"
},
"Microsoft.Extensions.Primitives/6.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-9+PnzmQFfEFNR9J2aDTfJGGupShHjOuGw4VUv+JB044biSHrnmCIMD+mJHmb2H7YryrfBEXDurxQ47gJZdCKNQ==",
"path": "microsoft.extensions.primitives/6.0.0",
"hashPath": "microsoft.extensions.primitives.6.0.0.nupkg.sha512"
},
"Newtonsoft.Json/13.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==",
"path": "newtonsoft.json/13.0.1",
"hashPath": "newtonsoft.json.13.0.1.nupkg.sha512"
},
"System.Collections.Immutable/6.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-l4zZJ1WU2hqpQQHXz1rvC3etVZN+2DLmQMO79FhOTZHMn8tDRr+WU287sbomD0BETlmKDn0ygUgVy9k5xkkJdA==",
"path": "system.collections.immutable/6.0.0",
"hashPath": "system.collections.immutable.6.0.0.nupkg.sha512"
},
"System.Diagnostics.DiagnosticSource/6.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-frQDfv0rl209cKm1lnwTgFPzNigy2EKk1BS3uAvHvlBVKe5cymGyHO+Sj+NLv5VF/AhHsqPIUUwya5oV4CHMUw==",
"path": "system.diagnostics.diagnosticsource/6.0.0",
"hashPath": "system.diagnostics.diagnosticsource.6.0.0.nupkg.sha512"
},
"System.Linq.Dynamic.Core/1.2.18": {
"type": "package",
"serviceable": true,
"sha512": "sha512-+RH90sKD6SK2c9MD2Xo2jz1hkAJYfgPVyW1VgAwiPURR+JzOJCdvsDBg2Iq97FmTymxlQBY76G1cMxsF6j+6tA==",
"path": "system.linq.dynamic.core/1.2.18",
"hashPath": "system.linq.dynamic.core.1.2.18.nupkg.sha512"
},
"System.Runtime.CompilerServices.Unsafe/6.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==",
"path": "system.runtime.compilerservices.unsafe/6.0.0",
"hashPath": "system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512"
},
"Complex.Domain/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
}
}
}

View File

@@ -0,0 +1,160 @@
{
"format": 1,
"restore": {
"D:\\Data\\Projects\\Nabak\\Complex\\Complex.Application\\Complex.Application.csproj": {}
},
"projects": {
"D:\\Data\\Projects\\Nabak\\Complex\\Complex.Application\\Complex.Application.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "D:\\Data\\Projects\\Nabak\\Complex\\Complex.Application\\Complex.Application.csproj",
"projectName": "Complex.Application",
"projectPath": "D:\\Data\\Projects\\Nabak\\Complex\\Complex.Application\\Complex.Application.csproj",
"packagesPath": "C:\\Users\\Mohammad\\.nuget\\packages\\",
"outputPath": "D:\\Data\\Projects\\Nabak\\Complex\\Complex.Application\\obj\\",
"projectStyle": "PackageReference",
"fallbackFolders": [
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
],
"configFilePaths": [
"C:\\Users\\Mohammad\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
],
"originalTargetFrameworks": [
"net6.0"
],
"sources": {
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net6.0": {
"targetAlias": "net6.0",
"projectReferences": {
"D:\\Data\\Projects\\Nabak\\Complex\\Complex.Domain\\Complex.Domain.csproj": {
"projectPath": "D:\\Data\\Projects\\Nabak\\Complex\\Complex.Domain\\Complex.Domain.csproj"
}
}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
},
"restoreAuditProperties": {
"enableAudit": "true",
"auditLevel": "low",
"auditMode": "direct"
},
"SdkAnalysisLevel": "9.0.100"
},
"frameworks": {
"net6.0": {
"targetAlias": "net6.0",
"dependencies": {
"AutoMapper": {
"target": "Package",
"version": "[11.0.1, )"
},
"Microsoft.EntityFrameworkCore": {
"target": "Package",
"version": "[6.0.3, )"
},
"Newtonsoft.Json": {
"target": "Package",
"version": "[13.0.1, )"
},
"System.Linq.Dynamic.Core": {
"target": "Package",
"version": "[1.6.7, )"
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.101\\RuntimeIdentifierGraph.json"
}
}
},
"D:\\Data\\Projects\\Nabak\\Complex\\Complex.Domain\\Complex.Domain.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "D:\\Data\\Projects\\Nabak\\Complex\\Complex.Domain\\Complex.Domain.csproj",
"projectName": "Complex.Domain",
"projectPath": "D:\\Data\\Projects\\Nabak\\Complex\\Complex.Domain\\Complex.Domain.csproj",
"packagesPath": "C:\\Users\\Mohammad\\.nuget\\packages\\",
"outputPath": "D:\\Data\\Projects\\Nabak\\Complex\\Complex.Domain\\obj\\",
"projectStyle": "PackageReference",
"fallbackFolders": [
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
],
"configFilePaths": [
"C:\\Users\\Mohammad\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
],
"originalTargetFrameworks": [
"net6.0"
],
"sources": {
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net6.0": {
"targetAlias": "net6.0",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
},
"restoreAuditProperties": {
"enableAudit": "true",
"auditLevel": "low",
"auditMode": "direct"
},
"SdkAnalysisLevel": "9.0.100"
},
"frameworks": {
"net6.0": {
"targetAlias": "net6.0",
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.101\\RuntimeIdentifierGraph.json"
}
}
}
}
}

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\Mohammad\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.12.2</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="C:\Users\Mohammad\.nuget\packages\" />
<SourceRoot Include="C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" />

View File

@@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]

View File

@@ -0,0 +1,23 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Complex.Application")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+76f4cde59f94d1616f39953a840a5ca7ef9213e0")]
[assembly: System.Reflection.AssemblyProductAttribute("Complex.Application")]
[assembly: System.Reflection.AssemblyTitleAttribute("Complex.Application")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
// Generated by the MSBuild WriteCodeFragment class.

View File

@@ -0,0 +1 @@
1eda3f8ccd818f50342015e8b87e35664c973fb402e1aa8a79d0426b367d67ca

View File

@@ -0,0 +1,15 @@
is_global = true
build_property.TargetFramework = net6.0
build_property.TargetPlatformMinVersion =
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = Complex.Application
build_property.ProjectDir = D:\Data\Projects\Nabak\Complex\Complex.Application\
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =
build_property.EffectiveAnalysisLevelStyle = 6.0
build_property.EnableCodeStyleSeverity =

View File

@@ -0,0 +1,8 @@
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

View File

@@ -0,0 +1 @@
e1b9312e8d3e324bc23b2c275d0084af903e30db2cdd7a1cd94e2abd6a084e7e

View File

@@ -0,0 +1,30 @@
F:\Projects\Nabak\Complex\Complex.Application\obj\Debug\net6.0\Complex.Application.csproj.AssemblyReference.cache
F:\Projects\Nabak\Complex\Complex.Application\obj\Debug\net6.0\Complex.Application.GeneratedMSBuildEditorConfig.editorconfig
F:\Projects\Nabak\Complex\Complex.Application\obj\Debug\net6.0\Complex.Application.AssemblyInfoInputs.cache
F:\Projects\Nabak\Complex\Complex.Application\obj\Debug\net6.0\Complex.Application.AssemblyInfo.cs
F:\Projects\Nabak\Complex\Complex.Application\obj\Debug\net6.0\Complex.Application.csproj.CoreCompileInputs.cache
F:\Projects\Nabak\Complex\Complex.Application\bin\Debug\net6.0\Complex.Application.deps.json
F:\Projects\Nabak\Complex\Complex.Application\bin\Debug\net6.0\Complex.Application.dll
F:\Projects\Nabak\Complex\Complex.Application\bin\Debug\net6.0\Complex.Application.pdb
F:\Projects\Nabak\Complex\Complex.Application\bin\Debug\net6.0\Complex.Domain.dll
F:\Projects\Nabak\Complex\Complex.Application\bin\Debug\net6.0\Complex.Domain.pdb
F:\Projects\Nabak\Complex\Complex.Application\obj\Debug\net6.0\Complex.Application.csproj.CopyComplete
F:\Projects\Nabak\Complex\Complex.Application\obj\Debug\net6.0\Complex.Application.dll
F:\Projects\Nabak\Complex\Complex.Application\obj\Debug\net6.0\refint\Complex.Application.dll
F:\Projects\Nabak\Complex\Complex.Application\obj\Debug\net6.0\Complex.Application.pdb
F:\Projects\Nabak\Complex\Complex.Application\obj\Debug\net6.0\ref\Complex.Application.dll
D:\Data\Projects\Nabak\Complex\Complex.Application\bin\Debug\net6.0\Complex.Application.deps.json
D:\Data\Projects\Nabak\Complex\Complex.Application\bin\Debug\net6.0\Complex.Application.dll
D:\Data\Projects\Nabak\Complex\Complex.Application\bin\Debug\net6.0\Complex.Application.pdb
D:\Data\Projects\Nabak\Complex\Complex.Application\bin\Debug\net6.0\Complex.Domain.dll
D:\Data\Projects\Nabak\Complex\Complex.Application\bin\Debug\net6.0\Complex.Domain.pdb
D:\Data\Projects\Nabak\Complex\Complex.Application\obj\Debug\net6.0\Complex.Application.csproj.AssemblyReference.cache
D:\Data\Projects\Nabak\Complex\Complex.Application\obj\Debug\net6.0\Complex.Application.GeneratedMSBuildEditorConfig.editorconfig
D:\Data\Projects\Nabak\Complex\Complex.Application\obj\Debug\net6.0\Complex.Application.AssemblyInfoInputs.cache
D:\Data\Projects\Nabak\Complex\Complex.Application\obj\Debug\net6.0\Complex.Application.AssemblyInfo.cs
D:\Data\Projects\Nabak\Complex\Complex.Application\obj\Debug\net6.0\Complex.Application.csproj.CoreCompileInputs.cache
D:\Data\Projects\Nabak\Complex\Complex.Application\obj\Debug\net6.0\Complex.Application.dll
D:\Data\Projects\Nabak\Complex\Complex.Application\obj\Debug\net6.0\refint\Complex.Application.dll
D:\Data\Projects\Nabak\Complex\Complex.Application\obj\Debug\net6.0\Complex.Application.pdb
D:\Data\Projects\Nabak\Complex\Complex.Application\obj\Debug\net6.0\ref\Complex.Application.dll
D:\Data\Projects\Nabak\Complex\Complex.Application\obj\Debug\net6.0\Complex..21753AE1.Up2Date

View File

@@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName = "")]

View File

@@ -0,0 +1,23 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Complex.Application")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyProductAttribute("Complex.Application")]
[assembly: System.Reflection.AssemblyTitleAttribute("Complex.Application")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
// Generated by the MSBuild WriteCodeFragment class.

View File

@@ -0,0 +1 @@
f5a5886ee460af73395f17d81ba054deef236f12

View File

@@ -0,0 +1,10 @@
is_global = true
build_property.TargetFramework = net6.0
build_property.TargetPlatformMinVersion =
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = Complex.Application
build_property.ProjectDir = D:\Data\Projects\Nabak\Complex\Complex.Application\

View File

@@ -0,0 +1,8 @@
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

View File

@@ -0,0 +1 @@
03862b89a1a3273486ee639781a415f4002d1a6b

View File

@@ -0,0 +1,30 @@
F:\Projects\Nabak\Complex\Complex.Application\bin\Release\net6.0\Complex.Application.deps.json
F:\Projects\Nabak\Complex\Complex.Application\bin\Release\net6.0\Complex.Application.dll
F:\Projects\Nabak\Complex\Complex.Application\bin\Release\net6.0\Complex.Application.pdb
F:\Projects\Nabak\Complex\Complex.Application\bin\Release\net6.0\Complex.Domain.dll
F:\Projects\Nabak\Complex\Complex.Application\bin\Release\net6.0\Complex.Domain.pdb
F:\Projects\Nabak\Complex\Complex.Application\obj\Release\net6.0\Complex.Application.csproj.AssemblyReference.cache
F:\Projects\Nabak\Complex\Complex.Application\obj\Release\net6.0\Complex.Application.GeneratedMSBuildEditorConfig.editorconfig
F:\Projects\Nabak\Complex\Complex.Application\obj\Release\net6.0\Complex.Application.AssemblyInfoInputs.cache
F:\Projects\Nabak\Complex\Complex.Application\obj\Release\net6.0\Complex.Application.AssemblyInfo.cs
F:\Projects\Nabak\Complex\Complex.Application\obj\Release\net6.0\Complex.Application.csproj.CoreCompileInputs.cache
F:\Projects\Nabak\Complex\Complex.Application\obj\Release\net6.0\Complex.Application.csproj.CopyComplete
F:\Projects\Nabak\Complex\Complex.Application\obj\Release\net6.0\Complex.Application.dll
F:\Projects\Nabak\Complex\Complex.Application\obj\Release\net6.0\refint\Complex.Application.dll
F:\Projects\Nabak\Complex\Complex.Application\obj\Release\net6.0\Complex.Application.pdb
F:\Projects\Nabak\Complex\Complex.Application\obj\Release\net6.0\ref\Complex.Application.dll
D:\Data\Projects\Nabak\Complex\Complex.Application\bin\Release\net6.0\Complex.Application.deps.json
D:\Data\Projects\Nabak\Complex\Complex.Application\bin\Release\net6.0\Complex.Application.dll
D:\Data\Projects\Nabak\Complex\Complex.Application\bin\Release\net6.0\Complex.Application.pdb
D:\Data\Projects\Nabak\Complex\Complex.Application\bin\Release\net6.0\Complex.Domain.dll
D:\Data\Projects\Nabak\Complex\Complex.Application\bin\Release\net6.0\Complex.Domain.pdb
D:\Data\Projects\Nabak\Complex\Complex.Application\obj\Release\net6.0\Complex.Application.csproj.AssemblyReference.cache
D:\Data\Projects\Nabak\Complex\Complex.Application\obj\Release\net6.0\Complex.Application.GeneratedMSBuildEditorConfig.editorconfig
D:\Data\Projects\Nabak\Complex\Complex.Application\obj\Release\net6.0\Complex.Application.AssemblyInfoInputs.cache
D:\Data\Projects\Nabak\Complex\Complex.Application\obj\Release\net6.0\Complex.Application.AssemblyInfo.cs
D:\Data\Projects\Nabak\Complex\Complex.Application\obj\Release\net6.0\Complex.Application.csproj.CoreCompileInputs.cache
D:\Data\Projects\Nabak\Complex\Complex.Application\obj\Release\net6.0\Complex.Application.csproj.CopyComplete
D:\Data\Projects\Nabak\Complex\Complex.Application\obj\Release\net6.0\Complex.Application.dll
D:\Data\Projects\Nabak\Complex\Complex.Application\obj\Release\net6.0\refint\Complex.Application.dll
D:\Data\Projects\Nabak\Complex\Complex.Application\obj\Release\net6.0\Complex.Application.pdb
D:\Data\Projects\Nabak\Complex\Complex.Application\obj\Release\net6.0\ref\Complex.Application.dll

View File

@@ -0,0 +1,912 @@
{
"version": 3,
"targets": {
"net6.0": {
"AutoMapper/11.0.1": {
"type": "package",
"dependencies": {
"Microsoft.CSharp": "4.7.0"
},
"compile": {
"lib/netstandard2.1/AutoMapper.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.1/AutoMapper.dll": {
"related": ".xml"
}
}
},
"Microsoft.CSharp/4.7.0": {
"type": "package",
"compile": {
"ref/netcoreapp2.0/_._": {}
},
"runtime": {
"lib/netcoreapp2.0/_._": {}
}
},
"Microsoft.EntityFrameworkCore/6.0.3": {
"type": "package",
"dependencies": {
"Microsoft.EntityFrameworkCore.Abstractions": "6.0.3",
"Microsoft.EntityFrameworkCore.Analyzers": "6.0.3",
"Microsoft.Extensions.Caching.Memory": "6.0.1",
"Microsoft.Extensions.DependencyInjection": "6.0.0",
"Microsoft.Extensions.Logging": "6.0.0",
"System.Collections.Immutable": "6.0.0",
"System.Diagnostics.DiagnosticSource": "6.0.0"
},
"compile": {
"lib/net6.0/Microsoft.EntityFrameworkCore.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net6.0/Microsoft.EntityFrameworkCore.dll": {
"related": ".xml"
}
}
},
"Microsoft.EntityFrameworkCore.Abstractions/6.0.3": {
"type": "package",
"compile": {
"lib/net6.0/Microsoft.EntityFrameworkCore.Abstractions.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net6.0/Microsoft.EntityFrameworkCore.Abstractions.dll": {
"related": ".xml"
}
}
},
"Microsoft.EntityFrameworkCore.Analyzers/6.0.3": {
"type": "package",
"compile": {
"lib/netstandard2.0/_._": {}
},
"runtime": {
"lib/netstandard2.0/_._": {}
}
},
"Microsoft.Extensions.Caching.Abstractions/6.0.0": {
"type": "package",
"dependencies": {
"Microsoft.Extensions.Primitives": "6.0.0"
},
"compile": {
"lib/netstandard2.0/Microsoft.Extensions.Caching.Abstractions.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.0/Microsoft.Extensions.Caching.Abstractions.dll": {
"related": ".xml"
}
}
},
"Microsoft.Extensions.Caching.Memory/6.0.1": {
"type": "package",
"dependencies": {
"Microsoft.Extensions.Caching.Abstractions": "6.0.0",
"Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0",
"Microsoft.Extensions.Logging.Abstractions": "6.0.0",
"Microsoft.Extensions.Options": "6.0.0",
"Microsoft.Extensions.Primitives": "6.0.0"
},
"compile": {
"lib/netstandard2.0/Microsoft.Extensions.Caching.Memory.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.0/Microsoft.Extensions.Caching.Memory.dll": {
"related": ".xml"
}
}
},
"Microsoft.Extensions.DependencyInjection/6.0.0": {
"type": "package",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0",
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
},
"compile": {
"lib/net6.0/Microsoft.Extensions.DependencyInjection.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net6.0/Microsoft.Extensions.DependencyInjection.dll": {
"related": ".xml"
}
},
"build": {
"buildTransitive/netcoreapp3.1/_._": {}
}
},
"Microsoft.Extensions.DependencyInjection.Abstractions/6.0.0": {
"type": "package",
"compile": {
"lib/net6.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net6.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
"related": ".xml"
}
},
"build": {
"buildTransitive/netcoreapp3.1/_._": {}
}
},
"Microsoft.Extensions.Logging/6.0.0": {
"type": "package",
"dependencies": {
"Microsoft.Extensions.DependencyInjection": "6.0.0",
"Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0",
"Microsoft.Extensions.Logging.Abstractions": "6.0.0",
"Microsoft.Extensions.Options": "6.0.0",
"System.Diagnostics.DiagnosticSource": "6.0.0"
},
"compile": {
"lib/netstandard2.1/Microsoft.Extensions.Logging.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.1/Microsoft.Extensions.Logging.dll": {
"related": ".xml"
}
}
},
"Microsoft.Extensions.Logging.Abstractions/6.0.0": {
"type": "package",
"compile": {
"lib/net6.0/Microsoft.Extensions.Logging.Abstractions.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net6.0/Microsoft.Extensions.Logging.Abstractions.dll": {
"related": ".xml"
}
},
"build": {
"buildTransitive/netcoreapp3.1/_._": {}
}
},
"Microsoft.Extensions.Options/6.0.0": {
"type": "package",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0",
"Microsoft.Extensions.Primitives": "6.0.0"
},
"compile": {
"lib/netstandard2.1/Microsoft.Extensions.Options.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.1/Microsoft.Extensions.Options.dll": {
"related": ".xml"
}
}
},
"Microsoft.Extensions.Primitives/6.0.0": {
"type": "package",
"dependencies": {
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
},
"compile": {
"lib/net6.0/Microsoft.Extensions.Primitives.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net6.0/Microsoft.Extensions.Primitives.dll": {
"related": ".xml"
}
},
"build": {
"buildTransitive/netcoreapp3.1/_._": {}
}
},
"Newtonsoft.Json/13.0.1": {
"type": "package",
"compile": {
"lib/netstandard2.0/Newtonsoft.Json.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.0/Newtonsoft.Json.dll": {
"related": ".xml"
}
}
},
"System.Collections.Immutable/6.0.0": {
"type": "package",
"dependencies": {
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
},
"compile": {
"lib/net6.0/System.Collections.Immutable.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net6.0/System.Collections.Immutable.dll": {
"related": ".xml"
}
},
"build": {
"buildTransitive/netcoreapp3.1/_._": {}
}
},
"System.Diagnostics.DiagnosticSource/6.0.0": {
"type": "package",
"dependencies": {
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
},
"compile": {
"lib/net6.0/System.Diagnostics.DiagnosticSource.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net6.0/System.Diagnostics.DiagnosticSource.dll": {
"related": ".xml"
}
},
"build": {
"buildTransitive/netcoreapp3.1/_._": {}
}
},
"System.Linq.Dynamic.Core/1.6.7": {
"type": "package",
"compile": {
"lib/net6.0/System.Linq.Dynamic.Core.dll": {
"related": ".pdb;.xml"
}
},
"runtime": {
"lib/net6.0/System.Linq.Dynamic.Core.dll": {
"related": ".pdb;.xml"
}
}
},
"System.Runtime.CompilerServices.Unsafe/6.0.0": {
"type": "package",
"compile": {
"lib/net6.0/System.Runtime.CompilerServices.Unsafe.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net6.0/System.Runtime.CompilerServices.Unsafe.dll": {
"related": ".xml"
}
},
"build": {
"buildTransitive/netcoreapp3.1/_._": {}
}
},
"Complex.Domain/1.0.0": {
"type": "project",
"framework": ".NETCoreApp,Version=v6.0",
"compile": {
"bin/placeholder/Complex.Domain.dll": {}
},
"runtime": {
"bin/placeholder/Complex.Domain.dll": {}
}
}
}
},
"libraries": {
"AutoMapper/11.0.1": {
"sha512": "WIadGC1pIwbnyTubvI577p3F++Bsj9q2Q3OaAc1I0QS+JhupN1xkdrPBhI9bPIeg63zM81tZplUNYkqU1HE5jQ==",
"type": "package",
"path": "automapper/11.0.1",
"files": [
".nupkg.metadata",
".signature.p7s",
"README.md",
"automapper.11.0.1.nupkg.sha512",
"automapper.nuspec",
"icon.png",
"lib/netstandard2.1/AutoMapper.dll",
"lib/netstandard2.1/AutoMapper.xml"
]
},
"Microsoft.CSharp/4.7.0": {
"sha512": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==",
"type": "package",
"path": "microsoft.csharp/4.7.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"LICENSE.TXT",
"THIRD-PARTY-NOTICES.TXT",
"lib/MonoAndroid10/_._",
"lib/MonoTouch10/_._",
"lib/net45/_._",
"lib/netcore50/Microsoft.CSharp.dll",
"lib/netcoreapp2.0/_._",
"lib/netstandard1.3/Microsoft.CSharp.dll",
"lib/netstandard2.0/Microsoft.CSharp.dll",
"lib/netstandard2.0/Microsoft.CSharp.xml",
"lib/portable-net45+win8+wp8+wpa81/_._",
"lib/uap10.0.16299/_._",
"lib/win8/_._",
"lib/wp80/_._",
"lib/wpa81/_._",
"lib/xamarinios10/_._",
"lib/xamarinmac20/_._",
"lib/xamarintvos10/_._",
"lib/xamarinwatchos10/_._",
"microsoft.csharp.4.7.0.nupkg.sha512",
"microsoft.csharp.nuspec",
"ref/MonoAndroid10/_._",
"ref/MonoTouch10/_._",
"ref/net45/_._",
"ref/netcore50/Microsoft.CSharp.dll",
"ref/netcore50/Microsoft.CSharp.xml",
"ref/netcore50/de/Microsoft.CSharp.xml",
"ref/netcore50/es/Microsoft.CSharp.xml",
"ref/netcore50/fr/Microsoft.CSharp.xml",
"ref/netcore50/it/Microsoft.CSharp.xml",
"ref/netcore50/ja/Microsoft.CSharp.xml",
"ref/netcore50/ko/Microsoft.CSharp.xml",
"ref/netcore50/ru/Microsoft.CSharp.xml",
"ref/netcore50/zh-hans/Microsoft.CSharp.xml",
"ref/netcore50/zh-hant/Microsoft.CSharp.xml",
"ref/netcoreapp2.0/_._",
"ref/netstandard1.0/Microsoft.CSharp.dll",
"ref/netstandard1.0/Microsoft.CSharp.xml",
"ref/netstandard1.0/de/Microsoft.CSharp.xml",
"ref/netstandard1.0/es/Microsoft.CSharp.xml",
"ref/netstandard1.0/fr/Microsoft.CSharp.xml",
"ref/netstandard1.0/it/Microsoft.CSharp.xml",
"ref/netstandard1.0/ja/Microsoft.CSharp.xml",
"ref/netstandard1.0/ko/Microsoft.CSharp.xml",
"ref/netstandard1.0/ru/Microsoft.CSharp.xml",
"ref/netstandard1.0/zh-hans/Microsoft.CSharp.xml",
"ref/netstandard1.0/zh-hant/Microsoft.CSharp.xml",
"ref/netstandard2.0/Microsoft.CSharp.dll",
"ref/netstandard2.0/Microsoft.CSharp.xml",
"ref/portable-net45+win8+wp8+wpa81/_._",
"ref/uap10.0.16299/_._",
"ref/win8/_._",
"ref/wp80/_._",
"ref/wpa81/_._",
"ref/xamarinios10/_._",
"ref/xamarinmac20/_._",
"ref/xamarintvos10/_._",
"ref/xamarinwatchos10/_._",
"useSharedDesignerContext.txt",
"version.txt"
]
},
"Microsoft.EntityFrameworkCore/6.0.3": {
"sha512": "f7ZlNOI1wPg/r0zRgvmcLAM3kwuCVGe5cZc8rYoKPDGZs5dgRFe5a43H9FnCXsyFAF6FILB08Nr9RkuNMwd3TQ==",
"type": "package",
"path": "microsoft.entityframeworkcore/6.0.3",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"lib/net6.0/Microsoft.EntityFrameworkCore.dll",
"lib/net6.0/Microsoft.EntityFrameworkCore.xml",
"microsoft.entityframeworkcore.6.0.3.nupkg.sha512",
"microsoft.entityframeworkcore.nuspec"
]
},
"Microsoft.EntityFrameworkCore.Abstractions/6.0.3": {
"sha512": "7c6wJtTFj7FDe20IVPDKeCzxWIMu+XDpYi7aYuUo6knu4vDeB3N3F0pjAZgXJ96GwTZYBrjOEwnbpYmfapEz/w==",
"type": "package",
"path": "microsoft.entityframeworkcore.abstractions/6.0.3",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"lib/net6.0/Microsoft.EntityFrameworkCore.Abstractions.dll",
"lib/net6.0/Microsoft.EntityFrameworkCore.Abstractions.xml",
"microsoft.entityframeworkcore.abstractions.6.0.3.nupkg.sha512",
"microsoft.entityframeworkcore.abstractions.nuspec"
]
},
"Microsoft.EntityFrameworkCore.Analyzers/6.0.3": {
"sha512": "Ld9HyVABYor3Tq43/sG2JERL94UnDHJPg5PwpkCW4CWsf/CbxHetdecv+bCXA/Hg4q+44sov0GVl4Ywjk4PnyA==",
"type": "package",
"path": "microsoft.entityframeworkcore.analyzers/6.0.3",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"analyzers/dotnet/cs/Microsoft.EntityFrameworkCore.Analyzers.dll",
"lib/netstandard2.0/_._",
"microsoft.entityframeworkcore.analyzers.6.0.3.nupkg.sha512",
"microsoft.entityframeworkcore.analyzers.nuspec"
]
},
"Microsoft.Extensions.Caching.Abstractions/6.0.0": {
"sha512": "bcz5sSFJbganH0+YrfvIjJDIcKNW7TL07C4d1eTmXy/wOt52iz4LVogJb6pazs7W0+74j0YpXFErvp++Aq5Bsw==",
"type": "package",
"path": "microsoft.extensions.caching.abstractions/6.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"LICENSE.TXT",
"THIRD-PARTY-NOTICES.TXT",
"lib/net461/Microsoft.Extensions.Caching.Abstractions.dll",
"lib/net461/Microsoft.Extensions.Caching.Abstractions.xml",
"lib/netstandard2.0/Microsoft.Extensions.Caching.Abstractions.dll",
"lib/netstandard2.0/Microsoft.Extensions.Caching.Abstractions.xml",
"microsoft.extensions.caching.abstractions.6.0.0.nupkg.sha512",
"microsoft.extensions.caching.abstractions.nuspec",
"useSharedDesignerContext.txt"
]
},
"Microsoft.Extensions.Caching.Memory/6.0.1": {
"sha512": "B4y+Cev05eMcjf1na0v9gza6GUtahXbtY1JCypIgx3B4Ea/KAgsWyXEmW4q6zMbmTMtKzmPVk09rvFJirvMwTg==",
"type": "package",
"path": "microsoft.extensions.caching.memory/6.0.1",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"LICENSE.TXT",
"THIRD-PARTY-NOTICES.TXT",
"lib/net461/Microsoft.Extensions.Caching.Memory.dll",
"lib/net461/Microsoft.Extensions.Caching.Memory.xml",
"lib/netstandard2.0/Microsoft.Extensions.Caching.Memory.dll",
"lib/netstandard2.0/Microsoft.Extensions.Caching.Memory.xml",
"microsoft.extensions.caching.memory.6.0.1.nupkg.sha512",
"microsoft.extensions.caching.memory.nuspec",
"useSharedDesignerContext.txt"
]
},
"Microsoft.Extensions.DependencyInjection/6.0.0": {
"sha512": "k6PWQMuoBDGGHOQTtyois2u4AwyVcIwL2LaSLlTZQm2CYcJ1pxbt6jfAnpWmzENA/wfrYRI/X9DTLoUkE4AsLw==",
"type": "package",
"path": "microsoft.extensions.dependencyinjection/6.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"LICENSE.TXT",
"THIRD-PARTY-NOTICES.TXT",
"buildTransitive/netcoreapp2.0/Microsoft.Extensions.DependencyInjection.targets",
"buildTransitive/netcoreapp3.1/_._",
"lib/net461/Microsoft.Extensions.DependencyInjection.dll",
"lib/net461/Microsoft.Extensions.DependencyInjection.xml",
"lib/net6.0/Microsoft.Extensions.DependencyInjection.dll",
"lib/net6.0/Microsoft.Extensions.DependencyInjection.xml",
"lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.dll",
"lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.xml",
"lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.dll",
"lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.xml",
"microsoft.extensions.dependencyinjection.6.0.0.nupkg.sha512",
"microsoft.extensions.dependencyinjection.nuspec",
"useSharedDesignerContext.txt"
]
},
"Microsoft.Extensions.DependencyInjection.Abstractions/6.0.0": {
"sha512": "xlzi2IYREJH3/m6+lUrQlujzX8wDitm4QGnUu6kUXTQAWPuZY8i+ticFJbzfqaetLA6KR/rO6Ew/HuYD+bxifg==",
"type": "package",
"path": "microsoft.extensions.dependencyinjection.abstractions/6.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"LICENSE.TXT",
"THIRD-PARTY-NOTICES.TXT",
"buildTransitive/netcoreapp2.0/Microsoft.Extensions.DependencyInjection.Abstractions.targets",
"buildTransitive/netcoreapp3.1/_._",
"lib/net461/Microsoft.Extensions.DependencyInjection.Abstractions.dll",
"lib/net461/Microsoft.Extensions.DependencyInjection.Abstractions.xml",
"lib/net6.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll",
"lib/net6.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml",
"lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll",
"lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml",
"lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.dll",
"lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.xml",
"microsoft.extensions.dependencyinjection.abstractions.6.0.0.nupkg.sha512",
"microsoft.extensions.dependencyinjection.abstractions.nuspec",
"useSharedDesignerContext.txt"
]
},
"Microsoft.Extensions.Logging/6.0.0": {
"sha512": "eIbyj40QDg1NDz0HBW0S5f3wrLVnKWnDJ/JtZ+yJDFnDj90VoPuoPmFkeaXrtu+0cKm5GRAwoDf+dBWXK0TUdg==",
"type": "package",
"path": "microsoft.extensions.logging/6.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"LICENSE.TXT",
"THIRD-PARTY-NOTICES.TXT",
"lib/net461/Microsoft.Extensions.Logging.dll",
"lib/net461/Microsoft.Extensions.Logging.xml",
"lib/netstandard2.0/Microsoft.Extensions.Logging.dll",
"lib/netstandard2.0/Microsoft.Extensions.Logging.xml",
"lib/netstandard2.1/Microsoft.Extensions.Logging.dll",
"lib/netstandard2.1/Microsoft.Extensions.Logging.xml",
"microsoft.extensions.logging.6.0.0.nupkg.sha512",
"microsoft.extensions.logging.nuspec",
"useSharedDesignerContext.txt"
]
},
"Microsoft.Extensions.Logging.Abstractions/6.0.0": {
"sha512": "/HggWBbTwy8TgebGSX5DBZ24ndhzi93sHUBDvP1IxbZD7FDokYzdAr6+vbWGjw2XAfR2EJ1sfKUotpjHnFWPxA==",
"type": "package",
"path": "microsoft.extensions.logging.abstractions/6.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"LICENSE.TXT",
"THIRD-PARTY-NOTICES.TXT",
"analyzers/dotnet/roslyn3.11/cs/Microsoft.Extensions.Logging.Generators.dll",
"analyzers/dotnet/roslyn3.11/cs/cs/Microsoft.Extensions.Logging.Generators.resources.dll",
"analyzers/dotnet/roslyn3.11/cs/de/Microsoft.Extensions.Logging.Generators.resources.dll",
"analyzers/dotnet/roslyn3.11/cs/es/Microsoft.Extensions.Logging.Generators.resources.dll",
"analyzers/dotnet/roslyn3.11/cs/fr/Microsoft.Extensions.Logging.Generators.resources.dll",
"analyzers/dotnet/roslyn3.11/cs/it/Microsoft.Extensions.Logging.Generators.resources.dll",
"analyzers/dotnet/roslyn3.11/cs/ja/Microsoft.Extensions.Logging.Generators.resources.dll",
"analyzers/dotnet/roslyn3.11/cs/ko/Microsoft.Extensions.Logging.Generators.resources.dll",
"analyzers/dotnet/roslyn3.11/cs/pl/Microsoft.Extensions.Logging.Generators.resources.dll",
"analyzers/dotnet/roslyn3.11/cs/pt-BR/Microsoft.Extensions.Logging.Generators.resources.dll",
"analyzers/dotnet/roslyn3.11/cs/ru/Microsoft.Extensions.Logging.Generators.resources.dll",
"analyzers/dotnet/roslyn3.11/cs/tr/Microsoft.Extensions.Logging.Generators.resources.dll",
"analyzers/dotnet/roslyn3.11/cs/zh-Hans/Microsoft.Extensions.Logging.Generators.resources.dll",
"analyzers/dotnet/roslyn3.11/cs/zh-Hant/Microsoft.Extensions.Logging.Generators.resources.dll",
"analyzers/dotnet/roslyn4.0/cs/Microsoft.Extensions.Logging.Generators.dll",
"analyzers/dotnet/roslyn4.0/cs/cs/Microsoft.Extensions.Logging.Generators.resources.dll",
"analyzers/dotnet/roslyn4.0/cs/de/Microsoft.Extensions.Logging.Generators.resources.dll",
"analyzers/dotnet/roslyn4.0/cs/es/Microsoft.Extensions.Logging.Generators.resources.dll",
"analyzers/dotnet/roslyn4.0/cs/fr/Microsoft.Extensions.Logging.Generators.resources.dll",
"analyzers/dotnet/roslyn4.0/cs/it/Microsoft.Extensions.Logging.Generators.resources.dll",
"analyzers/dotnet/roslyn4.0/cs/ja/Microsoft.Extensions.Logging.Generators.resources.dll",
"analyzers/dotnet/roslyn4.0/cs/ko/Microsoft.Extensions.Logging.Generators.resources.dll",
"analyzers/dotnet/roslyn4.0/cs/pl/Microsoft.Extensions.Logging.Generators.resources.dll",
"analyzers/dotnet/roslyn4.0/cs/pt-BR/Microsoft.Extensions.Logging.Generators.resources.dll",
"analyzers/dotnet/roslyn4.0/cs/ru/Microsoft.Extensions.Logging.Generators.resources.dll",
"analyzers/dotnet/roslyn4.0/cs/tr/Microsoft.Extensions.Logging.Generators.resources.dll",
"analyzers/dotnet/roslyn4.0/cs/zh-Hans/Microsoft.Extensions.Logging.Generators.resources.dll",
"analyzers/dotnet/roslyn4.0/cs/zh-Hant/Microsoft.Extensions.Logging.Generators.resources.dll",
"build/Microsoft.Extensions.Logging.Abstractions.targets",
"buildTransitive/netcoreapp2.0/Microsoft.Extensions.Logging.Abstractions.targets",
"buildTransitive/netcoreapp3.1/_._",
"lib/net461/Microsoft.Extensions.Logging.Abstractions.dll",
"lib/net461/Microsoft.Extensions.Logging.Abstractions.xml",
"lib/net6.0/Microsoft.Extensions.Logging.Abstractions.dll",
"lib/net6.0/Microsoft.Extensions.Logging.Abstractions.xml",
"lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll",
"lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.xml",
"microsoft.extensions.logging.abstractions.6.0.0.nupkg.sha512",
"microsoft.extensions.logging.abstractions.nuspec",
"useSharedDesignerContext.txt"
]
},
"Microsoft.Extensions.Options/6.0.0": {
"sha512": "dzXN0+V1AyjOe2xcJ86Qbo233KHuLEY0njf/P2Kw8SfJU+d45HNS2ctJdnEnrWbM9Ye2eFgaC5Mj9otRMU6IsQ==",
"type": "package",
"path": "microsoft.extensions.options/6.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"LICENSE.TXT",
"THIRD-PARTY-NOTICES.TXT",
"lib/net461/Microsoft.Extensions.Options.dll",
"lib/net461/Microsoft.Extensions.Options.xml",
"lib/netstandard2.0/Microsoft.Extensions.Options.dll",
"lib/netstandard2.0/Microsoft.Extensions.Options.xml",
"lib/netstandard2.1/Microsoft.Extensions.Options.dll",
"lib/netstandard2.1/Microsoft.Extensions.Options.xml",
"microsoft.extensions.options.6.0.0.nupkg.sha512",
"microsoft.extensions.options.nuspec",
"useSharedDesignerContext.txt"
]
},
"Microsoft.Extensions.Primitives/6.0.0": {
"sha512": "9+PnzmQFfEFNR9J2aDTfJGGupShHjOuGw4VUv+JB044biSHrnmCIMD+mJHmb2H7YryrfBEXDurxQ47gJZdCKNQ==",
"type": "package",
"path": "microsoft.extensions.primitives/6.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"LICENSE.TXT",
"THIRD-PARTY-NOTICES.TXT",
"buildTransitive/netcoreapp2.0/Microsoft.Extensions.Primitives.targets",
"buildTransitive/netcoreapp3.1/_._",
"lib/net461/Microsoft.Extensions.Primitives.dll",
"lib/net461/Microsoft.Extensions.Primitives.xml",
"lib/net6.0/Microsoft.Extensions.Primitives.dll",
"lib/net6.0/Microsoft.Extensions.Primitives.xml",
"lib/netcoreapp3.1/Microsoft.Extensions.Primitives.dll",
"lib/netcoreapp3.1/Microsoft.Extensions.Primitives.xml",
"lib/netstandard2.0/Microsoft.Extensions.Primitives.dll",
"lib/netstandard2.0/Microsoft.Extensions.Primitives.xml",
"microsoft.extensions.primitives.6.0.0.nupkg.sha512",
"microsoft.extensions.primitives.nuspec",
"useSharedDesignerContext.txt"
]
},
"Newtonsoft.Json/13.0.1": {
"sha512": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==",
"type": "package",
"path": "newtonsoft.json/13.0.1",
"files": [
".nupkg.metadata",
".signature.p7s",
"LICENSE.md",
"lib/net20/Newtonsoft.Json.dll",
"lib/net20/Newtonsoft.Json.xml",
"lib/net35/Newtonsoft.Json.dll",
"lib/net35/Newtonsoft.Json.xml",
"lib/net40/Newtonsoft.Json.dll",
"lib/net40/Newtonsoft.Json.xml",
"lib/net45/Newtonsoft.Json.dll",
"lib/net45/Newtonsoft.Json.xml",
"lib/netstandard1.0/Newtonsoft.Json.dll",
"lib/netstandard1.0/Newtonsoft.Json.xml",
"lib/netstandard1.3/Newtonsoft.Json.dll",
"lib/netstandard1.3/Newtonsoft.Json.xml",
"lib/netstandard2.0/Newtonsoft.Json.dll",
"lib/netstandard2.0/Newtonsoft.Json.xml",
"newtonsoft.json.13.0.1.nupkg.sha512",
"newtonsoft.json.nuspec",
"packageIcon.png"
]
},
"System.Collections.Immutable/6.0.0": {
"sha512": "l4zZJ1WU2hqpQQHXz1rvC3etVZN+2DLmQMO79FhOTZHMn8tDRr+WU287sbomD0BETlmKDn0ygUgVy9k5xkkJdA==",
"type": "package",
"path": "system.collections.immutable/6.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"LICENSE.TXT",
"THIRD-PARTY-NOTICES.TXT",
"buildTransitive/netcoreapp2.0/System.Collections.Immutable.targets",
"buildTransitive/netcoreapp3.1/_._",
"lib/net461/System.Collections.Immutable.dll",
"lib/net461/System.Collections.Immutable.xml",
"lib/net6.0/System.Collections.Immutable.dll",
"lib/net6.0/System.Collections.Immutable.xml",
"lib/netstandard2.0/System.Collections.Immutable.dll",
"lib/netstandard2.0/System.Collections.Immutable.xml",
"system.collections.immutable.6.0.0.nupkg.sha512",
"system.collections.immutable.nuspec",
"useSharedDesignerContext.txt"
]
},
"System.Diagnostics.DiagnosticSource/6.0.0": {
"sha512": "frQDfv0rl209cKm1lnwTgFPzNigy2EKk1BS3uAvHvlBVKe5cymGyHO+Sj+NLv5VF/AhHsqPIUUwya5oV4CHMUw==",
"type": "package",
"path": "system.diagnostics.diagnosticsource/6.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"LICENSE.TXT",
"THIRD-PARTY-NOTICES.TXT",
"buildTransitive/netcoreapp2.0/System.Diagnostics.DiagnosticSource.targets",
"buildTransitive/netcoreapp3.1/_._",
"lib/net461/System.Diagnostics.DiagnosticSource.dll",
"lib/net461/System.Diagnostics.DiagnosticSource.xml",
"lib/net5.0/System.Diagnostics.DiagnosticSource.dll",
"lib/net5.0/System.Diagnostics.DiagnosticSource.xml",
"lib/net6.0/System.Diagnostics.DiagnosticSource.dll",
"lib/net6.0/System.Diagnostics.DiagnosticSource.xml",
"lib/netstandard2.0/System.Diagnostics.DiagnosticSource.dll",
"lib/netstandard2.0/System.Diagnostics.DiagnosticSource.xml",
"system.diagnostics.diagnosticsource.6.0.0.nupkg.sha512",
"system.diagnostics.diagnosticsource.nuspec",
"useSharedDesignerContext.txt"
]
},
"System.Linq.Dynamic.Core/1.6.7": {
"sha512": "lH+YgtovXbxD6JImHl2VXUtXRUvN8BMEZB2ReZNvS+J5GnGGZV9ivxslQ2nJWmKlBjFTReAKsevnQKE4yLP2pA==",
"type": "package",
"path": "system.linq.dynamic.core/1.6.7",
"files": [
".nupkg.metadata",
".signature.p7s",
"PackageReadme.md",
"lib/net35/System.Linq.Dynamic.Core.dll",
"lib/net35/System.Linq.Dynamic.Core.pdb",
"lib/net35/System.Linq.Dynamic.Core.xml",
"lib/net40/System.Linq.Dynamic.Core.dll",
"lib/net40/System.Linq.Dynamic.Core.pdb",
"lib/net40/System.Linq.Dynamic.Core.xml",
"lib/net45/System.Linq.Dynamic.Core.dll",
"lib/net45/System.Linq.Dynamic.Core.pdb",
"lib/net45/System.Linq.Dynamic.Core.xml",
"lib/net452/System.Linq.Dynamic.Core.dll",
"lib/net452/System.Linq.Dynamic.Core.pdb",
"lib/net452/System.Linq.Dynamic.Core.xml",
"lib/net46/System.Linq.Dynamic.Core.dll",
"lib/net46/System.Linq.Dynamic.Core.pdb",
"lib/net46/System.Linq.Dynamic.Core.xml",
"lib/net5.0/System.Linq.Dynamic.Core.dll",
"lib/net5.0/System.Linq.Dynamic.Core.pdb",
"lib/net5.0/System.Linq.Dynamic.Core.xml",
"lib/net6.0/System.Linq.Dynamic.Core.dll",
"lib/net6.0/System.Linq.Dynamic.Core.pdb",
"lib/net6.0/System.Linq.Dynamic.Core.xml",
"lib/net7.0/System.Linq.Dynamic.Core.dll",
"lib/net7.0/System.Linq.Dynamic.Core.pdb",
"lib/net7.0/System.Linq.Dynamic.Core.xml",
"lib/net8.0/System.Linq.Dynamic.Core.dll",
"lib/net8.0/System.Linq.Dynamic.Core.pdb",
"lib/net8.0/System.Linq.Dynamic.Core.xml",
"lib/net9.0/System.Linq.Dynamic.Core.dll",
"lib/net9.0/System.Linq.Dynamic.Core.pdb",
"lib/net9.0/System.Linq.Dynamic.Core.xml",
"lib/netcoreapp2.1/System.Linq.Dynamic.Core.dll",
"lib/netcoreapp2.1/System.Linq.Dynamic.Core.pdb",
"lib/netcoreapp2.1/System.Linq.Dynamic.Core.xml",
"lib/netcoreapp3.1/System.Linq.Dynamic.Core.dll",
"lib/netcoreapp3.1/System.Linq.Dynamic.Core.pdb",
"lib/netcoreapp3.1/System.Linq.Dynamic.Core.xml",
"lib/netstandard1.3/System.Linq.Dynamic.Core.dll",
"lib/netstandard1.3/System.Linq.Dynamic.Core.pdb",
"lib/netstandard1.3/System.Linq.Dynamic.Core.xml",
"lib/netstandard2.0/System.Linq.Dynamic.Core.dll",
"lib/netstandard2.0/System.Linq.Dynamic.Core.pdb",
"lib/netstandard2.0/System.Linq.Dynamic.Core.xml",
"lib/netstandard2.1/System.Linq.Dynamic.Core.dll",
"lib/netstandard2.1/System.Linq.Dynamic.Core.pdb",
"lib/netstandard2.1/System.Linq.Dynamic.Core.xml",
"lib/uap10.0.10240/System.Linq.Dynamic.Core.dll",
"lib/uap10.0.10240/System.Linq.Dynamic.Core.pdb",
"lib/uap10.0.10240/System.Linq.Dynamic.Core.pri",
"lib/uap10.0.10240/System.Linq.Dynamic.Core.xml",
"logo.png",
"system.linq.dynamic.core.1.6.7.nupkg.sha512",
"system.linq.dynamic.core.nuspec"
]
},
"System.Runtime.CompilerServices.Unsafe/6.0.0": {
"sha512": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==",
"type": "package",
"path": "system.runtime.compilerservices.unsafe/6.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"LICENSE.TXT",
"THIRD-PARTY-NOTICES.TXT",
"buildTransitive/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.targets",
"buildTransitive/netcoreapp3.1/_._",
"lib/net461/System.Runtime.CompilerServices.Unsafe.dll",
"lib/net461/System.Runtime.CompilerServices.Unsafe.xml",
"lib/net6.0/System.Runtime.CompilerServices.Unsafe.dll",
"lib/net6.0/System.Runtime.CompilerServices.Unsafe.xml",
"lib/netcoreapp3.1/System.Runtime.CompilerServices.Unsafe.dll",
"lib/netcoreapp3.1/System.Runtime.CompilerServices.Unsafe.xml",
"lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll",
"lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml",
"system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512",
"system.runtime.compilerservices.unsafe.nuspec",
"useSharedDesignerContext.txt"
]
},
"Complex.Domain/1.0.0": {
"type": "project",
"path": "../Complex.Domain/Complex.Domain.csproj",
"msbuildProject": "../Complex.Domain/Complex.Domain.csproj"
}
},
"projectFileDependencyGroups": {
"net6.0": [
"AutoMapper >= 11.0.1",
"Complex.Domain >= 1.0.0",
"Microsoft.EntityFrameworkCore >= 6.0.3",
"Newtonsoft.Json >= 13.0.1",
"System.Linq.Dynamic.Core >= 1.6.7"
]
},
"packageFolders": {
"C:\\Users\\Mohammad\\.nuget\\packages\\": {},
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {}
},
"project": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "D:\\Data\\Projects\\Nabak\\Complex\\Complex.Application\\Complex.Application.csproj",
"projectName": "Complex.Application",
"projectPath": "D:\\Data\\Projects\\Nabak\\Complex\\Complex.Application\\Complex.Application.csproj",
"packagesPath": "C:\\Users\\Mohammad\\.nuget\\packages\\",
"outputPath": "D:\\Data\\Projects\\Nabak\\Complex\\Complex.Application\\obj\\",
"projectStyle": "PackageReference",
"fallbackFolders": [
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
],
"configFilePaths": [
"C:\\Users\\Mohammad\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
],
"originalTargetFrameworks": [
"net6.0"
],
"sources": {
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net6.0": {
"targetAlias": "net6.0",
"projectReferences": {
"D:\\Data\\Projects\\Nabak\\Complex\\Complex.Domain\\Complex.Domain.csproj": {
"projectPath": "D:\\Data\\Projects\\Nabak\\Complex\\Complex.Domain\\Complex.Domain.csproj"
}
}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
},
"restoreAuditProperties": {
"enableAudit": "true",
"auditLevel": "low",
"auditMode": "direct"
},
"SdkAnalysisLevel": "9.0.100"
},
"frameworks": {
"net6.0": {
"targetAlias": "net6.0",
"dependencies": {
"AutoMapper": {
"target": "Package",
"version": "[11.0.1, )"
},
"Microsoft.EntityFrameworkCore": {
"target": "Package",
"version": "[6.0.3, )"
},
"Newtonsoft.Json": {
"target": "Package",
"version": "[13.0.1, )"
},
"System.Linq.Dynamic.Core": {
"target": "Package",
"version": "[1.6.7, )"
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.101\\RuntimeIdentifierGraph.json"
}
}
}
}

View File

@@ -0,0 +1,27 @@
{
"version": 2,
"dgSpecHash": "9ZzH9UTX/k0=",
"success": true,
"projectFilePath": "D:\\Data\\Projects\\Nabak\\Complex\\Complex.Application\\Complex.Application.csproj",
"expectedPackageFiles": [
"C:\\Users\\Mohammad\\.nuget\\packages\\automapper\\11.0.1\\automapper.11.0.1.nupkg.sha512",
"C:\\Users\\Mohammad\\.nuget\\packages\\microsoft.csharp\\4.7.0\\microsoft.csharp.4.7.0.nupkg.sha512",
"C:\\Users\\Mohammad\\.nuget\\packages\\microsoft.entityframeworkcore\\6.0.3\\microsoft.entityframeworkcore.6.0.3.nupkg.sha512",
"C:\\Users\\Mohammad\\.nuget\\packages\\microsoft.entityframeworkcore.abstractions\\6.0.3\\microsoft.entityframeworkcore.abstractions.6.0.3.nupkg.sha512",
"C:\\Users\\Mohammad\\.nuget\\packages\\microsoft.entityframeworkcore.analyzers\\6.0.3\\microsoft.entityframeworkcore.analyzers.6.0.3.nupkg.sha512",
"C:\\Users\\Mohammad\\.nuget\\packages\\microsoft.extensions.caching.abstractions\\6.0.0\\microsoft.extensions.caching.abstractions.6.0.0.nupkg.sha512",
"C:\\Users\\Mohammad\\.nuget\\packages\\microsoft.extensions.caching.memory\\6.0.1\\microsoft.extensions.caching.memory.6.0.1.nupkg.sha512",
"C:\\Users\\Mohammad\\.nuget\\packages\\microsoft.extensions.dependencyinjection\\6.0.0\\microsoft.extensions.dependencyinjection.6.0.0.nupkg.sha512",
"C:\\Users\\Mohammad\\.nuget\\packages\\microsoft.extensions.dependencyinjection.abstractions\\6.0.0\\microsoft.extensions.dependencyinjection.abstractions.6.0.0.nupkg.sha512",
"C:\\Users\\Mohammad\\.nuget\\packages\\microsoft.extensions.logging\\6.0.0\\microsoft.extensions.logging.6.0.0.nupkg.sha512",
"C:\\Users\\Mohammad\\.nuget\\packages\\microsoft.extensions.logging.abstractions\\6.0.0\\microsoft.extensions.logging.abstractions.6.0.0.nupkg.sha512",
"C:\\Users\\Mohammad\\.nuget\\packages\\microsoft.extensions.options\\6.0.0\\microsoft.extensions.options.6.0.0.nupkg.sha512",
"C:\\Users\\Mohammad\\.nuget\\packages\\microsoft.extensions.primitives\\6.0.0\\microsoft.extensions.primitives.6.0.0.nupkg.sha512",
"C:\\Users\\Mohammad\\.nuget\\packages\\newtonsoft.json\\13.0.1\\newtonsoft.json.13.0.1.nupkg.sha512",
"C:\\Users\\Mohammad\\.nuget\\packages\\system.collections.immutable\\6.0.0\\system.collections.immutable.6.0.0.nupkg.sha512",
"C:\\Users\\Mohammad\\.nuget\\packages\\system.diagnostics.diagnosticsource\\6.0.0\\system.diagnostics.diagnosticsource.6.0.0.nupkg.sha512",
"C:\\Users\\Mohammad\\.nuget\\packages\\system.linq.dynamic.core\\1.6.7\\system.linq.dynamic.core.1.6.7.nupkg.sha512",
"C:\\Users\\Mohammad\\.nuget\\packages\\system.runtime.compilerservices.unsafe\\6.0.0\\system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512"
],
"logs": []
}

View File

@@ -0,0 +1,11 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Complex.Domain.Commons
{
[AttributeUsage(AttributeTargets.Class)]
public class AuditableAttribute:Attribute
{
}
}

View File

@@ -0,0 +1,34 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
namespace Complex.Domain.Commons
{
/// <summary>
/// دارای شماره / تاریخ ثبت / تاریخ ویرایش / حذف شده یا خیر / زمان حذف
/// </summary>
/// <typeparam name="TKey"></typeparam>
public abstract class BaseEntity<TKey>
{
//[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public TKey Id { get; set; }
//public DateTime? InsertTime { get; private set; } = DateTime.Now;
//public DateTime? UpdateTime { get; private set; }
//[JsonIgnore]
//public bool IsRemoved { get; private set; } = false;
//[JsonIgnore]
//public DateTime? RemoveTime { get; private set; }
}
/// <summary>
/// دارای شماره عددی پیش فرض اینت / تاریخ ثبت / تاریخ ویرایش / حذف شده یا خیر / زمان حذف
/// </summary>
/// <typeparam name="TKey"></typeparam>
public abstract class BaseEntity : BaseEntity<int>
{
}
}

View File

@@ -0,0 +1,12 @@
using System;
namespace Complex.Domain.Commons
{
public abstract class BaseEntityNotId
{
public DateTime InsertTime { get; set; } = DateTime.Now;
public DateTime? UpdateTime { get; set; }
public bool IsRemoved { get; set; } = false;
public DateTime? RemoveTime { get; set; }
}
}

View File

@@ -0,0 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<None Remove="Entities\UnitAmountTrans.c--aaas" />
</ItemGroup>
<ItemGroup>
<Compile Include="Entities\UnitAmountTrans.c--aaas" />
</ItemGroup>
<ItemGroup>
<Folder Include="PersonEntites\" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,10 @@
using Complex.Domain.Commons;
namespace Complex.Domain.Entities
{
public class BasicTable: BaseEntity
{
//public int Id { set; get; }
public string Title { set; get; }
}
}

View File

@@ -0,0 +1,37 @@
using Complex.Domain.Commons;
using System.ComponentModel.DataAnnotations;
namespace Complex.Domain.Entities
{
/// <summary>
/// مدیریت شارژ
/// </summary>
[Auditable]//UnitCharge
public class CostCycle:BaseEntity<Guid>
{
public Guid ComplexId { set; get; }
public virtual ComplexEntity Complex { set; get; }
public string Title { set; get; }
public DateOnly StartDate { set; get; }
public DateOnly EndDate { set; get; }
public long Amount { set; get; } = 0;
/// <summary>
/// روز از ماه برای تشویقی
/// </summary>
public int EncouragementDay { set; get; } = 0;
/// <summary>
/// مبلغ اجاره با احتساب تشویقی
/// </summary>
public long EncouragementAmount { set; get; } = 0;
/// <summary>
/// اگر برای واحدهای خاصی بود
/// </summary>
//public virtual List<UnitChargeCycle>? UnitChargeCycles { set; get; }
public virtual ICollection<Unit> Units { set; get; }
/// <summary>
/// null یعنی شارژ
/// </summary>
public int? IncomeCostTitleId { set; get; }
public virtual IncomeCostTitle? IncomeCostTitle { set; get; }
}
}

View File

@@ -0,0 +1,12 @@
using Complex.Domain.Commons;
namespace Complex.Domain.Entities
{
public class Chat:BaseEntity<long>
{
public Guid ComplexId { set; get; }
public string PersonMobileNumber { set; get; }
public string Body { set; get; }
public byte ChatTypeId { set; get; }
}
}

View File

@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
namespace Complex.Domain.Entities
{
public partial class City
{
public City()
{
}
public int CityId { get; set; }
public int? ProvinceId { get; set; }
public string? CityTitle { get; set; }
public virtual Province? Province { get; set; }
}
}

View File

@@ -0,0 +1,43 @@
using Complex.Domain.Commons;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Complex.Domain.Entities
{
[Auditable]
public class ComplexEntity : BaseEntity<Guid>
{
public string Title { set; get; }
public string? Address { set; get; }
/// <summary>
/// وضعیت
/// </summary>
public int? StateId { set; get; }
/// <summary>
/// متراژ کل
/// </summary>
public int? AreaMeter { set; get; }
/// <summary>
/// متراژ حیاط
/// </summary>
public int? YardMeter { set; get; }
/// <summary>
/// تعداد آسانسور
/// </summary>
public int? ElevatorCount { set; get; }
/// <summary> تعداد انباری</summary>
public int? WarehouseCount { set; get; }
public int? YearMake { set; get; }
public Guid? ParentId { set; get; }
public ComplexEntity? Parent { set; get; }
public string? Description { set; get; }
public int CityId { set; get; }
public virtual City City { set; get; }
public virtual Collection<ComplexManager> ComplexManagers { set; get; }
public virtual ICollection<Unit> Units { set; get; }
}
}

View File

@@ -0,0 +1,22 @@
using Complex.Domain.Commons;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Complex.Domain.Entities
{
[Auditable]
public class ComplexManager
{
public int Id { set; get; }
public Guid ComplexId { set; get; }
public virtual ComplexEntity Complex { set; get; }
public string? ManagerMobileNumberId { set; get; }
public Person? ManagerMobileNumber { set; get; }
public string StartDate { set; get; }
public string EndDate { set; get; }
}
}

View File

@@ -0,0 +1,28 @@
using Complex.Domain.Commons;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Complex.Domain.Entities
{
[Auditable]
public class ComplexUnitEvent : BaseEntity<long>
{
/// <summary>
/// اگر برای واحد بود
/// </summary>
public Guid? UnitId { set; get; }
/// <summary>
/// اگر برای مجتمع بود
/// </summary>
public int? ComplexId { set; get; }
[MaxLength(10)]
public string EventDate { set; get; }
public string RegisterMobileNumber { set; get; }
public string Body { set; get; }
public string? Description { set; get; }
}
}

View File

@@ -0,0 +1,32 @@
using Complex.Domain.Commons;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Complex.Domain.Entities
{
[Auditable]
public class Person : BaseEntity<string>
{
//[Key]
//public string MobileNumber { set; get; }
public ICollection<UserToken> UserTokens { get; set; }
public string? FirstName { get; set; }
public string? LastName { get; set; }
public byte? Gender { set;get; }
//public int? MobileCode { set;get; }
public byte[]? Avatar { set; get; }
public bool IsActive { set; get; } = true;
}
public class ComplexPerson : BaseEntity<int>
{
public Guid ComplexId { set; get; }
//public virtual ComplexEntity Complex { set; get; }
public string? PersonMobileNumberId { set; get; }
public Person? PersonMobileNumber { set; get; }
}
}

View File

@@ -0,0 +1,11 @@
using Complex.Domain.Commons;
namespace Complex.Domain.Entities
{
public class Poster:BaseEntity<int>
{
public string RegisterMobileNumber { set; get; }
public bool IsActive { set; get; } = false;
public string ImagePath { set; get; }
}
}

View File

@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
namespace Complex.Domain.Entities
{
public partial class Province
{
public Province()
{
Cities = new HashSet<City>();
}
public int ProvinceId { get; set; }
public string? ProvinceTitle { get; set; }
public virtual ICollection<City> Cities { get; set; }
}
}

View File

@@ -0,0 +1,13 @@
using Complex.Domain.Commons;
namespace Complex.Domain.Entities
{
public class SmsCode:BaseEntity
{
public string PhoneNumber { get; set; }
public string Code { get; set; }
public bool Used { get; set; }
public int RequestCount { get; set; }
public DateTime InsertDate { get; set; }
}
}

Some files were not shown because too many files have changed in this diff Show More