From fcd341f73fac42bc59121202070413ab86ae6973 Mon Sep 17 00:00:00 2001
From: JawerZeng <790899040@qq.com>
Date: Fri, 9 Aug 2024 09:35:52 +0800
Subject: [PATCH] update version
---
.../ModernWMS.Core/DBContext/SqlDBContext.cs | 2 +
.../Extentions/StartupExtensions.cs | 46 ++--
backend/ModernWMS.Core/JWT/CurrentUser.cs | 4 +-
.../Models/GlobalUniqueSerialEntity.cs | 46 ++++
.../ModernWMS.Core/Utility/FucntionHelper.cs | 176 ++++++++++++
.../Controllers/Asn/AsnController.cs | 17 +-
.../Dispatchlist/DispatchlistController.cs | 38 +++
.../Controllers/Stock/StockController.cs | 18 ++
.../Stockprocess/StockprocessController.cs | 1 +
.../Entities/Models/Asn/AsnEntity.cs | 9 +
.../Models/Dispatchlist/DispatchlistEntity.cs | 18 +-
.../Dispatchlist/DispatchpicklistEntity.cs | 26 ++
.../Entities/Models/Stock/StockEntity.cs | 16 ++
.../Models/Stockadjust/StockadjustEntity.cs | 16 ++
.../Models/Stockmove/StockmoveEntity.cs | 16 ++
.../Stockprocess/StockprocessdetailEntity.cs | 16 ++
.../Models/Stocktaking/StocktakingEntity.cs | 20 ++
.../Asn/AsnPrintSeriesNumberViewModel.cs | 70 +++++
.../Entities/ViewModels/Asn/AsnViewModel.cs | 13 +
.../Asn/Asnmaster/AsnmasterDetailViewModel.cs | 24 ++
.../ViewModels/Asn/AsnsortViewModel.cs | 73 +++++
.../Asn/Flow/AsnsortInputViewModel.cs | 11 +
.../DispatchlistConfirmPickDetailViewModel.cs | 19 +-
.../DispatchlistDetailViewModel.cs | 13 +
.../Dispatchlist/DispatchlistViewModel.cs | 10 +
.../Dispatchlist/DispatchpicklistViewModel.cs | 26 ++
.../Stock/DeliveryStatisticViewModel.cs | 16 ++
.../LocationStockForPhoneSearchViewModel.cs | 12 +
.../Stock/LocationStockManagementViewModel.cs | 18 ++
.../Stock/StockAgeSearchViewModel.cs | 112 ++++++++
.../ViewModels/Stock/StockAgeViewModel.cs | 101 +++++++
.../Stock/StockManagementViewModel.cs | 9 +-
.../ViewModels/Stock/StockViewModel.cs | 18 ++
.../Stockadjust/StockadjustViewModel.cs | 16 ++
.../Stockmove/StockmoveViewModel.cs | 16 ++
.../StockprocessdetailViewModel.cs | 16 ++
.../Stocktaking/StocktakingBasicViewModel.cs | 20 ++
.../IServices/Asn/IAsnService.cs | 11 +-
.../Dispatchlist/IDispatchlistService.cs | 16 ++
.../IServices/Stock/IStockService.cs | 8 +
.../ModernWMS.WMS/Services/Asn/AsnService.cs | 250 +++++++++++++++---
.../Dispatchlist/DispatchlistService.cs | 249 ++++++++++++-----
.../Services/Stock/StockService.cs | 183 +++++++++++--
.../Stockadjust/StockadjustService.cs | 11 +-
.../Stockfreeze/StockfreezeService.cs | 20 +-
.../Services/Stockmove/StockmoveService.cs | 54 ++--
.../Stockprocess/StockprocessService.cs | 62 ++++-
.../Stocktaking/StocktakingService.cs | 40 ++-
.../Services/user/UserService.cs | 19 ++
49 files changed, 1814 insertions(+), 207 deletions(-)
create mode 100644 backend/ModernWMS.Core/Models/GlobalUniqueSerialEntity.cs
create mode 100644 backend/ModernWMS.Core/Utility/FucntionHelper.cs
create mode 100644 backend/ModernWMS.WMS/Entities/ViewModels/Asn/AsnPrintSeriesNumberViewModel.cs
create mode 100644 backend/ModernWMS.WMS/Entities/ViewModels/Asn/AsnsortViewModel.cs
create mode 100644 backend/ModernWMS.WMS/Entities/ViewModels/Stock/StockAgeSearchViewModel.cs
create mode 100644 backend/ModernWMS.WMS/Entities/ViewModels/Stock/StockAgeViewModel.cs
diff --git a/backend/ModernWMS.Core/DBContext/SqlDBContext.cs b/backend/ModernWMS.Core/DBContext/SqlDBContext.cs
index f2e0d72..7b786c1 100644
--- a/backend/ModernWMS.Core/DBContext/SqlDBContext.cs
+++ b/backend/ModernWMS.Core/DBContext/SqlDBContext.cs
@@ -10,6 +10,7 @@ using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
using Microsoft.Data.SqlClient;
using Mapster;
using Microsoft.AspNetCore.JsonPatch.Internal;
+using ModernWMS.Core.Models;
namespace ModernWMS.Core.DBContext
{
@@ -71,6 +72,7 @@ namespace ModernWMS.Core.DBContext
///
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
+ modelBuilder.Entity();
MappingEntityTypes(modelBuilder);
/*foreach (var entityType in modelBuilder.Model.GetEntityTypes())
{
diff --git a/backend/ModernWMS.Core/Extentions/StartupExtensions.cs b/backend/ModernWMS.Core/Extentions/StartupExtensions.cs
index 113ae43..0eb381d 100644
--- a/backend/ModernWMS.Core/Extentions/StartupExtensions.cs
+++ b/backend/ModernWMS.Core/Extentions/StartupExtensions.cs
@@ -54,7 +54,7 @@ namespace ModernWMS.Core.Extentions
var cache = new MemoryCache(new MemoryCacheOptions());
return cache;
});
-
+
var database_config = configuration.GetSection("Database")["db"];
services.AddDbContextPool(t =>
{
@@ -73,7 +73,6 @@ namespace ModernWMS.Core.Extentions
var SqlServer_connection = configuration.GetConnectionString("SqlServerConn");
t.UseSqlServer(SqlServer_connection);
}
-
else if (database_config.ToUpper() == "POSTGRES")
{
var Postgre_connection = configuration.GetConnectionString("PostGresConn");
@@ -85,7 +84,7 @@ namespace ModernWMS.Core.Extentions
t.UseLoggerFactory(new LoggerFactory(new[] { new DebugLoggerProvider() }));
}, 100); ;
services.AddMemoryCache();
- services.AddScoped();
+ services.AddScoped();
services.AddSwaggerService(configuration, AppContext.BaseDirectory);
services.AddTokenGeneratorService(configuration);
services.RegisterAssembly();
@@ -104,7 +103,8 @@ namespace ModernWMS.Core.Extentions
options.SerializerSettings.Converters.Add(new JsonStringTrimConverter());
options.SerializerSettings.Formatting = Formatting.Indented;
options.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver();
- }).AddDataAnnotationsLocalization(options => {
+ }).AddDataAnnotationsLocalization(options =>
+ {
options.DataAnnotationLocalizerProvider = (type, factory) =>
factory.Create(typeof(ModernWMS.Core.MultiLanguage));
});
@@ -115,9 +115,9 @@ namespace ModernWMS.Core.Extentions
.UseRecommendedSerializerSettings()
.UseStorage(new MemoryStorage()));
services.AddHangfireServer();
-
-
+ services.AddScoped();
}
+
public static void UseExtensionsConfigure(this IApplicationBuilder app, IWebHostEnvironment env, IServiceProvider serviceProvider, IConfiguration configuration)
{
if (env.IsDevelopment())
@@ -131,7 +131,7 @@ namespace ModernWMS.Core.Extentions
app.UseTokenGeneratorConfigure(configuration);
app.UseAuthorization();
app.UseMiddleware();
- var support_languages = new[] { "zh-cn", "en-us" };
+ var support_languages = new[] { "zh-cn", "en-us" };
var localization_options = new RequestLocalizationOptions()
.SetDefaultCulture(support_languages[0])
.AddSupportedCultures(support_languages)
@@ -152,7 +152,9 @@ namespace ModernWMS.Core.Extentions
endpoints.MapControllers();
});
}
+
#region Swagger
+
///
/// Swagger
///
@@ -184,7 +186,6 @@ namespace ModernWMS.Core.Extentions
});
});
-
if (settings.XmlFiles != null && settings.XmlFiles.Count > 0)
{
settings.XmlFiles.ForEach(fileName =>
@@ -200,7 +201,6 @@ namespace ModernWMS.Core.Extentions
c.OperationFilter();
c.OperationFilter();
-
c.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme
{
Description = "please input Bearer {token}",
@@ -209,10 +209,10 @@ namespace ModernWMS.Core.Extentions
Type = SecuritySchemeType.ApiKey
});
c.SwaggerGeneratorOptions.DescribeAllParametersInCamelCase = false;
-
});
}
}
+
///
/// register Swagger
///
@@ -220,7 +220,6 @@ namespace ModernWMS.Core.Extentions
/// 配置文件
private static void UseSwaggerConfigure(this IApplicationBuilder app, IConfiguration configuration)
{
-
var swaggerSettings = configuration.GetSection("SwaggerSettings");
if (swaggerSettings != null && swaggerSettings["Name"].Equals("ModernWMS"))
@@ -236,14 +235,14 @@ namespace ModernWMS.Core.Extentions
c.IndexStream = () => Assembly.GetExecutingAssembly().GetManifestResourceStream("ModernWMS.Core.Swagger.index.html");
c.RoutePrefix = "";
-
});
-
}
}
- #endregion
+
+ #endregion Swagger
#region JWT
+
///
/// register JWT
///
@@ -251,7 +250,6 @@ namespace ModernWMS.Core.Extentions
/// configuration
private static void AddTokenGeneratorService(this IServiceCollection services, IConfiguration configuration)
{
-
if (services == null)
{
throw new ArgumentNullException(nameof(services));
@@ -264,7 +262,7 @@ namespace ModernWMS.Core.Extentions
{
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
- options.DefaultChallengeScheme = nameof(ApiResponseHandler);
+ options.DefaultChallengeScheme = nameof(ApiResponseHandler);
options.DefaultForbidScheme = nameof(ApiResponseHandler);
}
)
@@ -283,24 +281,23 @@ namespace ModernWMS.Core.Extentions
};
})
.AddScheme(nameof(ApiResponseHandler), o => { });
-
}
private static void UseTokenGeneratorConfigure(this IApplicationBuilder app, IConfiguration configuration)
{
app.UseAuthentication();
}
- #endregion
- #region dynamic injection
+ #endregion JWT
+
+ #region dynamic injection
+
///
- /// judge the dll to be injected by IDependency
+ /// judge the dll to be injected by IDependency
///
/// services
private static IServiceCollection RegisterAssembly(this IServiceCollection services)
{
-
-
var path = AppDomain.CurrentDomain.RelativeSearchPath ?? AppDomain.CurrentDomain.BaseDirectory;
var referencedAssemblies = System.IO.Directory.GetFiles(path, "ModernWMS*.dll").Select(Assembly.LoadFrom).ToArray();
@@ -335,6 +332,7 @@ namespace ModernWMS.Core.Extentions
return services;
}
+
///
/// AddHangfireJob
///
@@ -361,7 +359,7 @@ namespace ModernWMS.Core.Extentions
}
}
}
- #endregion
+ #endregion dynamic injection
}
-}
+}
\ No newline at end of file
diff --git a/backend/ModernWMS.Core/JWT/CurrentUser.cs b/backend/ModernWMS.Core/JWT/CurrentUser.cs
index dc32b03..367dfc1 100644
--- a/backend/ModernWMS.Core/JWT/CurrentUser.cs
+++ b/backend/ModernWMS.Core/JWT/CurrentUser.cs
@@ -12,10 +12,12 @@ namespace ModernWMS.Core.JWT
/// user_id
///
public int user_id { get; set; } = 1;
+
///
/// user_num
///
public string user_num { get; set; } = "admin";
+
///
/// user_name
///
@@ -31,4 +33,4 @@ namespace ModernWMS.Core.JWT
///
public long tenant_id { get; set; } = 1;
}
-}
+}
\ No newline at end of file
diff --git a/backend/ModernWMS.Core/Models/GlobalUniqueSerialEntity.cs b/backend/ModernWMS.Core/Models/GlobalUniqueSerialEntity.cs
new file mode 100644
index 0000000..cd76520
--- /dev/null
+++ b/backend/ModernWMS.Core/Models/GlobalUniqueSerialEntity.cs
@@ -0,0 +1,46 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ModernWMS.Core.Models
+{
+ ///
+ /// global_unique_serial entity
+ ///
+ [Table("global_unique_serial")]
+ public class GlobalUniqueSerialEntity : BaseModel
+ {
+ ///
+ /// table name
+ ///
+ public string table_name { get; set; } = string.Empty;
+
+ ///
+ ///
+ ///
+ public string prefix_char { get; set; } = string.Empty;
+
+ ///
+ ///
+ ///
+ public string reset_rule { get; set; } = string.Empty;
+
+ ///
+ ///
+ ///
+ public int current_no { get; set; } = 1;
+
+ ///
+ ///
+ ///
+ public DateTime last_update_time { get; set; } = DateTime.Now;
+
+ ///
+ /// current user's tenant_id
+ ///
+ public long tenant_id { get; set; } = 1;
+ }
+}
\ No newline at end of file
diff --git a/backend/ModernWMS.Core/Utility/FucntionHelper.cs b/backend/ModernWMS.Core/Utility/FucntionHelper.cs
new file mode 100644
index 0000000..5bfa0e2
--- /dev/null
+++ b/backend/ModernWMS.Core/Utility/FucntionHelper.cs
@@ -0,0 +1,176 @@
+using Microsoft.AspNetCore.Http;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.IdentityModel.Tokens;
+using ModernWMS.Core.DBContext;
+using ModernWMS.Core.JWT;
+using ModernWMS.Core.Models;
+using ModernWMS.Core.Utility;
+using System;
+using System.Collections.Generic;
+using System.IdentityModel.Tokens.Jwt;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ModernWMS.Core
+{
+ public class FunctionHelper
+ {
+ private readonly SqlDBContext _dBContext;
+ private readonly IHttpContextAccessor _accessor;
+
+ public FunctionHelper(SqlDBContext dBContext
+ , IHttpContextAccessor accessor)
+ {
+ _dBContext = dBContext;
+ _accessor = accessor;
+ }
+
+ ///
+ /// Get the current user information in the token
+ ///
+ ///
+ public CurrentUser GetCurrentUser()
+ {
+ if (_accessor.HttpContext == null)
+ {
+ return new CurrentUser();
+ }
+ var token = _accessor.HttpContext.Request.Headers["Authorization"].ObjToString();
+ if (!token.StartsWith("Bearer"))
+ {
+ return new CurrentUser();
+ }
+ token = token.Replace("Bearer ", "");
+ if (token.Length > 0)
+ {
+ var principal = new JwtSecurityTokenHandler().ValidateToken(token,
+ new TokenValidationParameters
+ {
+ ValidateAudience = false,
+ ValidateIssuer = false,
+ ValidateIssuerSigningKey = true,
+ IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(GlobalConsts.SigningKey)),
+ ValidateLifetime = false
+ },
+ out var securityToken);
+
+ if (!(securityToken is JwtSecurityToken jwtSecurityToken) ||
+ !jwtSecurityToken.Header.Alg.Equals(SecurityAlgorithms.HmacSha256, StringComparison.InvariantCultureIgnoreCase))
+ {
+ return new CurrentUser();
+ }
+ var user = JsonHelper.DeserializeObject(principal.Claims.First(claim => claim.Type == ClaimValueTypes.Json).Value);
+ if (user != null)
+ {
+ return user;
+ }
+ else
+ {
+ return new CurrentUser();
+ }
+ }
+ else
+ {
+ return new CurrentUser();
+ }
+ }
+
+ ///
+ /// 序号表获取单据编号
+ ///
+ /// 表名
+ /// 前缀
+ /// 重置规则
+ ///
+ public async Task GetFormNoAsync(string table_name, string prefix_char = "", ResetRule reset_rule = ResetRule.Day)
+ {
+ var current_user = GetCurrentUser();
+ var nums = await GetFormNoListAsync(table_name, 1, current_user.tenant_id, prefix_char, reset_rule);
+ if (nums == null)
+ {
+ return "";
+ }
+ else
+ {
+ return nums[0];
+ }
+ }
+
+ ///
+ /// 序号表获取单据编号
+ ///
+ /// 表名
+ /// 租户id
+ /// 前缀
+ /// 编号数量
+ /// 重置规则
+ ///
+ public async Task> GetFormNoListAsync(string table_name, int Qty = 1, long tenant_id = 1, string prefix_char = "", ResetRule reset_rule = ResetRule.Day)
+ {
+ List nums = new List();
+ string _reset_rule = "yyyyMMdd";
+ if (reset_rule == ResetRule.Year) _reset_rule = "yyyy";
+ else if (reset_rule == ResetRule.Month) _reset_rule = "yyyyMM";
+
+ var dbSet = _dBContext.Set();
+ var entity = await dbSet.FirstOrDefaultAsync(t => t.table_name == table_name && t.prefix_char == prefix_char && t.reset_rule == _reset_rule);
+ if (entity == null)
+ {
+ for (int index = 1; index <= Qty; index++)
+ {
+ nums.Add($"{prefix_char}{DateTime.Now.ToString(_reset_rule)}-{index.ToString().PadLeft(4, '0')}");
+ }
+ entity = new GlobalUniqueSerialEntity
+ {
+ table_name = table_name,
+ prefix_char = prefix_char,
+ reset_rule = _reset_rule,
+ current_no = Qty + 1,
+ last_update_time = DateTime.Now,
+ tenant_id = tenant_id
+ };
+ dbSet.Add(entity);
+ await _dBContext.SaveChangesAsync();
+ }
+ else
+ {
+ int current_no = entity.current_no;
+ if (!DateTime.Now.ToString(_reset_rule).Equals(entity.last_update_time.ToString(_reset_rule)))
+ {
+ current_no = 1;
+ }
+ for (int index = 1; index <= Qty; index++)
+ {
+ nums.Add($"{prefix_char}{DateTime.Now.ToString(_reset_rule)}-{current_no.ToString().PadLeft(4, '0')}");
+ current_no++;
+ }
+ entity.current_no = current_no;
+ entity.last_update_time = DateTime.Now;
+ await _dBContext.SaveChangesAsync();
+ }
+ return nums;
+ }
+
+ ///
+ /// 重置规则
+ ///
+ public enum ResetRule
+ {
+ ///
+ /// 年
+ ///
+ Year,
+
+ ///
+ /// 月
+ ///
+ Month,
+
+ ///
+ /// 日
+ ///
+ Day
+ }
+ }
+}
\ No newline at end of file
diff --git a/backend/ModernWMS.WMS/Controllers/Asn/AsnController.cs b/backend/ModernWMS.WMS/Controllers/Asn/AsnController.cs
index 0d89695..65c8802 100644
--- a/backend/ModernWMS.WMS/Controllers/Asn/AsnController.cs
+++ b/backend/ModernWMS.WMS/Controllers/Asn/AsnController.cs
@@ -362,10 +362,10 @@ namespace ModernWMS.WMS.Controllers
/// asn id
///
[HttpGet("sorting")]
- public async Task>> GetAsnsortsAsync(int asn_id)
+ public async Task>> GetAsnsortsAsync(int asn_id)
{
var data = await _asnService.GetAsnsortsAsync(asn_id);
- return ResultModel>.Success(data);
+ return ResultModel>.Success(data);
}
///
@@ -460,6 +460,19 @@ namespace ModernWMS.WMS.Controllers
}
#endregion
+ #region print series number
+ ///
+ /// print series number
+ ///
+ /// selected asn id
+ ///
+ [HttpPost("print-sn")]
+ public async Task>> GetAsnPrintSeriesNumberAsync(List input)
+ {
+ var data = await _asnService.GetAsnPrintSeriesNumberAsync(input);
+ return ResultModel>.Success(data);
+ }
+ #endregion
}
}
diff --git a/backend/ModernWMS.WMS/Controllers/Dispatchlist/DispatchlistController.cs b/backend/ModernWMS.WMS/Controllers/Dispatchlist/DispatchlistController.cs
index a692074..62e02c3 100644
--- a/backend/ModernWMS.WMS/Controllers/Dispatchlist/DispatchlistController.cs
+++ b/backend/ModernWMS.WMS/Controllers/Dispatchlist/DispatchlistController.cs
@@ -205,6 +205,44 @@ namespace ModernWMS.WMS.Controllers
}
}
+ ///
+ /// confirm pick detail
+ ///
+ /// dispatch list pick detail id
+ ///
+ [HttpPost("confirm-pick-detail")]
+ public async Task> ConfirmPickDetail([FromBody]List picklist_id)
+ {
+ var (flag, msg) = await _dispatchlistService.ConfirmPickDetail(picklist_id, CurrentUser);
+ if (flag)
+ {
+ return ResultModel.Success(msg);
+ }
+ else
+ {
+ return ResultModel.Error(msg);
+ }
+ }
+
+ ///
+ /// confirm pick detail
+ ///
+ /// dispatch list pick detail id
+ ///
+ [HttpPost("cancel-confirm-pick-detail")]
+ public async Task> CancelConfirmPickDetail([FromBody] List picklist_id)
+ {
+ var (flag, msg) = await _dispatchlistService.CancelConfirmPickDetail(picklist_id, CurrentUser);
+ if (flag)
+ {
+ return ResultModel.Success(msg);
+ }
+ else
+ {
+ return ResultModel.Error(msg);
+ }
+ }
+
///
/// package dispatchpicklist
///
diff --git a/backend/ModernWMS.WMS/Controllers/Stock/StockController.cs b/backend/ModernWMS.WMS/Controllers/Stock/StockController.cs
index 1304aea..364e784 100644
--- a/backend/ModernWMS.WMS/Controllers/Stock/StockController.cs
+++ b/backend/ModernWMS.WMS/Controllers/Stock/StockController.cs
@@ -169,6 +169,24 @@ namespace ModernWMS.WMS.Controllers
});
}
+
+
+ ///
+ /// stock age page search
+ ///
+ /// args
+ ///
+ [HttpPost("stock-age-list")]
+ public async Task>> StockAgePageAsync(StockAgeSearchViewModel input)
+ {
+ var (data, totals) = await _stockService.StockAgePageAsync(input, CurrentUser);
+
+ return ResultModel>.Success(new PageData
+ {
+ Rows = data,
+ Totals = totals
+ });
+ }
#endregion Api
}
}
\ No newline at end of file
diff --git a/backend/ModernWMS.WMS/Controllers/Stockprocess/StockprocessController.cs b/backend/ModernWMS.WMS/Controllers/Stockprocess/StockprocessController.cs
index 818431b..f61a1fb 100644
--- a/backend/ModernWMS.WMS/Controllers/Stockprocess/StockprocessController.cs
+++ b/backend/ModernWMS.WMS/Controllers/Stockprocess/StockprocessController.cs
@@ -1,6 +1,7 @@
/*
* date:2022-12-23
* developer:NoNo
+ * modify:20240202
*/
using Microsoft.AspNetCore.Mvc;
using ModernWMS.Core.Controller;
diff --git a/backend/ModernWMS.WMS/Entities/Models/Asn/AsnEntity.cs b/backend/ModernWMS.WMS/Entities/Models/Asn/AsnEntity.cs
index 18c20b8..95a280b 100644
--- a/backend/ModernWMS.WMS/Entities/Models/Asn/AsnEntity.cs
+++ b/backend/ModernWMS.WMS/Entities/Models/Asn/AsnEntity.cs
@@ -161,6 +161,15 @@ namespace ModernWMS.WMS.Entities.Models
public long tenant_id { get; set; } = 1;
+ ///
+ /// expiry_date
+ ///
+ public DateTime expiry_date { get; set; } = Core.Utility.UtilConvert.MinDate;
+
+ ///
+ /// price
+ ///
+ public decimal price { get; set; } = 0;
#endregion
}
diff --git a/backend/ModernWMS.WMS/Entities/Models/Dispatchlist/DispatchlistEntity.cs b/backend/ModernWMS.WMS/Entities/Models/Dispatchlist/DispatchlistEntity.cs
index 4dcb4d8..ed58677 100644
--- a/backend/ModernWMS.WMS/Entities/Models/Dispatchlist/DispatchlistEntity.cs
+++ b/backend/ModernWMS.WMS/Entities/Models/Dispatchlist/DispatchlistEntity.cs
@@ -166,16 +166,26 @@ namespace ModernWMS.WMS.Entities.Models
///
public long tenant_id { get; set; } = 0;
+ ///
+ /// pick_checker_id
+ ///
+ public int pick_checker_id { get; set; } = 0;
+
+ ///
+ /// pick_checker
+ ///
+ public string pick_checker { get; set; } = string.Empty;
+
#endregion
#region detail table
- ///
- /// detail table
- ///
- public List detailList { get; set; } = new List(2);
+ ///
+ /// detail table
+ ///
+ public List detailList { get; set; } = new List(2);
#endregion
diff --git a/backend/ModernWMS.WMS/Entities/Models/Dispatchlist/DispatchpicklistEntity.cs b/backend/ModernWMS.WMS/Entities/Models/Dispatchlist/DispatchpicklistEntity.cs
index 5a48233..aa0d341 100644
--- a/backend/ModernWMS.WMS/Entities/Models/Dispatchlist/DispatchpicklistEntity.cs
+++ b/backend/ModernWMS.WMS/Entities/Models/Dispatchlist/DispatchpicklistEntity.cs
@@ -75,6 +75,32 @@ namespace ModernWMS.WMS.Entities.Models
///
public string series_number { get; set; } = string.Empty;
+ ///
+ /// picker_id
+ ///
+ public int picker_id { get; set; } = 0;
+
+ ///
+ /// picker
+ ///
+ public string picker { get; set; } = string.Empty;
+
+ ///
+ /// expiry_date
+ ///
+ public DateTime expiry_date { get; set; } = UtilConvert.MinDate;
+
+ ///
+ /// price
+ ///
+ public decimal price { get; set; } = 0;
+
+ ///
+ /// putaway_date
+ ///
+ public DateTime putaway_date { get; set; } = UtilConvert.MinDate;
+
+
#endregion Property
}
}
\ No newline at end of file
diff --git a/backend/ModernWMS.WMS/Entities/Models/Stock/StockEntity.cs b/backend/ModernWMS.WMS/Entities/Models/Stock/StockEntity.cs
index 4edea05..bee96bd 100644
--- a/backend/ModernWMS.WMS/Entities/Models/Stock/StockEntity.cs
+++ b/backend/ModernWMS.WMS/Entities/Models/Stock/StockEntity.cs
@@ -61,6 +61,22 @@ namespace ModernWMS.WMS.Entities.Models
///
public string series_number { get; set; } = string.Empty;
+ ///
+ /// expiry_date
+ ///
+ public DateTime expiry_date { get; set; } = UtilConvert.MinDate;
+
+ ///
+ /// price
+ ///
+ public decimal price { get; set; } = 0;
+
+ ///
+ /// putaway_date
+ ///
+ public DateTime putaway_date { get; set; } = UtilConvert.MinDate;
+
+
#endregion Property
}
}
\ No newline at end of file
diff --git a/backend/ModernWMS.WMS/Entities/Models/Stockadjust/StockadjustEntity.cs b/backend/ModernWMS.WMS/Entities/Models/Stockadjust/StockadjustEntity.cs
index d5b2e68..f83e457 100644
--- a/backend/ModernWMS.WMS/Entities/Models/Stockadjust/StockadjustEntity.cs
+++ b/backend/ModernWMS.WMS/Entities/Models/Stockadjust/StockadjustEntity.cs
@@ -85,6 +85,22 @@ namespace ModernWMS.WMS.Entities.Models
///
public string series_number { get; set; } = string.Empty;
+ ///
+ /// expiry_date
+ ///
+ public DateTime expiry_date { get; set; } = UtilConvert.MinDate;
+
+ ///
+ /// price
+ ///
+ public decimal price { get; set; } = 0;
+
+ ///
+ /// putaway_date
+ ///
+ public DateTime putaway_date { get; set; } = UtilConvert.MinDate;
+
+
#endregion Property
}
}
\ No newline at end of file
diff --git a/backend/ModernWMS.WMS/Entities/Models/Stockmove/StockmoveEntity.cs b/backend/ModernWMS.WMS/Entities/Models/Stockmove/StockmoveEntity.cs
index fef6ade..120da74 100644
--- a/backend/ModernWMS.WMS/Entities/Models/Stockmove/StockmoveEntity.cs
+++ b/backend/ModernWMS.WMS/Entities/Models/Stockmove/StockmoveEntity.cs
@@ -90,6 +90,22 @@ namespace ModernWMS.WMS.Entities.Models
///
public string series_number { get; set; } = string.Empty;
+ ///
+ /// expiry_date
+ ///
+ public DateTime expiry_date { get; set; } = UtilConvert.MinDate;
+
+ ///
+ /// price
+ ///
+ public decimal price { get; set; } = 0;
+
+ ///
+ /// putaway_date
+ ///
+ public DateTime putaway_date { get; set; } = UtilConvert.MinDate;
+
+
#endregion Property
}
}
\ No newline at end of file
diff --git a/backend/ModernWMS.WMS/Entities/Models/Stockprocess/StockprocessdetailEntity.cs b/backend/ModernWMS.WMS/Entities/Models/Stockprocess/StockprocessdetailEntity.cs
index b8c2f67..066fb1b 100644
--- a/backend/ModernWMS.WMS/Entities/Models/Stockprocess/StockprocessdetailEntity.cs
+++ b/backend/ModernWMS.WMS/Entities/Models/Stockprocess/StockprocessdetailEntity.cs
@@ -80,6 +80,22 @@ namespace ModernWMS.WMS.Entities.Models
///
public string series_number { get; set; } = string.Empty;
+ ///
+ /// expiry_date
+ ///
+ public DateTime expiry_date { get; set; } = UtilConvert.MinDate;
+
+ ///
+ /// price
+ ///
+ public decimal price { get; set; } = 0;
+
+ ///
+ /// putaway_date
+ ///
+ public DateTime putaway_date { get; set; } = UtilConvert.MinDate;
+
+
#endregion Property
}
}
\ No newline at end of file
diff --git a/backend/ModernWMS.WMS/Entities/Models/Stocktaking/StocktakingEntity.cs b/backend/ModernWMS.WMS/Entities/Models/Stocktaking/StocktakingEntity.cs
index d709f74..5ed1a6d 100644
--- a/backend/ModernWMS.WMS/Entities/Models/Stocktaking/StocktakingEntity.cs
+++ b/backend/ModernWMS.WMS/Entities/Models/Stocktaking/StocktakingEntity.cs
@@ -45,6 +45,26 @@ namespace ModernWMS.WMS.Entities.Models
///
public int goods_location_id { get; set; } = 0;
+ ///
+ /// series_number
+ ///
+ public string series_number { get; set; } = string.Empty;
+
+ ///
+ /// expiry_date
+ ///
+ public DateTime expiry_date { get; set; } = UtilConvert.MinDate;
+
+ ///
+ /// price
+ ///
+ public decimal price { get; set; } = 0;
+
+ ///
+ /// putaway_date
+ ///
+ public DateTime putaway_date { get; set; } = UtilConvert.MinDate;
+
///
/// book_qty
///
diff --git a/backend/ModernWMS.WMS/Entities/ViewModels/Asn/AsnPrintSeriesNumberViewModel.cs b/backend/ModernWMS.WMS/Entities/ViewModels/Asn/AsnPrintSeriesNumberViewModel.cs
new file mode 100644
index 0000000..1476006
--- /dev/null
+++ b/backend/ModernWMS.WMS/Entities/ViewModels/Asn/AsnPrintSeriesNumberViewModel.cs
@@ -0,0 +1,70 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ModernWMS.WMS.Entities.ViewModels
+{
+ ///
+ /// AsnPrintSeriesNumberViewModel
+ ///
+ public class AsnPrintSeriesNumberViewModel
+ {
+ ///
+ ///
+ ///
+ public AsnPrintSeriesNumberViewModel()
+ {
+
+ }
+
+
+ ///
+ /// asn_id
+ ///
+ public int asn_id { get; set; } = 0;
+
+ ///
+ /// asnmaster_id
+ ///
+ public int asnmaster_id { get; set; } = 0;
+
+ ///
+ /// sku_id
+ ///
+ public int sku_id { get; set; } = 0;
+
+ ///
+ /// asn_no
+ ///
+ public string asn_no { get; set; } = string.Empty;
+
+ ///
+ /// spu_code
+ ///
+ public string spu_code { get; set; } = string.Empty;
+
+ ///
+ /// spu_name
+ ///
+ public string spu_name { get; set; } = string.Empty;
+
+ ///
+ /// sku_code
+ ///
+ public string sku_code { get; set; } = string.Empty;
+
+ ///
+ /// sku_name
+ ///
+ public string sku_name { get; set; } = string.Empty;
+
+ ///
+ /// series_number
+ ///
+ public string series_number { get; set; } = string.Empty;
+
+ }
+}
diff --git a/backend/ModernWMS.WMS/Entities/ViewModels/Asn/AsnViewModel.cs b/backend/ModernWMS.WMS/Entities/ViewModels/Asn/AsnViewModel.cs
index efd55ce..2b451c6 100644
--- a/backend/ModernWMS.WMS/Entities/ViewModels/Asn/AsnViewModel.cs
+++ b/backend/ModernWMS.WMS/Entities/ViewModels/Asn/AsnViewModel.cs
@@ -247,6 +247,19 @@ namespace ModernWMS.WMS.Entities.ViewModels
[Display(Name = "is_valid")]
public bool is_valid { get; set; } = true;
+
+ ///
+ /// expiry_date
+ ///
+ public DateTime expiry_date { get; set; } = Core.Utility.UtilConvert.MinDate;
+
+
+ ///
+ /// price
+ ///
+ [Display(Name = "price")]
+ public decimal price { get; set; } = 0;
+
#endregion
}
diff --git a/backend/ModernWMS.WMS/Entities/ViewModels/Asn/Asnmaster/AsnmasterDetailViewModel.cs b/backend/ModernWMS.WMS/Entities/ViewModels/Asn/Asnmaster/AsnmasterDetailViewModel.cs
index 635f63a..8f02942 100644
--- a/backend/ModernWMS.WMS/Entities/ViewModels/Asn/Asnmaster/AsnmasterDetailViewModel.cs
+++ b/backend/ModernWMS.WMS/Entities/ViewModels/Asn/Asnmaster/AsnmasterDetailViewModel.cs
@@ -2,6 +2,7 @@
* date:2023-08-30
* developer:AMo
*/
+using ModernWMS.Core.Utility;
using System.ComponentModel.DataAnnotations;
namespace ModernWMS.WMS.Entities.ViewModels
@@ -152,6 +153,29 @@ namespace ModernWMS.WMS.Entities.ViewModels
[Display(Name = "is_valid")]
public bool is_valid { get; set; } = true;
+ ///
+ /// expiry_date
+ ///
+ [Display(Name = "expiry_date")]
+ public DateTime expiry_date { get; set; } = Core.Utility.UtilConvert.MinDate;
+
+ ///
+ /// price
+ ///
+ [Display(Name = "price")]
+ public decimal price { get; set; } = 0;
+
+ ///
+ /// sorted_qty
+ ///
+ public int sorted_qty { get; set; } = 0;
+
+ ///
+ /// putaway_date
+ ///
+ public DateTime putaway_date { get; set; } = UtilConvert.MinDate;
+
+
#endregion
}
diff --git a/backend/ModernWMS.WMS/Entities/ViewModels/Asn/AsnsortViewModel.cs b/backend/ModernWMS.WMS/Entities/ViewModels/Asn/AsnsortViewModel.cs
new file mode 100644
index 0000000..63a5d40
--- /dev/null
+++ b/backend/ModernWMS.WMS/Entities/ViewModels/Asn/AsnsortViewModel.cs
@@ -0,0 +1,73 @@
+/*
+ * date:2024-03-14
+ * developer:AMo
+ */
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ModernWMS.WMS.Entities.ViewModels
+{
+ ///
+ /// asn sort viewmodel
+ ///
+ public class AsnsortViewModel
+ {
+ ///
+ /// id
+ ///
+ public int id { get; set; } = 0;
+
+ ///
+ /// asn_id
+ ///
+ public int asn_id { get; set; } = 0;
+
+ ///
+ /// sorted_qty
+ ///
+ public int sorted_qty { get; set; } = 0;
+
+ ///
+ /// series_number
+ ///
+ public string series_number { get; set; } = string.Empty;
+
+ ///
+ /// putaway qty
+ ///
+ public int putaway_qty { get; set; } = 0;
+
+ ///
+ /// expiry_date
+ ///
+ public DateTime expiry_date { get; set; } = Core.Utility.UtilConvert.MinDate;
+
+ ///
+ /// creator
+ ///
+ public string creator { get; set; } = string.Empty;
+
+ ///
+ /// create_time
+ ///
+ public DateTime create_time { get; set; } = DateTime.Now;
+
+ ///
+ /// last_update_time
+ ///
+ public DateTime last_update_time { get; set; } = DateTime.Now;
+
+ ///
+ /// is_valid
+ ///
+ public bool is_valid { get; set; } = true;
+
+ ///
+ /// tenant_id
+ ///
+ public long tenant_id { get; set; } = 1;
+ }
+}
diff --git a/backend/ModernWMS.WMS/Entities/ViewModels/Asn/Flow/AsnsortInputViewModel.cs b/backend/ModernWMS.WMS/Entities/ViewModels/Asn/Flow/AsnsortInputViewModel.cs
index 7ea1d7a..3c4b0b6 100644
--- a/backend/ModernWMS.WMS/Entities/ViewModels/Asn/Flow/AsnsortInputViewModel.cs
+++ b/backend/ModernWMS.WMS/Entities/ViewModels/Asn/Flow/AsnsortInputViewModel.cs
@@ -31,6 +31,11 @@ namespace ModernWMS.WMS.Entities.ViewModels
[Display(Name = "asn_id")]
public int asn_id { get; set; } = 0;
+ ///
+ /// is automatically generate series number
+ ///
+ public bool is_auto_num { get; set; } = false;
+
///
/// series_number
///
@@ -42,6 +47,12 @@ namespace ModernWMS.WMS.Entities.ViewModels
[Display(Name = "sorted_qty")]
public int sorted_qty { get; set; } = 0;
+
+ ///
+ /// expiry_date
+ ///
+ public DateTime expiry_date { get; set; } = Core.Utility.UtilConvert.MinDate;
+
#endregion
}
}
diff --git a/backend/ModernWMS.WMS/Entities/ViewModels/Dispatchlist/DispatchlistConfirmPickDetailViewModel.cs b/backend/ModernWMS.WMS/Entities/ViewModels/Dispatchlist/DispatchlistConfirmPickDetailViewModel.cs
index 098c41c..3556704 100644
--- a/backend/ModernWMS.WMS/Entities/ViewModels/Dispatchlist/DispatchlistConfirmPickDetailViewModel.cs
+++ b/backend/ModernWMS.WMS/Entities/ViewModels/Dispatchlist/DispatchlistConfirmPickDetailViewModel.cs
@@ -1,4 +1,5 @@
-using System;
+using ModernWMS.Core.Utility;
+using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
@@ -79,6 +80,22 @@ namespace ModernWMS.WMS.Entities.ViewModels
[MaxLength(64, ErrorMessage = "MaxLength")]
public string series_number { get; set; } = string.Empty;
+ ///
+ /// expiry_date
+ ///
+ public DateTime expiry_date { get; set; } = UtilConvert.MinDate;
+
+ ///
+ /// price
+ ///
+ public decimal price { get; set; } = 0;
+
+ ///
+ /// putaway_date
+ ///
+ public DateTime putaway_date { get; set; } = UtilConvert.MinDate;
+
+
#endregion Property
}
}
\ No newline at end of file
diff --git a/backend/ModernWMS.WMS/Entities/ViewModels/Dispatchlist/DispatchlistDetailViewModel.cs b/backend/ModernWMS.WMS/Entities/ViewModels/Dispatchlist/DispatchlistDetailViewModel.cs
index 21dd0db..691190a 100644
--- a/backend/ModernWMS.WMS/Entities/ViewModels/Dispatchlist/DispatchlistDetailViewModel.cs
+++ b/backend/ModernWMS.WMS/Entities/ViewModels/Dispatchlist/DispatchlistDetailViewModel.cs
@@ -225,6 +225,19 @@ namespace ModernWMS.WMS.Entities.ViewModels
/// sku_code
///
public string sku_code { get; set; } = string.Empty;
+
+
+ ///
+ /// pick_checker_id
+ ///
+ public decimal pick_checker_id { get; set; } = 0;
+
+ ///
+ /// pick_checker
+ ///
+ public string pick_checker { get; set; } = string.Empty;
+
+
#endregion
}
}
diff --git a/backend/ModernWMS.WMS/Entities/ViewModels/Dispatchlist/DispatchlistViewModel.cs b/backend/ModernWMS.WMS/Entities/ViewModels/Dispatchlist/DispatchlistViewModel.cs
index 1dae34c..97ad410 100644
--- a/backend/ModernWMS.WMS/Entities/ViewModels/Dispatchlist/DispatchlistViewModel.cs
+++ b/backend/ModernWMS.WMS/Entities/ViewModels/Dispatchlist/DispatchlistViewModel.cs
@@ -292,6 +292,16 @@ namespace ModernWMS.WMS.Entities.ViewModels
///
public bool is_todo { get; set; } = false;
+ ///
+ /// pick_checker_id
+ ///
+ public int pick_checker_id { get; set; } = 0;
+
+ ///
+ /// pick_checker
+ ///
+ public string pick_checker { get; set; } = string.Empty;
+
#endregion Property
}
}
\ No newline at end of file
diff --git a/backend/ModernWMS.WMS/Entities/ViewModels/Dispatchlist/DispatchpicklistViewModel.cs b/backend/ModernWMS.WMS/Entities/ViewModels/Dispatchlist/DispatchpicklistViewModel.cs
index 8c044f5..4811c88 100644
--- a/backend/ModernWMS.WMS/Entities/ViewModels/Dispatchlist/DispatchpicklistViewModel.cs
+++ b/backend/ModernWMS.WMS/Entities/ViewModels/Dispatchlist/DispatchpicklistViewModel.cs
@@ -126,6 +126,32 @@ namespace ModernWMS.WMS.Entities.ViewModels
[MaxLength(64, ErrorMessage = "MaxLength")]
public string series_number { get; set; } = string.Empty;
+ ///
+ /// expiry_date
+ ///
+ public DateTime expiry_date { get; set; } = UtilConvert.MinDate;
+
+ ///
+ /// price
+ ///
+ public decimal price { get; set; } = 0;
+
+ ///
+ /// picker_id
+ ///
+ public int picker_id { get; set; } = 0;
+
+ ///
+ /// picker
+ ///
+ public string picker { get; set; } = string.Empty;
+
+ ///
+ /// putaway_date
+ ///
+ public DateTime putaway_date { get; set; } = UtilConvert.MinDate;
+
+
#endregion Property
}
}
\ No newline at end of file
diff --git a/backend/ModernWMS.WMS/Entities/ViewModels/Stock/DeliveryStatisticViewModel.cs b/backend/ModernWMS.WMS/Entities/ViewModels/Stock/DeliveryStatisticViewModel.cs
index dbcf284..c94df0a 100644
--- a/backend/ModernWMS.WMS/Entities/ViewModels/Stock/DeliveryStatisticViewModel.cs
+++ b/backend/ModernWMS.WMS/Entities/ViewModels/Stock/DeliveryStatisticViewModel.cs
@@ -99,6 +99,22 @@ namespace ModernWMS.WMS.Entities.ViewModels.Stock
///
public decimal delivery_amount { get; set; } = 0;
+ ///
+ /// expiry_date
+ ///
+ public DateTime expiry_date { get; set; } = UtilConvert.MinDate;
+
+ ///
+ /// price
+ ///
+ public decimal price { get; set; } = 0;
+
+ ///
+ /// putaway_date
+ ///
+ public DateTime putaway_date { get; set; } = UtilConvert.MinDate;
+
+
#endregion Property
}
}
\ No newline at end of file
diff --git a/backend/ModernWMS.WMS/Entities/ViewModels/Stock/LocationStockForPhoneSearchViewModel.cs b/backend/ModernWMS.WMS/Entities/ViewModels/Stock/LocationStockForPhoneSearchViewModel.cs
index e4c45bf..34a48ce 100644
--- a/backend/ModernWMS.WMS/Entities/ViewModels/Stock/LocationStockForPhoneSearchViewModel.cs
+++ b/backend/ModernWMS.WMS/Entities/ViewModels/Stock/LocationStockForPhoneSearchViewModel.cs
@@ -3,8 +3,10 @@
* developer:NoNo
*/
+using ModernWMS.Core.Utility;
using System;
using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@@ -40,5 +42,15 @@ namespace ModernWMS.WMS.Entities.ViewModels
/// location name
///
public string location_name { get; set; } = string.Empty;
+
+ ///
+ /// expiry_date
+ ///
+ public DateTime expiry_date { get; set; } = UtilConvert.MinDate;
+
+ ///
+ /// series_number
+ ///
+ public string series_number { get; set; } = string.Empty;
}
}
\ No newline at end of file
diff --git a/backend/ModernWMS.WMS/Entities/ViewModels/Stock/LocationStockManagementViewModel.cs b/backend/ModernWMS.WMS/Entities/ViewModels/Stock/LocationStockManagementViewModel.cs
index 14168de..ee492db 100644
--- a/backend/ModernWMS.WMS/Entities/ViewModels/Stock/LocationStockManagementViewModel.cs
+++ b/backend/ModernWMS.WMS/Entities/ViewModels/Stock/LocationStockManagementViewModel.cs
@@ -3,6 +3,7 @@
* developer:NoNo
*/
+using ModernWMS.Core.Utility;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
@@ -89,5 +90,22 @@ namespace ModernWMS.WMS.Entities.ViewModels
/// goods_location_id
///
public int goods_location_id { get; set; } = 0;
+
+ ///
+ /// expiry_date
+ ///
+ public DateTime expiry_date { get; set; } = UtilConvert.MinDate;
+
+ ///
+ /// price
+ ///
+ public decimal price { get; set; } = 0;
+
+ ///
+ /// putaway_date
+ ///
+ public DateTime putaway_date { get; set; } = UtilConvert.MinDate;
+
+
}
}
\ No newline at end of file
diff --git a/backend/ModernWMS.WMS/Entities/ViewModels/Stock/StockAgeSearchViewModel.cs b/backend/ModernWMS.WMS/Entities/ViewModels/Stock/StockAgeSearchViewModel.cs
new file mode 100644
index 0000000..c930bd3
--- /dev/null
+++ b/backend/ModernWMS.WMS/Entities/ViewModels/Stock/StockAgeSearchViewModel.cs
@@ -0,0 +1,112 @@
+/*
+ * date:2023-9-8
+ * developer:NoNo
+ */
+
+using ModernWMS.Core.Utility;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ModernWMS.WMS.Entities.ViewModels.Stock
+{
+ ///
+ /// delivery data statistic input viewModel
+ ///
+ public class StockAgeSearchViewModel
+ {
+ #region constructor
+
+ ///
+ /// constructor
+ ///
+ public StockAgeSearchViewModel()
+ {
+ }
+
+ #endregion constructor
+
+ #region Property
+
+ ///
+ /// current page number
+ ///
+ public int pageIndex { get; set; } = 1;
+
+ ///
+ /// rows per page
+ ///
+ public int pageSize { get; set; } = 20;
+
+ ///
+ /// spu_code
+ ///
+ [Display(Name = "spu_code")]
+ [MaxLength(32, ErrorMessage = "MaxLength")]
+ public string spu_code { get; set; } = string.Empty;
+
+ ///
+ /// spu_name
+ ///
+ [Display(Name = "spu_name")]
+ [MaxLength(200, ErrorMessage = "MaxLength")]
+ public string spu_name { get; set; } = string.Empty;
+
+ ///
+ /// sku_code
+ ///
+ [Display(Name = "sku_code")]
+ [MaxLength(32, ErrorMessage = "MaxLength")]
+ public string sku_code { get; set; } = string.Empty;
+
+ ///
+ /// sku_name
+ ///
+ [Display(Name = "sku_name")]
+ [MaxLength(200, ErrorMessage = "MaxLength")]
+ public string sku_name { get; set; } = string.Empty;
+
+ ///
+ /// warehouse_name
+ ///
+ [Display(Name = "warehouse_name")]
+ [MaxLength(32, ErrorMessage = "MaxLength")]
+ public string warehouse_name { get; set; } = string.Empty;
+
+ ///
+ /// location_name
+ ///
+ [Display(Name = "location_name")]
+ [MaxLength(32, ErrorMessage = "MaxLength")]
+ public string location_name { get; set; } = string.Empty;
+
+ ///
+ /// stock age date from
+ ///
+ public int stock_age_from { get; set; } = 0;
+
+ ///
+ /// stock age date to
+ ///
+ public int stock_age_to { get; set; } = 0;
+
+
+ ///
+ ///expiry date from
+ ///
+ [Display(Name = "expiry_date_from")]
+ [DataType(DataType.DateTime, ErrorMessage = "DataType_DateTime")]
+ public DateTime expiry_date_from { get; set; } = UtilConvert.MinDate;
+
+ ///
+ /// expiry date to
+ ///
+ [Display(Name = "expiry_date_to")]
+ [DataType(DataType.DateTime, ErrorMessage = "DataType_DateTime")]
+ public DateTime expiry_date_to { get; set; } = UtilConvert.MinDate;
+ #endregion Property
+ }
+}
\ No newline at end of file
diff --git a/backend/ModernWMS.WMS/Entities/ViewModels/Stock/StockAgeViewModel.cs b/backend/ModernWMS.WMS/Entities/ViewModels/Stock/StockAgeViewModel.cs
new file mode 100644
index 0000000..bf68add
--- /dev/null
+++ b/backend/ModernWMS.WMS/Entities/ViewModels/Stock/StockAgeViewModel.cs
@@ -0,0 +1,101 @@
+/*
+ * date:2024-5-7
+ * developer:NoNo
+ */
+
+using ModernWMS.Core.Utility;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace ModernWMS.WMS.Entities.ViewModels
+{
+ ///
+ /// goods stock age management viewmodel
+ ///
+ public class StockAgeViewModel
+ {
+ ///
+ /// warehouse_name
+ ///
+ public string warehouse_name { get; set; } = string.Empty;
+
+ ///
+ /// location_name
+ ///
+ public string location_name { get; set; } = string.Empty;
+
+ ///
+ /// spu_code
+ ///
+ public string spu_code { get; set; } = string.Empty;
+
+ ///
+ /// spu_name
+ ///
+ public string spu_name { get; set; } = string.Empty;
+
+ ///
+ /// sku_id
+ ///
+ public int sku_id { get; set; } = 0;
+
+ ///
+ /// sku_code
+ ///
+ public string sku_code { get; set; } = string.Empty;
+
+ ///
+ /// sku_name
+ ///
+ public string sku_name { get; set; } = string.Empty;
+
+ ///
+ /// quantity
+ ///
+ public int qty { get; set; } = 0;
+
+
+ ///
+ /// goods owner name
+ ///
+ public string goods_owner_name { get; set; } = string.Empty;
+
+ ///
+ /// series_number
+ ///
+ [Display(Name = "series_number")]
+ [MaxLength(64, ErrorMessage = "MaxLength")]
+ public string series_number { get; set; } = string.Empty;
+
+ ///
+ /// goods_location_id
+ ///
+ public int goods_location_id { get; set; } = 0;
+
+ ///
+ /// expiry_date
+ ///
+ public DateTime expiry_date { get; set; } = UtilConvert.MinDate;
+
+ ///
+ /// price
+ ///
+ public decimal price { get; set; } = 0;
+
+ ///
+ /// putaway_date
+ ///
+ public DateTime putaway_date { get; set; } = UtilConvert.MinDate;
+
+ ///
+ /// stock_age
+ ///
+ public int stock_age { get; set; } = 0;
+
+ }
+}
\ No newline at end of file
diff --git a/backend/ModernWMS.WMS/Entities/ViewModels/Stock/StockManagementViewModel.cs b/backend/ModernWMS.WMS/Entities/ViewModels/Stock/StockManagementViewModel.cs
index 27a1cec..59f6796 100644
--- a/backend/ModernWMS.WMS/Entities/ViewModels/Stock/StockManagementViewModel.cs
+++ b/backend/ModernWMS.WMS/Entities/ViewModels/Stock/StockManagementViewModel.cs
@@ -1,4 +1,5 @@
-using System;
+using ModernWMS.Core.Utility;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@@ -89,6 +90,12 @@ namespace ModernWMS.WMS.Entities.ViewModels
///
public int shortage_qty { get; set; } = 0;
+
+ ///
+ /// expiry_date
+ ///
+ public DateTime expiry_date { get; set; } = UtilConvert.MinDate;
+
#endregion Property
}
}
\ No newline at end of file
diff --git a/backend/ModernWMS.WMS/Entities/ViewModels/Stock/StockViewModel.cs b/backend/ModernWMS.WMS/Entities/ViewModels/Stock/StockViewModel.cs
index b3a6ff2..f1a86b8 100644
--- a/backend/ModernWMS.WMS/Entities/ViewModels/Stock/StockViewModel.cs
+++ b/backend/ModernWMS.WMS/Entities/ViewModels/Stock/StockViewModel.cs
@@ -129,6 +129,24 @@ namespace ModernWMS.WMS.Entities.ViewModels
[MaxLength(64, ErrorMessage = "MaxLength")]
public string series_number { get; set; } = string.Empty;
+ ///
+ /// expiry_date
+ ///
+ [Display(Name = "expiry_date")]
+ [DataType(DataType.DateTime, ErrorMessage = "DataType_DateTime")]
+ public DateTime expiry_date { get; set; } = UtilConvert.MinDate;
+
+ ///
+ /// price
+ ///
+ public decimal price { get; set; } = 0;
+
+ ///
+ /// putaway_date
+ ///
+ public DateTime putaway_date { get; set; } = UtilConvert.MinDate;
+
+
#endregion Property
}
}
\ No newline at end of file
diff --git a/backend/ModernWMS.WMS/Entities/ViewModels/Stockadjust/StockadjustViewModel.cs b/backend/ModernWMS.WMS/Entities/ViewModels/Stockadjust/StockadjustViewModel.cs
index 74ad15a..a4fde63 100644
--- a/backend/ModernWMS.WMS/Entities/ViewModels/Stockadjust/StockadjustViewModel.cs
+++ b/backend/ModernWMS.WMS/Entities/ViewModels/Stockadjust/StockadjustViewModel.cs
@@ -151,6 +151,22 @@ namespace ModernWMS.WMS.Entities.ViewModels
[MaxLength(64, ErrorMessage = "MaxLength")]
public string series_number { get; set; } = string.Empty;
+ ///
+ /// expiry_date
+ ///
+ public DateTime expiry_date { get; set; } = UtilConvert.MinDate;
+
+ ///
+ /// price
+ ///
+ public decimal price { get; set; } = 0;
+
+ ///
+ /// putaway_date
+ ///
+ public DateTime putaway_date { get; set; } = UtilConvert.MinDate;
+
+
#endregion Property
}
}
\ No newline at end of file
diff --git a/backend/ModernWMS.WMS/Entities/ViewModels/Stockmove/StockmoveViewModel.cs b/backend/ModernWMS.WMS/Entities/ViewModels/Stockmove/StockmoveViewModel.cs
index 9d6432a..1b869a2 100644
--- a/backend/ModernWMS.WMS/Entities/ViewModels/Stockmove/StockmoveViewModel.cs
+++ b/backend/ModernWMS.WMS/Entities/ViewModels/Stockmove/StockmoveViewModel.cs
@@ -164,6 +164,22 @@ namespace ModernWMS.WMS.Entities.ViewModels
[MaxLength(64, ErrorMessage = "MaxLength")]
public string series_number { get; set; } = string.Empty;
+ ///
+ /// expiry_date
+ ///
+ public DateTime expiry_date { get; set; } = UtilConvert.MinDate;
+
+ ///
+ /// price
+ ///
+ public decimal price { get; set; } = 0;
+
+ ///
+ /// putaway_date
+ ///
+ public DateTime putaway_date { get; set; } = UtilConvert.MinDate;
+
+
#endregion Property
}
}
\ No newline at end of file
diff --git a/backend/ModernWMS.WMS/Entities/ViewModels/Stockprocess/StockprocessdetailViewModel.cs b/backend/ModernWMS.WMS/Entities/ViewModels/Stockprocess/StockprocessdetailViewModel.cs
index bc08b04..1812252 100644
--- a/backend/ModernWMS.WMS/Entities/ViewModels/Stockprocess/StockprocessdetailViewModel.cs
+++ b/backend/ModernWMS.WMS/Entities/ViewModels/Stockprocess/StockprocessdetailViewModel.cs
@@ -119,6 +119,22 @@ namespace ModernWMS.WMS.Entities.ViewModels
[MaxLength(64, ErrorMessage = "MaxLength")]
public string series_number { get; set; } = string.Empty;
+ ///
+ /// expiry_date
+ ///
+ public DateTime expiry_date { get; set; } = UtilConvert.MinDate;
+
+ ///
+ /// price
+ ///
+ public decimal price { get; set; } = 0;
+
+ ///
+ /// putaway_date
+ ///
+ public DateTime putaway_date { get; set; } = UtilConvert.MinDate;
+
+
#endregion Property
}
}
\ No newline at end of file
diff --git a/backend/ModernWMS.WMS/Entities/ViewModels/Stocktaking/StocktakingBasicViewModel.cs b/backend/ModernWMS.WMS/Entities/ViewModels/Stocktaking/StocktakingBasicViewModel.cs
index 6c33d58..9ea43bd 100644
--- a/backend/ModernWMS.WMS/Entities/ViewModels/Stocktaking/StocktakingBasicViewModel.cs
+++ b/backend/ModernWMS.WMS/Entities/ViewModels/Stocktaking/StocktakingBasicViewModel.cs
@@ -77,12 +77,32 @@ namespace ModernWMS.WMS.Entities.ViewModels
///
public string location_name { get; set; } = string.Empty;
+ ///
+ /// series_number
+ ///
+ public string series_number { get; set; } = string.Empty;
+
+ ///
+ /// expiry_date
+ ///
+ public DateTime expiry_date { get; set; } = UtilConvert.MinDate;
+
+ ///
+ /// price
+ ///
+ public decimal price { get; set; } = 0;
+
///
/// book_qty
///
[Display(Name = "book_qty")]
public int book_qty { get; set; } = 0;
+ ///
+ /// putaway_date
+ ///
+ public DateTime putaway_date { get; set; } = UtilConvert.MinDate;
+
#endregion
}
}
diff --git a/backend/ModernWMS.WMS/IServices/Asn/IAsnService.cs b/backend/ModernWMS.WMS/IServices/Asn/IAsnService.cs
index 45594d0..251c50f 100644
--- a/backend/ModernWMS.WMS/IServices/Asn/IAsnService.cs
+++ b/backend/ModernWMS.WMS/IServices/Asn/IAsnService.cs
@@ -106,7 +106,7 @@ namespace ModernWMS.WMS.IServices
///
/// asn id
///
- Task> GetAsnsortsAsync(int asn_id);
+ Task> GetAsnsortsAsync(int asn_id);
///
/// update or delete asnsorts data
@@ -187,6 +187,15 @@ namespace ModernWMS.WMS.IServices
///
Task<(bool flag, string msg)> DeleteAsnmasterAsync(int id);
#endregion
+
+ #region print series number
+ ///
+ /// print series number
+ ///
+ /// selected asn id
+ ///
+ Task> GetAsnPrintSeriesNumberAsync(List input);
+ #endregion
}
}
diff --git a/backend/ModernWMS.WMS/IServices/Dispatchlist/IDispatchlistService.cs b/backend/ModernWMS.WMS/IServices/Dispatchlist/IDispatchlistService.cs
index d8a24f9..f47ed10 100644
--- a/backend/ModernWMS.WMS/IServices/Dispatchlist/IDispatchlistService.cs
+++ b/backend/ModernWMS.WMS/IServices/Dispatchlist/IDispatchlistService.cs
@@ -87,6 +87,22 @@ namespace ModernWMS.WMS.IServices
///
Task<(bool flag, string msg)> ConfirmPickByDispatchNo(string dispatch_no, CurrentUser currentUser);
+ ///
+ /// confirm pick detail
+ ///
+ /// dispatch list pick detail id
+ /// current user
+ ///
+ Task<(bool flag, string msg)> ConfirmPickDetail(List picklist_id, CurrentUser currentUser);
+
+ ///
+ /// cancel confirm pick detail
+ ///
+ /// dispatch list pick detail id
+ /// current user
+ ///
+ Task<(bool flag, string msg)> CancelConfirmPickDetail(List picklist_id, CurrentUser currentUser);
+
///
/// package
///
diff --git a/backend/ModernWMS.WMS/IServices/Stock/IStockService.cs b/backend/ModernWMS.WMS/IServices/Stock/IStockService.cs
index 40a2667..6842faa 100644
--- a/backend/ModernWMS.WMS/IServices/Stock/IStockService.cs
+++ b/backend/ModernWMS.WMS/IServices/Stock/IStockService.cs
@@ -75,6 +75,14 @@ namespace ModernWMS.WMS.IServices
///
Task<(List datas, int totals)> DeliveryStatistic(DeliveryStatisticSearchViewModel input, CurrentUser currentUser);
+
+ ///
+ /// stock age page search
+ ///
+ /// args
+ /// currentUser
+ ///
+ Task<(List data, int totals)> StockAgePageAsync(StockAgeSearchViewModel input, CurrentUser currentUser);
#endregion Api
}
}
\ No newline at end of file
diff --git a/backend/ModernWMS.WMS/Services/Asn/AsnService.cs b/backend/ModernWMS.WMS/Services/Asn/AsnService.cs
index 833b915..dfdf2d8 100644
--- a/backend/ModernWMS.WMS/Services/Asn/AsnService.cs
+++ b/backend/ModernWMS.WMS/Services/Asn/AsnService.cs
@@ -2,15 +2,18 @@
* date:2022-12-22
* developer:AMo
*/
+
using Mapster;
using Microsoft.AspNetCore.Http.HttpResults;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Localization;
+using ModernWMS.Core;
using ModernWMS.Core.DBContext;
using ModernWMS.Core.DynamicSearch;
using ModernWMS.Core.JWT;
using ModernWMS.Core.Models;
using ModernWMS.Core.Services;
+using ModernWMS.Core.Utility;
using ModernWMS.WMS.Entities.Models;
using ModernWMS.WMS.Entities.ViewModels;
using ModernWMS.WMS.IServices;
@@ -25,6 +28,7 @@ namespace ModernWMS.WMS.Services
public class AsnService : BaseService, IAsnService
{
#region Args
+
///
/// The DBContext
///
@@ -34,9 +38,16 @@ namespace ModernWMS.WMS.Services
/// Localizer Service
///
private readonly IStringLocalizer _stringLocalizer;
- #endregion
+
+ ///
+ /// functions
+ ///
+ private readonly FunctionHelper _functionHelper;
+
+ #endregion Args
#region constructor
+
///
///Asn constructor
///
@@ -44,15 +55,19 @@ namespace ModernWMS.WMS.Services
/// Localizer
public AsnService(
SqlDBContext dBContext
- , IStringLocalizer stringLocalizer
+ , IStringLocalizer stringLocalizer
+ , FunctionHelper functionHelper
)
{
this._dBContext = dBContext;
this._stringLocalizer = stringLocalizer;
+ this._functionHelper = functionHelper;
}
- #endregion
+
+ #endregion constructor
#region Api
+
///
/// page search, sqlTitle input asn_status:0 ~ 4
///
@@ -69,7 +84,7 @@ namespace ModernWMS.WMS.Services
queries.Add(s);
});
}
- Byte asn_status = 255;
+ Byte asn_status = 255;
var Asns = _dBContext.GetDbSet().AsNoTracking();
if (pageSearch.sqlTitle.ToLower().Contains("asn_status:alltodo"))
{
@@ -77,12 +92,12 @@ namespace ModernWMS.WMS.Services
}
else if (pageSearch.sqlTitle.ToLower().Contains("asn_status"))
{
- asn_status = Convert.ToByte(pageSearch.sqlTitle.Trim().ToLower().Replace("asn_status","").Replace(":", "").Replace(":", "").Replace("=", ""));
+ asn_status = Convert.ToByte(pageSearch.sqlTitle.Trim().ToLower().Replace("asn_status", "").Replace(":", "").Replace(":", "").Replace("=", ""));
//asn_status = asn_status.Equals(4) ? (Byte)255 : asn_status;
Asns = Asns.Where(t => t.asn_status == asn_status);
}
var Spus = _dBContext.GetDbSet().AsNoTracking();
- var Skus = _dBContext.GetDbSet().AsNoTracking();
+ var Skus = _dBContext.GetDbSet().AsNoTracking();
var Asnmasters = _dBContext.GetDbSet().AsNoTracking();
var query = from m in Asns
@@ -108,6 +123,7 @@ namespace ModernWMS.WMS.Services
length_unit = p.length_unit,
volume_unit = p.volume_unit,
weight_unit = p.weight_unit,
+ price = m.price,
asn_qty = m.asn_qty,
actual_qty = m.actual_qty,
arrival_time = m.arrival_time,
@@ -127,7 +143,8 @@ namespace ModernWMS.WMS.Services
creator = m.creator,
create_time = m.create_time,
last_update_time = m.last_update_time,
- is_valid = m.is_valid
+ is_valid = m.is_valid,
+ expiry_date = m.expiry_date
};
query = query.Where(queries.AsExpression());
int totals = await query.CountAsync();
@@ -170,6 +187,7 @@ namespace ModernWMS.WMS.Services
length_unit = p.length_unit,
volume_unit = p.volume_unit,
weight_unit = p.weight_unit,
+ price = m.price,
asn_qty = m.asn_qty,
actual_qty = m.actual_qty,
arrival_time = m.arrival_time,
@@ -189,11 +207,13 @@ namespace ModernWMS.WMS.Services
creator = m.creator,
create_time = m.create_time,
last_update_time = m.last_update_time,
- is_valid = m.is_valid
+ is_valid = m.is_valid,
+ expiry_date = m.expiry_date
};
var data = await query.FirstOrDefaultAsync(t => t.id.Equals(id));
return data ?? new AsnViewModel();
}
+
///
/// add a new record
///
@@ -205,7 +225,7 @@ namespace ModernWMS.WMS.Services
var DbSet = _dBContext.GetDbSet();
var entity = viewModel.Adapt();
entity.id = 0;
- entity.asn_no = await GetOrderCode(currentUser);
+ entity.asn_no = await _functionHelper.GetFormNoAsync("Asn");
entity.creator = currentUser.user_name;
entity.create_time = DateTime.Now;
entity.last_update_time = DateTime.Now;
@@ -263,6 +283,7 @@ namespace ModernWMS.WMS.Services
return code;
}
+
///
/// update a record
///
@@ -280,6 +301,7 @@ namespace ModernWMS.WMS.Services
entity.asn_no = viewModel.asn_no;
entity.spu_id = viewModel.spu_id;
entity.sku_id = viewModel.sku_id;
+ entity.price = viewModel.price;
entity.asn_qty = viewModel.asn_qty;
entity.weight = viewModel.weight;
entity.volume = viewModel.volume;
@@ -299,6 +321,7 @@ namespace ModernWMS.WMS.Services
return (false, _stringLocalizer["save_failed"]);
}
}
+
///
/// delete a record
///
@@ -361,9 +384,11 @@ namespace ModernWMS.WMS.Services
return (false, _stringLocalizer["save_failed"]);
}
}
- #endregion
+
+ #endregion Api
#region Flow Api
+
///
/// Confirm Delivery
/// change the asn_status from 0 to 1
@@ -375,6 +400,7 @@ namespace ModernWMS.WMS.Services
var idList = viewModels.Where(t => t.id > 0).Select(t => t.id).ToList();
var Asns = _dBContext.GetDbSet();
var entities = await Asns.Where(t => idList.Contains(t.id)).ToListAsync();
+ var last_update_time = DateTime.Now;
if (!entities.Any())
{
return (false, "[202]" + _stringLocalizer["not_exists_entity"]);
@@ -383,13 +409,25 @@ namespace ModernWMS.WMS.Services
{
return (false, "[202]" + $"{_stringLocalizer["ASN_Status_Is_Not_Pre_Delivery"]}");
}
+ // get asnmaster data
+ var asnmaster_id = entities.Select(t => t.asnmaster_id).FirstOrDefault();
+ var Asnmaster = _dBContext.GetDbSet();
+ var asnmasterentity = await Asnmaster.FirstOrDefaultAsync(t => t.id.Equals(asnmaster_id));
+ if (asnmasterentity == null)
+ {
+ return (false, "[202]" + _stringLocalizer["not_exists_entity"]);
+ }
+ // update asnmaster last_update_time
+ asnmasterentity.last_update_time = last_update_time;
+
entities.ForEach(t =>
{
- var vm = viewModels.FirstOrDefault(t => t.id == t.id);
+ var vm = viewModels.FirstOrDefault(t => t.id == t.id);
if (vm != null)
{
t.asn_status = 1;
t.arrival_time = vm.arrival_time;
+ t.last_update_time = last_update_time;
}
});
var qty = await _dBContext.SaveChangesAsync();
@@ -402,6 +440,7 @@ namespace ModernWMS.WMS.Services
return (false, _stringLocalizer["confirm_failed"]);
}
}
+
///
/// Cancel confirm, change asn_status 1 to 0
///
@@ -411,6 +450,7 @@ namespace ModernWMS.WMS.Services
{
var Asns = _dBContext.GetDbSet();
var entities = await Asns.Where(t => idList.Contains(t.id)).ToListAsync();
+ var last_update_time = DateTime.Now;
if (!entities.Any())
{
return (false, "[202]" + _stringLocalizer["not_exists_entity"]);
@@ -419,10 +459,22 @@ namespace ModernWMS.WMS.Services
{
return (false, "[202]" + $"{_stringLocalizer["ASN_Status_Is_Not_Pre_Delivery"]}");
}
+ // get asnmaster data
+ var asnmaster_id = entities.Select(t => t.asnmaster_id).FirstOrDefault();
+ var Asnmaster = _dBContext.GetDbSet();
+ var asnmasterentity = await Asnmaster.FirstOrDefaultAsync(t => t.id.Equals(asnmaster_id));
+ if (asnmasterentity == null)
+ {
+ return (false, "[202]" + _stringLocalizer["not_exists_entity"]);
+ }
+ // update asnmaster last_update_time
+ asnmasterentity.last_update_time = last_update_time;
+
entities.ForEach(e =>
{
e.asn_status = 0;
e.arrival_time = Core.Utility.UtilConvert.MinDate;
+ e.last_update_time = last_update_time;
});
var qty = await _dBContext.SaveChangesAsync();
if (qty > 0)
@@ -501,7 +553,7 @@ namespace ModernWMS.WMS.Services
{
e.asn_status = 1;
e.unload_time = Core.Utility.UtilConvert.MinDate;
- e.unload_person_id =0;
+ e.unload_person_id = 0;
e.unload_person = string.Empty;
e.last_update_time = DateTime.Now;
});
@@ -515,6 +567,7 @@ namespace ModernWMS.WMS.Services
return (false, _stringLocalizer["save_failed"]);
}
}
+
///
/// sorting, add a new asnsort record and update asn sorted_qty
///
@@ -536,26 +589,55 @@ namespace ModernWMS.WMS.Services
{
return (false, "[202]" + $"{_stringLocalizer["ASN_Status_Is_Not_Pre_Sort"]}");
}
- var sortEntities = viewModels.Where(v => entities.Select(e => e.id).ToList().Contains(v.asn_id))
- .Select(v => new AsnsortEntity
+ var models = viewModels.Where(v => entities.Select(e => e.id).ToList().Contains(v.asn_id)).ToList();
+ List sortEntities = new List();
+ foreach (var v in models)
+ {
+ if (v.sorted_qty > 1 && v.is_auto_num)
{
- id = 0,
- asn_id = v.asn_id,
- sorted_qty = v.sorted_qty,
- series_number = v.series_number,
- create_time = DateTime.Now,
- creator = currentUser.user_name,
- is_valid = true,
- last_update_time = DateTime.Now,
- tenant_id = currentUser.tenant_id
- }).ToList();
+ List snlist = await _functionHelper.GetFormNoListAsync("Asnsort", v.sorted_qty, currentUser.tenant_id, "sn");
+ for (int i = 0; i < v.sorted_qty; i++)
+ {
+ sortEntities.Add(new AsnsortEntity
+ {
+ id = 0,
+ asn_id = v.asn_id,
+ sorted_qty = 1,
+ series_number = snlist[i],
+ create_time = DateTime.Now,
+ creator = currentUser.user_name,
+ is_valid = true,
+ last_update_time = DateTime.Now,
+ tenant_id = currentUser.tenant_id
+ });
+ }
+ }
+ else
+ {
+ string sn = await _functionHelper.GetFormNoAsync("Asnsort", "sn");
+ sortEntities.Add(new AsnsortEntity
+ {
+ id = 0,
+ asn_id = v.asn_id,
+ sorted_qty = v.sorted_qty,
+ series_number = sn,
+ create_time = DateTime.Now,
+ creator = currentUser.user_name,
+ is_valid = true,
+ last_update_time = DateTime.Now,
+ tenant_id = currentUser.tenant_id
+ });
+ }
+ }
await Asnsorts.AddRangeAsync(sortEntities);
entities.ForEach(e =>
{
int sum_sorted_qty = viewModels.Where(t => t.asn_id.Equals(e.id)).Sum(v => v.sorted_qty);
+ var expiry_date = viewModels.Where(t => t.asn_id.Equals(e.id)).Select(v => v.expiry_date).FirstOrDefault();
e.sorted_qty += sum_sorted_qty;
e.last_update_time = DateTime.Now;
+ e.expiry_date = expiry_date;
});
var qty = await _dBContext.SaveChangesAsync();
if (qty > 0)
@@ -567,24 +649,44 @@ namespace ModernWMS.WMS.Services
return (false, _stringLocalizer["save_failed"]);
}
}
+
///
/// get asnsorts list by asn_id
///
/// asn id
///
- public async Task> GetAsnsortsAsync(int asn_id)
+ public async Task> GetAsnsortsAsync(int asn_id)
{
var Asnsorts = _dBContext.GetDbSet();
- var sortsEntities = await Asnsorts.AsNoTracking().Where(t => t.asn_id == asn_id).ToListAsync();
- if (sortsEntities.Any())
+ var asns = _dBContext.Set().AsNoTracking();
+
+ var data = await (from m in asns
+ join d in Asnsorts on m.id equals d.asn_id
+ where m.id == asn_id
+ select new AsnsortViewModel
+ {
+ id = d.id,
+ asn_id = asn_id,
+ sorted_qty = d.sorted_qty,
+ series_number = d.series_number,
+ putaway_qty = d.putaway_qty,
+ expiry_date = m.expiry_date,
+ creator = d.creator,
+ create_time = d.create_time,
+ last_update_time = d.last_update_time,
+ is_valid = d.is_valid,
+ tenant_id = d.tenant_id
+ }).ToListAsync();
+ if (data != null && data.Count > 0)
{
- return sortsEntities;
+ return data;
}
else
{
- return new List();
+ return new List();
}
}
+
///
/// update or delete asnsorts data
///
@@ -606,14 +708,12 @@ namespace ModernWMS.WMS.Services
{
t.last_update_time = DateTime.Now;
t.is_valid = true;
- t.create_time = t.create_time.Year < 1985 ? DateTime.Now : t.create_time;
- t.creator = string.IsNullOrEmpty(t.creator) ? user.user_name : t.creator;
});
Asnsorts.UpdateRange(updateEntities);
}
var qty = await _dBContext.SaveChangesAsync();
- if (qty > 0)
+ if (qty >= 0)
{
var Asns = _dBContext.GetDbSet();
var asnids = entities.Select(t => t.asn_id).Distinct().ToList();
@@ -636,6 +736,10 @@ namespace ModernWMS.WMS.Services
{
e.sorted_qty = s.sorted_qty;
}
+ else
+ {
+ e.sorted_qty = 0;
+ }
});
await _dBContext.SaveChangesAsync();
}
@@ -806,6 +910,8 @@ namespace ModernWMS.WMS.Services
entity.asn_status = 4;
}
entity.last_update_time = DateTime.Now;
+ // expiry_date
+ var expiry_date = entity.expiry_date;
// 获取已上架数小于分拣数的分拣记录
var sortEntities = await Asnsorts.Where(t => t.asn_id == viewModels[0].asn_id && t.sorted_qty > t.putaway_qty).ToListAsync();
@@ -841,10 +947,15 @@ namespace ModernWMS.WMS.Services
{
entity.damage_qty += viewModel.putaway_qty;
}
+ DateTime putaway_date = DateTime.Now.ToString("yyyy-MM-dd").ObjToDate();
+ // 2024年3月14日 09:40:25 增加单价
var stockEntity = await Stocks.FirstOrDefaultAsync(t => t.sku_id.Equals(entity.sku_id)
&& t.goods_location_id.Equals(viewModel.goods_location_id)
&& t.goods_owner_id.Equals(viewModel.goods_owner_id)
&& t.series_number.Equals(viewModel.series_number)
+ && t.expiry_date.Equals(expiry_date)
+ && t.price.Equals(entity.price)
+ && t.putaway_date.Equals(putaway_date)
);
if (stockEntity == null)
{
@@ -858,6 +969,9 @@ namespace ModernWMS.WMS.Services
is_freeze = false,
last_update_time = DateTime.Now,
tenant_id = currentUser.tenant_id,
+ expiry_date = expiry_date,
+ price = entity.price,
+ putaway_date = putaway_date,
id = 0
};
await Stocks.AddAsync(stockEntity);
@@ -942,9 +1056,11 @@ namespace ModernWMS.WMS.Services
}
*/
}
- #endregion
- #region Arrival list
+ #endregion Flow Api
+
+ #region Arrival list
+
///
/// Arrival list
///
@@ -1013,17 +1129,21 @@ namespace ModernWMS.WMS.Services
volume = a.volume,
supplier_id = a.supplier_id,
supplier_name = a.supplier_name,
- is_valid = a.is_valid
+ is_valid = a.is_valid,
+ expiry_date = a.expiry_date,
+ price = a.price,
+ sorted_qty = a.sorted_qty,
}).ToList()
};
query = query.Where(queries.AsExpression());
int totals = await query.CountAsync();
- var list = await query.OrderByDescending(t => t.create_time)
+ var list = await query.OrderByDescending(t => t.last_update_time)
.Skip((pageSearch.pageIndex - 1) * pageSearch.pageSize)
.Take(pageSearch.pageSize)
.ToListAsync();
return (list, totals);
}
+
///
/// get Arrival list
///
@@ -1078,7 +1198,10 @@ namespace ModernWMS.WMS.Services
volume = a.volume,
supplier_id = a.supplier_id,
supplier_name = a.supplier_name,
- is_valid = a.is_valid
+ is_valid = a.is_valid,
+ sorted_qty = a.sorted_qty,
+ expiry_date = a.expiry_date,
+ price = a.price
}).ToList()
};
var data = await query.FirstOrDefaultAsync();
@@ -1095,7 +1218,7 @@ namespace ModernWMS.WMS.Services
{
var Asns = _dBContext.GetDbSet();
var Asnmasters = _dBContext.GetDbSet();
- string asn_no = await GetOrderCode(currentUser);
+ string asn_no = await _functionHelper.GetFormNoAsync("Asnmaster");
var entity = new AsnmasterEntity
{
id = 0,
@@ -1131,7 +1254,8 @@ namespace ModernWMS.WMS.Services
create_time = DateTime.Now,
last_update_time = DateTime.Now,
is_valid = true,
- tenant_id = currentUser.tenant_id
+ tenant_id = currentUser.tenant_id,
+ price = d.price
}).ToList()
};
await Asnmasters.AddAsync(entity);
@@ -1145,6 +1269,7 @@ namespace ModernWMS.WMS.Services
return (0, _stringLocalizer["save_failed"]);
}
}
+
///
/// add a new record
///
@@ -1188,6 +1313,7 @@ namespace ModernWMS.WMS.Services
d.goods_owner_id = viewModel.goods_owner_id;
d.goods_owner_name = viewModel.goods_owner_name;
d.last_update_time = DateTime.Now;
+ d.price = vm.price;
}
});
}
@@ -1214,7 +1340,8 @@ namespace ModernWMS.WMS.Services
create_time = DateTime.Now,
last_update_time = DateTime.Now,
is_valid = true,
- tenant_id = currentUser.tenant_id
+ tenant_id = currentUser.tenant_id,
+ price = d.price
}).ToList();
entity.detailList.AddRange(adds);
}
@@ -1252,7 +1379,46 @@ namespace ModernWMS.WMS.Services
return (false, _stringLocalizer["delete_failed"]);
}
}
+
+ #endregion Arrival list
+
+ #region print series number
+ ///
+ /// print series number
+ ///
+ /// selected asn id
+ ///
+ public async Task> GetAsnPrintSeriesNumberAsync(List input)
+ {
+ var Spus = _dBContext.GetDbSet().AsNoTracking();
+ var Skus = _dBContext.GetDbSet().AsNoTracking();
+ var Asns = _dBContext.GetDbSet().AsNoTracking();
+ var Asnmasters = _dBContext.GetDbSet().AsNoTracking();
+ var sorts = _dBContext.GetDbSet().AsNoTracking();
+
+ var query = from m in Asnmasters
+ join a in Asns on m.id equals a.asnmaster_id
+ join p in Spus.AsNoTracking() on a.spu_id equals p.id
+ join k in Skus.AsNoTracking() on a.sku_id equals k.id
+ join s in sorts on a.id equals s.asn_id
+ where input.Contains(a.id)
+ select new AsnPrintSeriesNumberViewModel
+ {
+ asn_id = a.id,
+ asnmaster_id = m.id,
+ asn_no = m.asn_no,
+ sku_id = a.sku_id,
+ sku_code = k.sku_code,
+ sku_name = k.sku_name,
+ spu_code = p.spu_code,
+ spu_name = p.spu_name,
+ series_number = s.series_number
+ };
+ var data = await query.OrderBy(t => t.asn_id).ToListAsync();
+ data ??= new List();
+ return data;
+ }
+
#endregion
}
-}
-
+}
\ No newline at end of file
diff --git a/backend/ModernWMS.WMS/Services/Dispatchlist/DispatchlistService.cs b/backend/ModernWMS.WMS/Services/Dispatchlist/DispatchlistService.cs
index f164677..2eea2cc 100644
--- a/backend/ModernWMS.WMS/Services/Dispatchlist/DispatchlistService.cs
+++ b/backend/ModernWMS.WMS/Services/Dispatchlist/DispatchlistService.cs
@@ -7,6 +7,7 @@ using Mapster;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Localization;
+using ModernWMS.Core;
using ModernWMS.Core.DBContext;
using ModernWMS.Core.DynamicSearch;
using ModernWMS.Core.JWT;
@@ -37,6 +38,11 @@ namespace ModernWMS.WMS.Services
///
private readonly IStringLocalizer _stringLocalizer;
+ ///
+ /// functions
+ ///
+ private readonly FunctionHelper _functionHelper;
+
#endregion Args
#region constructor
@@ -49,10 +55,12 @@ namespace ModernWMS.WMS.Services
public DispatchlistService(
SqlDBContext dBContext
, IStringLocalizer stringLocalizer
+ , FunctionHelper functionHelper
)
{
this._dBContext = dBContext;
this._stringLocalizer = stringLocalizer;
+ this._functionHelper = functionHelper;
}
#endregion constructor
@@ -140,6 +148,8 @@ namespace ModernWMS.WMS.Services
length_unit = spu.length_unit,
volume_unit = spu.volume_unit,
weight_unit = spu.weight_unit,
+ pick_checker = d.pick_checker,
+ pick_checker_id = d.pick_checker_id,
is_todo = pageSearch.sqlTitle.Contains("dispatch_status") || (pageSearch.sqlTitle.Equals("package") && d.dispatch_status.Equals(4))
|| (pageSearch.sqlTitle.Equals("weight") && d.dispatch_status.Equals(5))
|| (pageSearch.sqlTitle.Equals("delivery") && d.dispatch_status.Equals(6)) ? false : true,
@@ -148,7 +158,7 @@ namespace ModernWMS.WMS.Services
.Where(queries.AsExpression());
int totals = await query.CountAsync();
- var list = await query.OrderBy(t => t.is_todo == true ? 0 : 1).ThenByDescending(t => t.create_time)
+ var list = await query.OrderBy(t => t.is_todo == true ? 0 : 1).ThenByDescending(t => t.last_update_time)
.Skip((pageSearch.pageIndex - 1) * pageSearch.pageSize)
.Take(pageSearch.pageSize)
.ToListAsync();
@@ -210,7 +220,9 @@ namespace ModernWMS.WMS.Services
bar_code = sku.bar_code,
unpicked_qty = d.qty - d.picked_qty,
sku_name = sku.sku_name,
- unit = sku.unit
+ unit = sku.unit,
+ pick_checker = d.pick_checker,
+ pick_checker_id = d.pick_checker_id,
}).ToListAsync();
return datas;
}
@@ -230,6 +242,7 @@ namespace ModernWMS.WMS.Services
var delete_id_list = new List();
var sku_id_list = viewModels.Select(t => t.sku_id).ToList();
var skus = await (_dBContext.GetDbSet().AsNoTracking().Where(t => sku_id_list.Contains(t.id))).ToListAsync();
+ var now_time = DateTime.Now;
if (entities.Any(t => t.dispatch_status != 1 && t.dispatch_status != 0))
{
return (false, "[202]" + _stringLocalizer["data_changed"]);
@@ -255,7 +268,7 @@ namespace ModernWMS.WMS.Services
}
entity.sku_id = vm.sku_id;
entity.qty = vm.qty;
- entity.last_update_time = DateTime.Now;
+ entity.last_update_time = now_time;
var sku = skus.FirstOrDefault(t => t.id == entity.sku_id);
if (sku != null)
{
@@ -270,8 +283,8 @@ namespace ModernWMS.WMS.Services
id = 0,
dispatch_no = dispatch_no,
creator = currentUser.user_name,
- create_time = DateTime.Now,
- last_update_time = DateTime.Now,
+ create_time = now_time,
+ last_update_time = now_time,
dispatch_status = dispatch_status,
sku_id = vm.sku_id,
qty = vm.qty
@@ -341,7 +354,12 @@ namespace ModernWMS.WMS.Services
warehouse_area_name = location.warehouse_area_name,
warehouse_area_property = location.warehouse_area_property,
warehouse_name = location.warehouse_name,
- series_number = dpl.series_number
+ series_number = dpl.series_number,
+ expiry_date = dpl.expiry_date,
+ price = dpl.price,
+ picker = dpl.picker,
+ picker_id = dpl.picker_id,
+ putaway_date = dpl.putaway_date,
}).ToListAsync();
return datas;
}
@@ -473,6 +491,8 @@ namespace ModernWMS.WMS.Services
waybill_no = dl.waybill_no,
carrier = dl.carrier,
freightfee = dl.freightfee,
+ pick_checker = dl.pick_checker,
+ pick_checker_id = dl.pick_checker_id,
}
).ToListAsync();
return data.Adapt>();
@@ -490,14 +510,15 @@ namespace ModernWMS.WMS.Services
var entities = viewModel.Adapt>();
var sku_id_list = entities.Select(t => t.sku_id).ToList();
var skus = await _dBContext.GetDbSet().Where(t => sku_id_list.Contains(t.id)).ToListAsync();
- var dispatch_no = await GetOrderCode(currentUser);
+ var dispatch_no = await _functionHelper.GetFormNoAsync("Dispatchlist");
+ var now_time = DateTime.Now;
foreach (var entity in entities)
{
var sku = skus.FirstOrDefault(t => t.id == entity.sku_id);
entity.id = 0;
- entity.create_time = DateTime.Now;
+ entity.create_time = now_time;
entity.creator = currentUser.user_name;
- entity.last_update_time = DateTime.Now;
+ entity.last_update_time = now_time;
entity.tenant_id = currentUser.tenant_id;
if (sku != null)
{
@@ -565,7 +586,7 @@ namespace ModernWMS.WMS.Services
var stock_group_datas = from stock in stock_DbSet.AsNoTracking()
join gl in _dBContext.GetDbSet().AsNoTracking() on stock.goods_location_id equals gl.id
where stock.tenant_id == currentUser.user_id
- group stock by new { stock.id, stock.sku_id, stock.goods_location_id, stock.goods_owner_id, stock.series_number } into sg
+ group stock by new { stock.id, stock.sku_id, stock.goods_location_id, stock.goods_owner_id, stock.series_number, stock.expiry_date, stock.price,stock.putaway_date } into sg
select new
{
stock_id = sg.Key.id,
@@ -573,51 +594,63 @@ namespace ModernWMS.WMS.Services
sku_id = sg.Key.sku_id,
goods_location_id = sg.Key.goods_location_id,
series_number = sg.Key.series_number,
+ sg.Key.expiry_date,
+ sg.Key.price,
+ sg.Key.putaway_date,
qty_frozen = sg.Where(t => t.is_freeze == true).Sum(e => e.qty),
qty = sg.Sum(t => t.qty)
};
var dispatch_group_datas = from dp in DbSet.AsNoTracking()
join dpp in dispatchpick_DBSet.AsNoTracking() on dp.id equals dpp.dispatchlist_id
where dp.dispatch_status > 1 && dp.dispatch_status < 6
- group dpp by new { dpp.sku_id, dpp.goods_location_id, dpp.goods_owner_id, dpp.series_number } into dg
+ group dpp by new { dpp.sku_id, dpp.goods_location_id, dpp.goods_owner_id, dpp.series_number, dpp.expiry_date, dpp.price,dpp.putaway_date } into dg
select new
{
goods_owner_id = dg.Key.goods_owner_id,
sku_id = dg.Key.sku_id,
goods_location_id = dg.Key.goods_location_id,
series_number = dg.Key.series_number,
+ dg.Key.expiry_date,
+ dg.Key.price,
+ dg.Key.putaway_date,
qty_locked = dg.Sum(t => t.pick_qty)
};
var process_locked_group_datas = from pd in processdetail_DBSet
where pd.is_update_stock == false
- group pd by new { pd.sku_id, pd.goods_location_id, pd.goods_owner_id, pd.series_number } into pdg
+ group pd by new { pd.sku_id, pd.goods_location_id, pd.goods_owner_id, pd.series_number, pd.expiry_date, pd.price,pd.putaway_date } into pdg
select new
{
goods_owner_id = pdg.Key.goods_owner_id,
sku_id = pdg.Key.sku_id,
goods_location_id = pdg.Key.goods_location_id,
series_number = pdg.Key.series_number,
+ pdg.Key.expiry_date,
+ pdg.Key.price,
+ pdg.Key.putaway_date,
qty_locked = pdg.Sum(t => t.qty)
};
var move_locked_group_datas = from m in move_DBSet.AsNoTracking()
where m.move_status == 0
- group m by new { m.sku_id, m.orig_goods_location_id, m.goods_owner_id, m.series_number } into mg
+ group m by new { m.sku_id, m.orig_goods_location_id, m.goods_owner_id, m.series_number, m.expiry_date, m.price,m.putaway_date } into mg
select new
{
goods_owner_id = mg.Key.goods_owner_id,
sku_id = mg.Key.sku_id,
goods_location_id = mg.Key.orig_goods_location_id,
series_number = mg.Key.series_number,
+ mg.Key.expiry_date,
+ mg.Key.price,
+ mg.Key.putaway_date,
qty_locked = mg.Sum(t => t.qty)
};
var datas = await (from dl in DbSet
join sg in stock_group_datas on dl.sku_id equals sg.sku_id into sg_left
from sg in sg_left.DefaultIfEmpty()
- join dp in dispatch_group_datas on new { sg.sku_id, sg.goods_location_id, sg.goods_owner_id, sg.series_number } equals new { dp.sku_id, dp.goods_location_id, dp.goods_owner_id, dp.series_number } into dp_left
+ join dp in dispatch_group_datas on new { sg.sku_id, sg.goods_location_id, sg.goods_owner_id, sg.series_number, sg.expiry_date, sg.price,sg.putaway_date } equals new { dp.sku_id, dp.goods_location_id, dp.goods_owner_id, dp.series_number, dp.expiry_date, dp.price,dp.putaway_date } into dp_left
from dp in dp_left.DefaultIfEmpty()
- join pl in process_locked_group_datas on new { sg.sku_id, sg.goods_location_id, sg.goods_owner_id, sg.series_number } equals new { pl.sku_id, pl.goods_location_id, pl.goods_owner_id, pl.series_number } into pl_left
+ join pl in process_locked_group_datas on new { sg.sku_id, sg.goods_location_id, sg.goods_owner_id, sg.series_number, sg.expiry_date, sg.price,sg.putaway_date } equals new { pl.sku_id, pl.goods_location_id, pl.goods_owner_id, pl.series_number, pl.expiry_date, pl.price,pl.putaway_date } into pl_left
from pl in pl_left.DefaultIfEmpty()
- join m in move_locked_group_datas on new { sg.sku_id, sg.goods_location_id, sg.goods_owner_id, sg.series_number } equals new { m.sku_id, m.goods_location_id, m.goods_owner_id, m.series_number } into m_left
+ join m in move_locked_group_datas on new { sg.sku_id, sg.goods_location_id, sg.goods_owner_id, sg.series_number, sg.expiry_date, sg.price,sg.putaway_date } equals new { m.sku_id, m.goods_location_id, m.goods_owner_id, m.series_number, m.expiry_date, m.price,m.putaway_date } into m_left
from m in m_left.DefaultIfEmpty()
join sku in sku_DBSet on dl.sku_id equals sku.id
join spu in spu_DBSet on sku.spu_id equals spu.id
@@ -648,7 +681,10 @@ namespace ModernWMS.WMS.Services
location_name = gl.location_name == null ? "" : gl.location_name,
warehouse_area_name = gl.warehouse_area_name == null ? "" : gl.warehouse_area_name,
warehouse_name = gl.warehouse_name == null ? "" : gl.warehouse_name,
- series_number = sg.series_number
+ series_number = sg.series_number==null ? "":sg.series_number,
+ expiry_date = sg.expiry_date==null ? UtilConvert.MinDate : sg.expiry_date,
+ price = sg.price == null ? 0:sg.price,
+ putaway_date = sg.putaway_date == null ? UtilConvert.MinDate:sg.putaway_date,
}).ToListAsync();
var res = (from d in datas
group d by new
@@ -700,6 +736,9 @@ namespace ModernWMS.WMS.Services
warehouse_name = d.warehouse_name,
pick_qty = 0,
series_number = d.series_number,
+ expiry_date = d.expiry_date,
+ price = d.price,
+ putaway_date=d.putaway_date,
}
).OrderByDescending(o => o.qty_available).ToList();
int pick_qty = 0;
@@ -738,6 +777,7 @@ namespace ModernWMS.WMS.Services
var new_dispatchlists = new List();
var topick_viewmodels = new List();
var sku_id_list = viewModels.Select(t => t.sku_id).ToList();
+ var now_time = DateTime.Now;
foreach (var vm in viewModels.Where(t => t.confirm == true).ToList())
{
stock_id_list.AddRange(vm.pick_list.Where(t => t.pick_qty > 0).Select(t => t.stock_id).ToList());
@@ -753,7 +793,7 @@ namespace ModernWMS.WMS.Services
if (vm.confirm == true)
{
d.dispatch_status = 2;
- d.last_update_time = DateTime.Now;
+ d.last_update_time = now_time;
d.lock_qty = vm.pick_list.Sum(t => t.pick_qty);
foreach (var p in vm.pick_list.Where(t => t.pick_qty > 0).ToList())
{
@@ -764,9 +804,12 @@ namespace ModernWMS.WMS.Services
dispatchlist_id = p.dispatchlist_id,
goods_location_id = p.goods_location_id,
goods_owner_id = p.goods_owner_id,
- last_update_time = DateTime.Now,
+ last_update_time = now_time,
series_number = p.series_number,
+ expiry_date = p.expiry_date,
+ price = p.price,
pick_qty = p.pick_qty,
+ putaway_date = p.putaway_date,
});
topick_viewmodels.Add(new StockViewModel { id = p.stock_id, qty = p.pick_qty });
}
@@ -800,7 +843,7 @@ namespace ModernWMS.WMS.Services
}
var stock_group_datas = from stock in stock_DBSet.AsNoTracking()
where stock_id_list.Contains(stock.id)
- group stock by new { stock.id, stock.sku_id, stock.goods_location_id, stock.goods_owner_id, stock.series_number } into sg
+ group stock by new { stock.id, stock.sku_id, stock.goods_location_id, stock.goods_owner_id, stock.series_number, stock.expiry_date, stock.price,stock.putaway_date } into sg
select new
{
stock_id = sg.Key.id,
@@ -808,49 +851,61 @@ namespace ModernWMS.WMS.Services
sku_id = sg.Key.sku_id,
goods_location_id = sg.Key.goods_location_id,
series_number = sg.Key.series_number,
+ sg.Key.expiry_date,
+ sg.Key.price,
+ sg.Key.putaway_date,
qty_frozen = sg.Where(t => t.is_freeze == true).Sum(e => e.qty),
qty = sg.Sum(t => t.qty)
};
var dispatch_group_datas = from dp in DBSet.AsNoTracking()
join dpp in pick_DBSet.AsNoTracking() on dp.id equals dpp.dispatchlist_id
where dp.dispatch_status > 1 && dp.dispatch_status < 6
- group dpp by new { dpp.sku_id, dpp.goods_location_id, dpp.goods_owner_id, dpp.series_number } into dg
+ group dpp by new { dpp.sku_id, dpp.goods_location_id, dpp.goods_owner_id, dpp.series_number, dpp.expiry_date, dpp.price,dpp.putaway_date } into dg
select new
{
goods_owner_id = dg.Key.goods_owner_id,
sku_id = dg.Key.sku_id,
goods_location_id = dg.Key.goods_location_id,
series_number = dg.Key.series_number,
+ dg.Key.expiry_date,
+ dg.Key.price,
+ dg.Key.putaway_date,
qty_locked = dg.Sum(t => t.pick_qty)
};
var process_locked_group_datas = from pd in processdetail_DBSet
where pd.is_update_stock == false
- group pd by new { pd.sku_id, pd.goods_location_id, pd.goods_owner_id, pd.series_number } into pdg
+ group pd by new { pd.sku_id, pd.goods_location_id, pd.goods_owner_id, pd.series_number, pd.expiry_date, pd.price,pd.putaway_date } into pdg
select new
{
goods_owner_id = pdg.Key.goods_owner_id,
sku_id = pdg.Key.sku_id,
goods_location_id = pdg.Key.goods_location_id,
series_number = pdg.Key.series_number,
+ pdg.Key.expiry_date,
+ pdg.Key.price,
+ pdg.Key.putaway_date,
qty_locked = pdg.Sum(t => t.qty)
};
var move_locked_group_datas = from m in move_DBSet.AsNoTracking()
where m.move_status == 0
- group m by new { m.sku_id, m.orig_goods_location_id, m.goods_owner_id, m.series_number } into mg
+ group m by new { m.sku_id, m.orig_goods_location_id, m.goods_owner_id, m.series_number, m.expiry_date, m.price,m.putaway_date } into mg
select new
{
goods_owner_id = mg.Key.goods_owner_id,
sku_id = mg.Key.sku_id,
goods_location_id = mg.Key.orig_goods_location_id,
series_number = mg.Key.series_number,
+ mg.Key.expiry_date,
+ mg.Key.price,
+ mg.Key.putaway_date,
qty_locked = mg.Sum(t => t.qty)
};
var stock_datas = await (from sg in stock_group_datas
- join dp in dispatch_group_datas on new { sg.sku_id, sg.goods_location_id, sg.goods_owner_id, sg.series_number } equals new { dp.sku_id, dp.goods_location_id, dp.goods_owner_id, dp.series_number } into dp_left
+ join dp in dispatch_group_datas on new { sg.sku_id, sg.goods_location_id, sg.goods_owner_id, sg.series_number, sg.expiry_date, sg.price,sg.putaway_date } equals new { dp.sku_id, dp.goods_location_id, dp.goods_owner_id, dp.series_number, dp.expiry_date, dp.price,dp.putaway_date } into dp_left
from dp in dp_left.DefaultIfEmpty()
- join pl in process_locked_group_datas on new { sg.sku_id, sg.goods_location_id, sg.goods_owner_id, sg.series_number } equals new { pl.sku_id, pl.goods_location_id, pl.goods_owner_id, pl.series_number } into pl_left
+ join pl in process_locked_group_datas on new { sg.sku_id, sg.goods_location_id, sg.goods_owner_id, sg.series_number, sg.expiry_date, sg.price,sg.putaway_date } equals new { pl.sku_id, pl.goods_location_id, pl.goods_owner_id, pl.series_number, pl.expiry_date, pl.price,pl.putaway_date } into pl_left
from pl in pl_left.DefaultIfEmpty()
- join m in move_locked_group_datas on new { sg.sku_id, sg.goods_location_id, sg.goods_owner_id, sg.series_number } equals new { m.sku_id, m.goods_location_id, m.goods_owner_id, m.series_number } into m_left
+ join m in move_locked_group_datas on new { sg.sku_id, sg.goods_location_id, sg.goods_owner_id, sg.series_number, sg.expiry_date, sg.price,sg.putaway_date } equals new { m.sku_id, m.goods_location_id, m.goods_owner_id, m.series_number, m.expiry_date, m.price,m.putaway_date } into m_left
from m in m_left.DefaultIfEmpty()
select new
{
@@ -866,7 +921,7 @@ namespace ModernWMS.WMS.Services
return (false, "[202]" + _stringLocalizer["data_changed"]);
}
await pick_DBSet.AddRangeAsync(pick_datas);
- var dispatch_no = await GetOrderCode(currentUser);
+ var dispatch_no = await _functionHelper.GetFormNoAsync("Dispatchlist");
var sku_datas = await _dBContext.GetDbSet().Where(t => sku_id_list.Contains(t.id)).ToListAsync();
foreach (var nd in new_dispatchlists)
{
@@ -882,14 +937,10 @@ namespace ModernWMS.WMS.Services
};
await DBSet.AddRangeAsync(new_dispatchlists);
var qty = await _dBContext.SaveChangesAsync();
- if (qty > 0)
- {
- return (true, _stringLocalizer["operation_success"]);
- }
- else
- {
- return (false, _stringLocalizer["operation_failed"]);
- }
+
+ return (true, _stringLocalizer["operation_success"]);
+
+
}
///
@@ -907,7 +958,7 @@ namespace ModernWMS.WMS.Services
{
return (false, _stringLocalizer["status_changed"]);
}
- var time = DateTime.Now;
+ var now_time = DateTime.Now;
var dispatch_id_list = entities.Select(t => t.id).ToList();
var pick_entities = await pick_DBSet.Where(t => dispatch_id_list.Contains(t.dispatchlist_id)).ToListAsync();
if (viewModel.dispatch_status == 3)
@@ -915,12 +966,12 @@ namespace ModernWMS.WMS.Services
foreach (var pick in pick_entities)
{
pick.picked_qty = 0;
- pick.last_update_time = time;
+ pick.last_update_time = now_time;
}
foreach (var entity in entities)
{
entity.picked_qty = 0;
- entity.last_update_time = time;
+ entity.last_update_time = now_time;
entity.dispatch_status = 2;
}
}
@@ -930,7 +981,7 @@ namespace ModernWMS.WMS.Services
foreach (var entity in entities)
{
entity.lock_qty = 0;
- entity.last_update_time = time;
+ entity.last_update_time = now_time;
entity.dispatch_status = 1;
}
}
@@ -983,7 +1034,7 @@ namespace ModernWMS.WMS.Services
{
var DBSet = _dBContext.GetDbSet();
var entity = await DBSet.Where(t => t.id == id).FirstOrDefaultAsync();
- var time = DateTime.Now;
+ var now_time = DateTime.Now;
if (entity == null)
{
return (false, _stringLocalizer["not_exists_entity"]);
@@ -1022,7 +1073,7 @@ namespace ModernWMS.WMS.Services
{
return (false, _stringLocalizer["status_changed"]);
}
- entity.last_update_time = time;
+ entity.last_update_time = now_time;
var qty = await _dBContext.SaveChangesAsync();
if (qty > 0)
{
@@ -1047,16 +1098,81 @@ namespace ModernWMS.WMS.Services
var entities = await DBSet.Where(t => t.dispatch_status == 2 && t.dispatch_no == dispatch_no && t.tenant_id == currentUser.tenant_id).ToListAsync();
var dispatchlist_id_list = entities.Select(t => t.id).ToList();
var pick_datas = await pick_DBSet.Where(t => dispatchlist_id_list.Contains(t.dispatchlist_id)).ToListAsync();
+ var now_time = DateTime.Now;
entities.ForEach(t =>
{
t.picked_qty = t.lock_qty;
t.dispatch_status = 3;
- t.last_update_time = DateTime.Now;
+ t.last_update_time = now_time;
+ t.pick_checker = currentUser.user_name;
+ t.pick_checker_id = currentUser.user_id;
});
pick_datas.ForEach(t =>
{
t.picked_qty = t.pick_qty;
- t.last_update_time = DateTime.Now;
+ t.last_update_time = now_time;
+ });
+ var qty = await _dBContext.SaveChangesAsync();
+ if (qty > 0)
+ {
+ return (true, _stringLocalizer["operation_success"]);
+ }
+ else
+ {
+ return (false, _stringLocalizer["operation_failed"]);
+ }
+ }
+
+ ///
+ /// confirm pick detail
+ ///
+ /// dispatch list pick detail id
+ /// current user
+ ///
+ public async Task<(bool flag, string msg)> ConfirmPickDetail(List picklist_id, CurrentUser currentUser)
+ {
+ var DBSet = _dBContext.GetDbSet();
+ var pick_DBSet = _dBContext.GetDbSet();
+ var pick_datas = await pick_DBSet.Where(t => picklist_id.Contains(t.id)).ToListAsync();
+ if (pick_datas.Any(t=>t.picker_id > 0) || pick_datas.Any(t=>t.picked_qty>0))
+ {
+ return (false, _stringLocalizer["data_changed"]);
+ }
+ pick_datas.ForEach(t=>
+ {
+ t.picker = currentUser.user_name;
+ t.picker_id = currentUser.user_id;
+ });
+ var qty = await _dBContext.SaveChangesAsync();
+ if (qty > 0)
+ {
+ return (true, _stringLocalizer["operation_success"]);
+ }
+ else
+ {
+ return (false, _stringLocalizer["operation_failed"]);
+ }
+ }
+
+ ///
+ /// cancel confirm pick detail
+ ///
+ /// dispatch list pick detail id
+ /// current user
+ ///
+ public async Task<(bool flag, string msg)> CancelConfirmPickDetail(List picklist_id, CurrentUser currentUser)
+ {
+ var DBSet = _dBContext.GetDbSet();
+ var pick_DBSet = _dBContext.GetDbSet();
+ var pick_datas = await pick_DBSet.Where(t => picklist_id.Contains(t.id) ).ToListAsync();
+ if (pick_datas.Any(t =>t.picker_id == 0) || pick_datas.Any(t => t.picked_qty > 0))
+ {
+ return (false, _stringLocalizer["data_changed"]);
+ }
+ pick_datas.ForEach(t =>
+ {
+ t.picker = "";
+ t.picker_id = 0;
});
var qty = await _dBContext.SaveChangesAsync();
if (qty > 0)
@@ -1081,7 +1197,7 @@ namespace ModernWMS.WMS.Services
var DBSet = _dBContext.GetDbSet();
var dispatchlist_id_list = viewModels.Select(t => t.id).ToList();
var entities = await DBSet.Where(t => dispatchlist_id_list.Contains(t.id)).ToListAsync();
- var time = DateTime.Now;
+ var now_time = DateTime.Now;
var code = GetPackageOrWeightCode();
foreach (var vm in viewModels)
{
@@ -1094,10 +1210,10 @@ namespace ModernWMS.WMS.Services
{
return (false, "[202]" + _stringLocalizer["unpackgeqty_lessthen"]);
}
- entity.last_update_time = time;
+ entity.last_update_time = now_time;
entity.package_person = currentUser.user_name;
entity.package_qty += vm.package_qty;
- entity.package_time = time;
+ entity.package_time = now_time;
entity.package_no = code;
entity.dispatch_status = 4;
}
@@ -1169,7 +1285,7 @@ namespace ModernWMS.WMS.Services
var DBSet = _dBContext.GetDbSet();
var dispatchlist_id_list = viewModels.Select(t => t.id).ToList();
var entities = await DBSet.Where(t => dispatchlist_id_list.Contains(t.id)).ToListAsync();
- var time = DateTime.Now;
+ var now_time = DateTime.Now;
var code = GetPackageOrWeightCode();
foreach (var vm in viewModels)
{
@@ -1182,7 +1298,7 @@ namespace ModernWMS.WMS.Services
{
return (false, "[202]" + _stringLocalizer["unweightqty_lessthen"]);
}
- entity.last_update_time = time;
+ entity.last_update_time = now_time;
entity.weighing_person = currentUser.user_name;
entity.weighing_qty += vm.weighing_qty;
entity.weighing_weight += vm.weighing_weight;
@@ -1225,7 +1341,7 @@ namespace ModernWMS.WMS.Services
{
proposedValues["dispatch_status"] = 5;
}
- proposedValues["last_update_time"] = DateTime.Now;
+ proposedValues["last_update_time"] = now_time;
}
// Refresh original values to bypass next concurrency check
entry.OriginalValues.SetValues(databaseValues);
@@ -1261,14 +1377,14 @@ namespace ModernWMS.WMS.Services
var pick_DBSet = _dBContext.GetDbSet();
var stock_DBSet = _dBContext.GetDbSet();
var entities = await DBSet.Where(t => dispatchlist_id_list.Contains(t.id)).ToListAsync();
- var time = DateTime.Now;
+ var now_time = DateTime.Now;
foreach (var entity in entities)
{
if (entity.dispatch_status != 3 && entity.dispatch_status != 4 && entity.dispatch_status != 5)
{
return (false, "[202]" + _stringLocalizer["data_changed"]);
}
- entity.last_update_time = time;
+ entity.last_update_time = now_time;
entity.dispatch_status = 6;
entity.lock_qty = 0;
entity.actual_qty = entity.picked_qty;
@@ -1276,26 +1392,26 @@ namespace ModernWMS.WMS.Services
}
var pick_sql = pick_DBSet.Where(t => dispatchlist_id_list.Contains(t.dispatchlist_id));
var pick_datas = await pick_sql.ToListAsync();
- var picks_g = pick_sql.AsNoTracking().GroupBy(e => new { e.goods_location_id, e.sku_id, e.goods_owner_id, e.series_number }).Select(c => new { c.Key.goods_location_id, c.Key.sku_id, c.Key.goods_owner_id, c.Key.series_number, picked_qty = c.Sum(t => t.picked_qty) });
+ var picks_g = pick_sql.AsNoTracking().GroupBy(e => new { e.goods_location_id, e.sku_id, e.goods_owner_id, e.series_number, e.expiry_date, e.price,e.putaway_date }).Select(c => new { c.Key.goods_location_id, c.Key.sku_id, c.Key.goods_owner_id, c.Key.series_number, c.Key.expiry_date, c.Key.price,c.Key.putaway_date, picked_qty = c.Sum(t => t.picked_qty) });
var picks = await picks_g.ToListAsync();
var stocks = await (from stock in stock_DBSet
- where pick_sql.Any(t => t.goods_location_id == stock.goods_location_id && t.sku_id == stock.sku_id && t.goods_owner_id == stock.goods_owner_id && t.series_number == stock.series_number)
+ where pick_sql.Any(t => t.goods_location_id == stock.goods_location_id && t.sku_id == stock.sku_id && t.goods_owner_id == stock.goods_owner_id && t.series_number == stock.series_number && t.expiry_date == stock.expiry_date && t.price == stock.price && t.putaway_date == stock.putaway_date)
select stock).ToListAsync();
foreach (var pick in picks)
{
- var s = stocks.FirstOrDefault(t => t.goods_location_id == pick.goods_location_id && t.sku_id == pick.sku_id && t.goods_owner_id == pick.goods_owner_id && t.series_number == pick.series_number);
+ var s = stocks.FirstOrDefault(t => t.goods_location_id == pick.goods_location_id && t.sku_id == pick.sku_id && t.goods_owner_id == pick.goods_owner_id && t.series_number == pick.series_number && t.expiry_date == pick.expiry_date && t.price == pick.price && t.putaway_date == pick.putaway_date);
if (s == null)
{
return (false, "[202]" + _stringLocalizer["data_changed"]);
}
s.qty -= pick.picked_qty;
- s.last_update_time = time;
+ s.last_update_time = now_time;
stock_DBSet.Update(s);
}
foreach (var pick in pick_datas)
{
pick.is_update_stock = true;
- pick.last_update_time = DateTime.Now;
+ pick.last_update_time = now_time;
}
var saved = false;
int res = 0;
@@ -1319,7 +1435,7 @@ namespace ModernWMS.WMS.Services
{
return (false, "[202]" + _stringLocalizer["data_changed"]);
}
- proposedValues["last_update_time"] = DateTime.Now;
+ proposedValues["last_update_time"] = now_time;
}
else if (entry.Entity is StockEntity)
{
@@ -1331,7 +1447,7 @@ namespace ModernWMS.WMS.Services
return (false, "[202]" + _stringLocalizer["data_changed"]);
}
proposedValues["qty"] = UtilConvert.ObjToInt(databaseValues["qty"]) - t_p.picked_qty;
- proposedValues["last_update_time"] = DateTime.Now;
+ proposedValues["last_update_time"] = now_time;
// Refresh original values to bypass next concurrency check
entry.OriginalValues.SetValues(databaseValues);
}
@@ -1364,7 +1480,7 @@ namespace ModernWMS.WMS.Services
var freightfee_id_list = viewModels.Select(t => t.freightfee_id).Distinct().ToList();
var entities = await DBSet.Where(t => dispatchlist_id_list.Contains(t.id)).ToListAsync();
var freightfees = await _dBContext.GetDbSet().Where(t => freightfee_id_list.Contains(t.id)).ToListAsync();
- var time = DateTime.Now;
+ var now_time = DateTime.Now;
foreach (var entity in entities)
{
var vm = viewModels.FirstOrDefault(t => t.id == entity.id);
@@ -1373,7 +1489,7 @@ namespace ModernWMS.WMS.Services
var freightfee = freightfees.FirstOrDefault(t => t.id == vm.freightfee_id);
if (freightfee != null)
{
- entity.last_update_time = time;
+ entity.last_update_time = now_time;
entity.carrier = freightfee.carrier;
entity.waybill_no = vm.waybill_no;
if (entity.weighing_no != "")
@@ -1408,6 +1524,7 @@ namespace ModernWMS.WMS.Services
var DBSet = _dBContext.GetDbSet();
var dispatchlist_id_list = viewModels.Select(t => t.id).ToList();
var entities = await DBSet.Where(t => dispatchlist_id_list.Contains(t.id)).ToListAsync();
+ var now_time = DateTime.Now;
foreach (var entity in entities)
{
var vm = viewModels.FirstOrDefault(t => t.id == t.id && t.dispatch_status == entity.dispatch_status);
@@ -1417,7 +1534,7 @@ namespace ModernWMS.WMS.Services
}
entity.sign_qty = entity.actual_qty - vm.damage_qty;
entity.damage_qty = vm.damage_qty;
- entity.last_update_time = DateTime.Now;
+ entity.last_update_time = now_time;
entity.dispatch_status = 7;
}
var res = await _dBContext.SaveChangesAsync();
@@ -1481,8 +1598,9 @@ namespace ModernWMS.WMS.Services
var customer_list = await _dBContext.GetDbSet().Where(t => t.tenant_id == currentUser.tenant_id && import_customer_name.Contains(t.customer_name)).ToListAsync();
var entities = new List();
var groups = viewModels.Select(t => t.import_group).Distinct().ToList();
- var groups_code = await GetOrderCodeList(currentUser, groups.Count());
+ var groups_code = await _functionHelper.GetFormNoListAsync("Dispatchlist", groups.Count);
var group_code_dic = new Dictionary();
+ var now_time = DateTime.Now;
for (int i = 0; i < groups.Count(); i++)
{
group_code_dic.Add(groups[i], groups_code[i]);
@@ -1506,8 +1624,8 @@ namespace ModernWMS.WMS.Services
sku_id = sku.id,
qty = vm.qty,
creator = currentUser.user_name,
- create_time = DateTime.Now,
- last_update_time = DateTime.Now,
+ create_time = now_time,
+ last_update_time = now_time,
tenant_id = currentUser.tenant_id,
dispatch_no = group_code_dic[vm.import_group],
});
@@ -1537,7 +1655,7 @@ namespace ModernWMS.WMS.Services
{
for (int i = 1; i <= cnt; i++)
{
- code.Add(date +"-"+ cnt.ToString("0000"));
+ code.Add(date + "-" + cnt.ToString("0000"));
}
}
else
@@ -1664,7 +1782,6 @@ namespace ModernWMS.WMS.Services
}
}*/
-
#endregion Api
}
}
\ No newline at end of file
diff --git a/backend/ModernWMS.WMS/Services/Stock/StockService.cs b/backend/ModernWMS.WMS/Services/Stock/StockService.cs
index f2e07a7..83564bf 100644
--- a/backend/ModernWMS.WMS/Services/Stock/StockService.cs
+++ b/backend/ModernWMS.WMS/Services/Stock/StockService.cs
@@ -20,6 +20,9 @@ using System.Linq;
using ModernWMS.WMS.Entities.ViewModels.Stock;
using ModernWMS.Core.Utility;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
+using Pomelo.EntityFrameworkCore.MySql.Storage.Internal;
+using Pomelo.EntityFrameworkCore.MySql.Query.Internal;
+using Microsoft.Extensions.Configuration;
namespace ModernWMS.WMS.Services
{
@@ -40,6 +43,8 @@ namespace ModernWMS.WMS.Services
///
private readonly IStringLocalizer _stringLocalizer;
+ public IConfiguration Configuration { get; }
+
#endregion Args
#region constructor
@@ -52,10 +57,12 @@ namespace ModernWMS.WMS.Services
public StockService(
SqlDBContext dBContext
, IStringLocalizer stringLocalizer
+ , IConfiguration configuration
)
{
this._dBContext = dBContext;
this._stringLocalizer = stringLocalizer;
+ this.Configuration = configuration;
}
#endregion constructor
@@ -204,7 +211,7 @@ namespace ModernWMS.WMS.Services
join gw in _dBContext.GetDbSet().AsNoTracking() on stock.goods_owner_id equals gw.id into gw_left
from gw in gw_left.DefaultIfEmpty()
where stock.tenant_id == currentUser.tenant_id
- group new { stock, gw } by new { stock.sku_id, stock.goods_location_id, stock.goods_owner_id, stock.series_number, gw.goods_owner_name } into sg
+ group new { stock, gw } by new { stock.sku_id, stock.goods_location_id, stock.goods_owner_id, stock.series_number, gw.goods_owner_name, stock.expiry_date, stock.price, stock.putaway_date } into sg
select new
{
sku_id = sg.Key.sku_id,
@@ -212,6 +219,9 @@ namespace ModernWMS.WMS.Services
goods_owner_id = sg.Key.goods_owner_id,
goods_owner_name = sg.Key.goods_owner_name,
series_number = sg.Key.series_number,
+ sg.Key.expiry_date,
+ sg.Key.price,
+ sg.Key.putaway_date,
qty_frozen = sg.Where(t => t.stock.is_freeze == true).Sum(e => e.stock.qty),
qty = sg.Sum(t => t.stock.qty)
};
@@ -219,44 +229,53 @@ namespace ModernWMS.WMS.Services
var dispatch_group_datas = from dp in dispatch_DBSet.AsNoTracking()
join dpp in dispatchpick_DBSet.AsNoTracking() on dp.id equals dpp.dispatchlist_id
where dp.dispatch_status > 1 && dp.dispatch_status < 6
- group dpp by new { dpp.sku_id, dpp.goods_location_id, dpp.goods_owner_id, dpp.series_number } into dg
+ group dpp by new { dpp.sku_id, dpp.goods_location_id, dpp.goods_owner_id, dpp.series_number, dpp.expiry_date, dpp.price, dpp.putaway_date } into dg
select new
{
sku_id = dg.Key.sku_id,
goods_location_id = dg.Key.goods_location_id,
goods_owner_id = dg.Key.goods_owner_id,
series_number = dg.Key.series_number,
+ dg.Key.expiry_date,
+ dg.Key.price,
+ dg.Key.putaway_date,
qty_locked = dg.Sum(t => t.pick_qty)
};
var process_locked_group_datas = from pd in processdetail_DBSet
where pd.is_update_stock == false && pd.is_source == true
- group pd by new { pd.sku_id, pd.goods_location_id, pd.goods_owner_id, pd.series_number } into pdg
+ group pd by new { pd.sku_id, pd.goods_location_id, pd.goods_owner_id, pd.series_number, pd.expiry_date, pd.price, pd.putaway_date } into pdg
select new
{
sku_id = pdg.Key.sku_id,
goods_location_id = pdg.Key.goods_location_id,
goods_owner_id = pdg.Key.goods_owner_id,
series_number = pdg.Key.series_number,
+ pdg.Key.expiry_date,
+ pdg.Key.price,
+ pdg.Key.putaway_date,
qty_locked = pdg.Sum(t => t.qty)
};
var move_locked_group_datas = from m in move_DBSet.AsNoTracking()
where m.move_status == 0
- group m by new { m.sku_id, m.orig_goods_location_id, m.goods_owner_id, m.series_number } into mg
+ group m by new { m.sku_id, m.orig_goods_location_id, m.goods_owner_id, m.series_number, m.expiry_date, m.price, m.putaway_date } into mg
select new
{
sku_id = mg.Key.sku_id,
goods_location_id = mg.Key.orig_goods_location_id,
goods_owner_id = mg.Key.goods_owner_id,
series_number = mg.Key.series_number,
+ mg.Key.expiry_date,
+ mg.Key.price,
+ mg.Key.putaway_date,
qty_locked = mg.Sum(t => t.qty)
};
var query = from sg in stock_group_datas
- join dp in dispatch_group_datas on new { sg.sku_id, sg.goods_location_id, sg.goods_owner_id, sg.series_number } equals new { dp.sku_id, dp.goods_location_id, dp.goods_owner_id, dp.series_number } into dp_left
+ join dp in dispatch_group_datas on new { sg.sku_id, sg.goods_location_id, sg.goods_owner_id, sg.series_number, sg.expiry_date, sg.price, sg.putaway_date } equals new { dp.sku_id, dp.goods_location_id, dp.goods_owner_id, dp.series_number, dp.expiry_date, dp.price, dp.putaway_date } into dp_left
from dp in dp_left.DefaultIfEmpty()
- join pl in process_locked_group_datas on new { sg.sku_id, sg.goods_location_id, sg.goods_owner_id, sg.series_number } equals new { pl.sku_id, pl.goods_location_id, pl.goods_owner_id, pl.series_number } into pl_left
+ join pl in process_locked_group_datas on new { sg.sku_id, sg.goods_location_id, sg.goods_owner_id, sg.series_number, sg.expiry_date, sg.price, sg.putaway_date } equals new { pl.sku_id, pl.goods_location_id, pl.goods_owner_id, pl.series_number, pl.expiry_date, pl.price, pl.putaway_date } into pl_left
from pl in pl_left.DefaultIfEmpty()
- join m in move_locked_group_datas on new { sg.sku_id, sg.goods_location_id, sg.goods_owner_id, sg.series_number } equals new { m.sku_id, m.goods_location_id, m.goods_owner_id, m.series_number } into m_left
+ join m in move_locked_group_datas on new { sg.sku_id, sg.goods_location_id, sg.goods_owner_id, sg.series_number, sg.expiry_date, sg.price, sg.putaway_date } equals new { m.sku_id, m.goods_location_id, m.goods_owner_id, m.series_number, m.expiry_date, m.price, m.putaway_date } into m_left
from m in m_left.DefaultIfEmpty()
join sku in sku_DBSet on sg.sku_id equals sku.id
join spu in spu_DBSet on sku.spu_id equals spu.id
@@ -276,6 +295,9 @@ namespace ModernWMS.WMS.Services
location_name = gl.location_name,
warehouse_name = gl.warehouse_name,
series_number = sg.series_number,
+ expiry_date = sg.expiry_date,
+ price = sg.price,
+ putaway_date = sg.putaway_date,
};
query = query.Where(t => t.qty > 0).Where(queries.AsExpression());
int totals = await query.CountAsync();
@@ -420,43 +442,52 @@ namespace ModernWMS.WMS.Services
var dispatch_group_datas = from dp in dispatch_DBSet.AsNoTracking()
join dpp in dispatchpick_DBSet.AsNoTracking() on dp.id equals dpp.dispatchlist_id
where dp.dispatch_status > 1 && dp.dispatch_status < 6
- group dpp by new { dpp.sku_id, dpp.goods_location_id, dpp.goods_owner_id, dpp.series_number } into dg
+ group dpp by new { dpp.sku_id, dpp.goods_location_id, dpp.goods_owner_id, dpp.series_number, dpp.expiry_date, dpp.price, dpp.putaway_date } into dg
select new
{
goods_owner_id = dg.Key.goods_owner_id,
sku_id = dg.Key.sku_id,
goods_location_id = dg.Key.goods_location_id,
series_number = dg.Key.series_number,
+ dg.Key.expiry_date,
+ dg.Key.price,
+ dg.Key.putaway_date,
qty_locked = dg.Sum(t => t.pick_qty)
};
var process_locked_group_datas = from pd in processdetail_DBSet
where pd.is_update_stock == false && pd.is_source == true
- group pd by new { pd.sku_id, pd.goods_location_id, pd.goods_owner_id, pd.series_number } into pdg
+ group pd by new { pd.sku_id, pd.goods_location_id, pd.goods_owner_id, pd.series_number, pd.expiry_date, pd.price, pd.putaway_date } into pdg
select new
{
goods_owner_id = pdg.Key.goods_owner_id,
sku_id = pdg.Key.sku_id,
goods_location_id = pdg.Key.goods_location_id,
series_number = pdg.Key.series_number,
+ pdg.Key.expiry_date,
+ pdg.Key.price,
+ pdg.Key.putaway_date,
qty_locked = pdg.Sum(t => t.qty)
};
var move_locked_group_datas = from m in move_DBSet.AsNoTracking()
where m.move_status == 0
- group m by new { m.sku_id, m.orig_goods_location_id, m.goods_owner_id, m.series_number } into mg
+ group m by new { m.sku_id, m.orig_goods_location_id, m.goods_owner_id, m.series_number, m.expiry_date, m.price, m.putaway_date } into mg
select new
{
goods_owner_id = mg.Key.goods_owner_id,
sku_id = mg.Key.sku_id,
goods_location_id = mg.Key.orig_goods_location_id,
series_number = mg.Key.series_number,
+ mg.Key.expiry_date,
+ mg.Key.price,
+ mg.Key.putaway_date,
qty_locked = mg.Sum(t => t.qty)
};
var query = from sg in DbSet.AsNoTracking()
- join dp in dispatch_group_datas on new { sg.sku_id, sg.goods_location_id, sg.goods_owner_id, sg.series_number } equals new { dp.sku_id, dp.goods_location_id, dp.goods_owner_id, dp.series_number } into dp_left
+ join dp in dispatch_group_datas on new { sg.sku_id, sg.goods_location_id, sg.goods_owner_id, sg.series_number, sg.expiry_date, sg.price, sg.putaway_date } equals new { dp.sku_id, dp.goods_location_id, dp.goods_owner_id, dp.series_number, dp.expiry_date, dp.price, dp.putaway_date } into dp_left
from dp in dp_left.DefaultIfEmpty()
- join pl in process_locked_group_datas on new { sg.sku_id, sg.goods_location_id, sg.goods_owner_id, sg.series_number } equals new { pl.sku_id, pl.goods_location_id, pl.goods_owner_id, pl.series_number } into pl_left
+ join pl in process_locked_group_datas on new { sg.sku_id, sg.goods_location_id, sg.goods_owner_id, sg.series_number, sg.expiry_date, sg.price, sg.putaway_date } equals new { pl.sku_id, pl.goods_location_id, pl.goods_owner_id, pl.series_number, pl.expiry_date, pl.price, pl.putaway_date } into pl_left
from pl in pl_left.DefaultIfEmpty()
- join m in move_locked_group_datas on new { sg.sku_id, sg.goods_location_id, sg.goods_owner_id, sg.series_number } equals new { m.sku_id, m.goods_location_id, m.goods_owner_id, m.series_number } into m_left
+ join m in move_locked_group_datas on new { sg.sku_id, sg.goods_location_id, sg.goods_owner_id, sg.series_number, sg.expiry_date, sg.price, sg.putaway_date } equals new { m.sku_id, m.goods_location_id, m.goods_owner_id, m.series_number, m.expiry_date, m.price, m.putaway_date } into m_left
from m in m_left.DefaultIfEmpty()
join sku in sku_DBSet on sg.sku_id equals sku.id
join spu in spu_DBSet on sku.spu_id equals spu.id
@@ -481,6 +512,9 @@ namespace ModernWMS.WMS.Services
sg.id,
sku.unit,
sg.series_number,
+ sg.expiry_date,
+ sg.price,
+ sg.putaway_date,
sg.tenant_id
} into g
select new StockViewModel
@@ -497,6 +531,9 @@ namespace ModernWMS.WMS.Services
location_name = g.Key.location_name,
warehouse_name = g.Key.warehouse_name,
series_number = g.Key.series_number,
+ expiry_date = g.Key.expiry_date,
+ price = g.Key.price,
+ putaway_date = g.Key.putaway_date,
is_freeze = g.Key.is_freeze,
id = g.Key.id,
tenant_id = g.Key.tenant_id,
@@ -595,7 +632,8 @@ namespace ModernWMS.WMS.Services
&& (input.warehouse_id == 0 || gl.warehouse_id == input.warehouse_id)
&& (input.spu_name == "" || spu.spu_name.Contains(input.spu_name))
&& (input.location_name == "" || gl.location_name.Contains(input.location_name))
- group new { stock, gw } by new { stock.sku_id, stock.goods_location_id, stock.goods_owner_id, gw.goods_owner_name, stock.series_number } into sg
+ && (input.series_number == "" || stock.series_number == input.series_number)
+ group new { stock, gw } by new { stock.sku_id, stock.goods_location_id, stock.goods_owner_id, gw.goods_owner_name, stock.series_number, stock.expiry_date, stock.price, stock.putaway_date } into sg
select new
{
sku_id = sg.Key.sku_id,
@@ -603,6 +641,9 @@ namespace ModernWMS.WMS.Services
goods_owner_id = sg.Key.goods_owner_id,
goods_owner_name = sg.Key.goods_owner_name,
series_number = sg.Key.series_number,
+ sg.Key.expiry_date,
+ sg.Key.price,
+ sg.Key.putaway_date,
qty_frozen = sg.Where(t => t.stock.is_freeze == true).Sum(e => e.stock.qty),
qty = sg.Sum(t => t.stock.qty)
};
@@ -610,44 +651,53 @@ namespace ModernWMS.WMS.Services
var dispatch_group_datas = from dp in dispatch_DBSet.AsNoTracking()
join dpp in dispatchpick_DBSet.AsNoTracking() on dp.id equals dpp.dispatchlist_id
where dp.dispatch_status > 1 && dp.dispatch_status < 6
- group dpp by new { dpp.sku_id, dpp.goods_location_id, dpp.goods_owner_id, dpp.series_number } into dg
+ group dpp by new { dpp.sku_id, dpp.goods_location_id, dpp.goods_owner_id, dpp.series_number, dpp.expiry_date, dpp.price, dpp.putaway_date } into dg
select new
{
sku_id = dg.Key.sku_id,
goods_location_id = dg.Key.goods_location_id,
goods_owner_id = dg.Key.goods_owner_id,
series_number = dg.Key.series_number,
+ dg.Key.expiry_date,
+ dg.Key.price,
+ dg.Key.putaway_date,
qty_locked = dg.Sum(t => t.pick_qty)
};
var process_locked_group_datas = from pd in processdetail_DBSet
where pd.is_update_stock == false && pd.is_source == true
- group pd by new { pd.sku_id, pd.goods_location_id, pd.goods_owner_id, pd.series_number } into pdg
+ group pd by new { pd.sku_id, pd.goods_location_id, pd.goods_owner_id, pd.series_number, pd.expiry_date, pd.price, pd.putaway_date } into pdg
select new
{
sku_id = pdg.Key.sku_id,
goods_location_id = pdg.Key.goods_location_id,
goods_owner_id = pdg.Key.goods_owner_id,
series_number = pdg.Key.series_number,
+ pdg.Key.expiry_date,
+ pdg.Key.price,
+ pdg.Key.putaway_date,
qty_locked = pdg.Sum(t => t.qty)
};
var move_locked_group_datas = from m in move_DBSet.AsNoTracking()
where m.move_status == 0
- group m by new { m.sku_id, m.orig_goods_location_id, m.goods_owner_id, m.series_number } into mg
+ group m by new { m.sku_id, m.orig_goods_location_id, m.goods_owner_id, m.series_number, m.expiry_date, m.price, m.putaway_date } into mg
select new
{
sku_id = mg.Key.sku_id,
goods_location_id = mg.Key.orig_goods_location_id,
goods_owner_id = mg.Key.goods_owner_id,
series_number = mg.Key.series_number,
+ mg.Key.expiry_date,
+ mg.Key.price,
+ mg.Key.putaway_date,
qty_locked = mg.Sum(t => t.qty)
};
var query = from sg in stock_group_datas
- join dp in dispatch_group_datas on new { sg.sku_id, sg.goods_location_id, sg.goods_owner_id, sg.series_number } equals new { dp.sku_id, dp.goods_location_id, dp.goods_owner_id, dp.series_number } into dp_left
+ join dp in dispatch_group_datas on new { sg.sku_id, sg.goods_location_id, sg.goods_owner_id, sg.series_number, sg.expiry_date, sg.price, sg.putaway_date } equals new { dp.sku_id, dp.goods_location_id, dp.goods_owner_id, dp.series_number, dp.expiry_date, dp.price, dp.putaway_date } into dp_left
from dp in dp_left.DefaultIfEmpty()
- join pl in process_locked_group_datas on new { sg.sku_id, sg.goods_location_id, sg.goods_owner_id, sg.series_number } equals new { pl.sku_id, pl.goods_location_id, pl.goods_owner_id, pl.series_number } into pl_left
+ join pl in process_locked_group_datas on new { sg.sku_id, sg.goods_location_id, sg.goods_owner_id, sg.series_number, sg.expiry_date, sg.price, sg.putaway_date } equals new { pl.sku_id, pl.goods_location_id, pl.goods_owner_id, pl.series_number, pl.expiry_date, pl.price, pl.putaway_date } into pl_left
from pl in pl_left.DefaultIfEmpty()
- join m in move_locked_group_datas on new { sg.sku_id, sg.goods_location_id, sg.goods_owner_id, sg.series_number } equals new { m.sku_id, m.goods_location_id, m.goods_owner_id, m.series_number } into m_left
+ join m in move_locked_group_datas on new { sg.sku_id, sg.goods_location_id, sg.goods_owner_id, sg.series_number, sg.expiry_date, sg.price, sg.putaway_date } equals new { m.sku_id, m.goods_location_id, m.goods_owner_id, m.series_number, m.expiry_date, m.price, m.putaway_date } into m_left
from m in m_left.DefaultIfEmpty()
join sku in sku_DBSet on sg.sku_id equals sku.id
join spu in spu_DBSet on sku.spu_id equals spu.id
@@ -667,6 +717,9 @@ namespace ModernWMS.WMS.Services
location_name = gl.location_name,
warehouse_name = gl.warehouse_name,
series_number = sg.series_number,
+ expiry_date = sg.expiry_date,
+ price = sg.price,
+ putaway_date = sg.putaway_date,
goods_location_id = sg.goods_location_id
};
@@ -713,12 +766,15 @@ namespace ModernWMS.WMS.Services
{
dp.dispatch_no,
wh.warehouse_name,
- location.location_name,
+ location_name = location.location_name,
spu.spu_name,
spu.spu_code,
sku.sku_name,
sku.sku_code,
dpp.series_number,
+ dpp.price,
+ dpp.expiry_date,
+ dpp.putaway_date,
dp.customer_name,
dp.create_time,
dpp.goods_owner_id,
@@ -735,6 +791,9 @@ namespace ModernWMS.WMS.Services
sku_name = dg.Key.sku_name,
sku_code = dg.Key.sku_code,
series_number = dg.Key.series_number,
+ expiry_date = dg.Key.expiry_date,
+ price = dg.Key.price,
+ putaway_date = dg.Key.putaway_date,
customer_name = dg.Key.customer_name,
delivery_date = dg.Key.create_time,
goods_owner_name = dg.Key.goods_owner_name,
@@ -748,6 +807,88 @@ namespace ModernWMS.WMS.Services
return (list, totals);
}
+ ///
+ /// stock age page search
+ ///
+ /// args
+ /// currentUser
+ ///
+ public async Task<(List data, int totals)> StockAgePageAsync(StockAgeSearchViewModel input, CurrentUser currentUser)
+ {
+ var database_config = Configuration.GetSection("Database")["db"].ToUpper();
+ var DbSet = _dBContext.GetDbSet().Where(t => t.tenant_id.Equals(currentUser.tenant_id));
+ var sku_DBSet = _dBContext.GetDbSet().AsNoTracking();
+ var spu_DBSet = _dBContext.GetDbSet().AsNoTracking();
+ var location_DBSet = _dBContext.GetDbSet().AsNoTracking();
+ if (input.expiry_date_from > UtilConvert.MinDate)
+ {
+ DbSet = DbSet.Where(t => t.expiry_date >= input.expiry_date_from);
+ }
+ if (input.expiry_date_to > UtilConvert.MinDate)
+ {
+ DbSet = DbSet.Where(t => t.expiry_date <= input.expiry_date_to);
+ }
+ var stock_group_datas = from stock in DbSet.AsNoTracking()
+ join gw in _dBContext.GetDbSet().AsNoTracking() on stock.goods_owner_id equals gw.id into gw_left
+ from gw in gw_left.DefaultIfEmpty()
+ where stock.tenant_id == currentUser.tenant_id
+ group new { stock, gw } by new { stock.sku_id, stock.goods_location_id, stock.goods_owner_id, stock.series_number, gw.goods_owner_name, stock.expiry_date, stock.price, stock.putaway_date } into sg
+ select new
+ {
+ sku_id = sg.Key.sku_id,
+ goods_location_id = sg.Key.goods_location_id,
+ goods_owner_id = sg.Key.goods_owner_id,
+ goods_owner_name = sg.Key.goods_owner_name,
+ series_number = sg.Key.series_number,
+ sg.Key.expiry_date,
+ sg.Key.price,
+ sg.Key.putaway_date,
+ qty_frozen = sg.Where(t => t.stock.is_freeze == true).Sum(e => e.stock.qty),
+ qty = sg.Sum(t => t.stock.qty)
+ };
+ var today = DateTime.Today;
+ var query = from sg in stock_group_datas
+ join sku in sku_DBSet on sg.sku_id equals sku.id
+ join spu in spu_DBSet on sku.spu_id equals spu.id
+ join gl in location_DBSet on sg.goods_location_id equals gl.id
+ where spu.spu_name.Contains(input.spu_name) && sku.sku_name.Contains(input.sku_name)
+ && sku.sku_code.Contains(input.sku_code) && spu.spu_code.Contains(input.spu_code)
+ && gl.warehouse_name.Contains(input.warehouse_name)
+ select new StockAgeViewModel
+ {
+ sku_id = sg.sku_id,
+ goods_owner_name = sg.goods_owner_name,
+ spu_name = spu.spu_name,
+ spu_code = spu.spu_code,
+ sku_code = sku.sku_code,
+ sku_name = sku.sku_name,
+ qty = sg.qty,
+ location_name = gl.location_name,
+ warehouse_name = gl.warehouse_name,
+ series_number = sg.series_number,
+ expiry_date = sg.expiry_date,
+ price = sg.price,
+ putaway_date = sg.putaway_date,
+ stock_age = sg.putaway_date == UtilConvert.MinDate ? 0 : database_config == "MYSQL" ? Microsoft.EntityFrameworkCore.MySqlDbFunctionsExtensions.DateDiffDay(EF.Functions, sg.putaway_date.Date, today) : Microsoft.EntityFrameworkCore.SqlServerDbFunctionsExtensions.DateDiffDay(EF.Functions, sg.putaway_date.Date, today),
+ };
+
+ if (input.stock_age_from > 0)
+ {
+ query = query.Where(t => t.stock_age >= input.stock_age_from);
+ }
+ if (input.stock_age_to > 0)
+ {
+ query = query.Where(t => t.stock_age <= input.stock_age_to);
+ }
+ query = query.Where(t => t.qty > 0);
+ int totals = await query.CountAsync();
+ var list = await query.OrderBy(t => t.sku_code)
+ .Skip((input.pageIndex - 1) * input.pageSize)
+ .Take(input.pageSize)
+ .ToListAsync();
+ return (list, totals);
+ }
+
#endregion Api
}
}
\ No newline at end of file
diff --git a/backend/ModernWMS.WMS/Services/Stockadjust/StockadjustService.cs b/backend/ModernWMS.WMS/Services/Stockadjust/StockadjustService.cs
index 49c2f96..fdd3772 100644
--- a/backend/ModernWMS.WMS/Services/Stockadjust/StockadjustService.cs
+++ b/backend/ModernWMS.WMS/Services/Stockadjust/StockadjustService.cs
@@ -108,6 +108,9 @@ namespace ModernWMS.WMS.Services
create_time = sj.create_time,
last_update_time = sj.last_update_time,
series_number = sj.series_number,
+ expiry_date = sj.expiry_date,
+ price = sj.price,
+ putaway_date = sj.putaway_date,
};
query = query.Where(queries.AsExpression());
int totals = await query.CountAsync();
@@ -195,6 +198,9 @@ namespace ModernWMS.WMS.Services
entity.source_table_id = viewModel.source_table_id;
entity.last_update_time = DateTime.Now;
entity.series_number = viewModel.series_number;
+ entity.expiry_date = viewModel.expiry_date;
+ entity.price = viewModel.price;
+ entity.putaway_date = viewModel.putaway_date;
var qty = await _dBContext.SaveChangesAsync();
if (qty > 0)
{
@@ -255,7 +261,7 @@ namespace ModernWMS.WMS.Services
}
}
var stock_DBSet = _dBContext.GetDbSet();
- var stock = await stock_DBSet.Where(t => t.goods_owner_id == entity.goods_owner_id && t.series_number == entity.series_number && t.goods_location_id == entity.goods_location_id && t.sku_id == entity.sku_id).FirstOrDefaultAsync();
+ var stock = await stock_DBSet.Where(t => t.goods_owner_id == entity.goods_owner_id && t.series_number == entity.series_number && t.goods_location_id == entity.goods_location_id && t.sku_id == entity.sku_id && t.expiry_date == entity.expiry_date && t.price == entity.price && t.putaway_date == entity.putaway_date).FirstOrDefaultAsync();
if (stock == null)
{
stock = new StockEntity
@@ -266,6 +272,9 @@ namespace ModernWMS.WMS.Services
qty = entity.qty,
goods_owner_id = entity.goods_owner_id,
series_number = entity.series_number,
+ expiry_date = entity.expiry_date,
+ price = entity.price,
+ putaway_date = entity.putaway_date,
is_freeze = false,
last_update_time = DateTime.Now,
tenant_id = entity.tenant_id,
diff --git a/backend/ModernWMS.WMS/Services/Stockfreeze/StockfreezeService.cs b/backend/ModernWMS.WMS/Services/Stockfreeze/StockfreezeService.cs
index 517fadd..6a54c2e 100644
--- a/backend/ModernWMS.WMS/Services/Stockfreeze/StockfreezeService.cs
+++ b/backend/ModernWMS.WMS/Services/Stockfreeze/StockfreezeService.cs
@@ -17,6 +17,7 @@ using ModernWMS.Core.DynamicSearch;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using Microsoft.CodeAnalysis;
+using ModernWMS.Core;
namespace ModernWMS.WMS.Services
{
@@ -37,6 +38,11 @@ namespace ModernWMS.WMS.Services
///
private readonly IStringLocalizer _stringLocalizer;
+ ///
+ /// Function Helper
+ ///
+ private readonly FunctionHelper _functionHelper;
+
#endregion Args
#region constructor
@@ -49,10 +55,11 @@ namespace ModernWMS.WMS.Services
public StockfreezeService(
SqlDBContext dBContext
, IStringLocalizer stringLocalizer
- )
+ , FunctionHelper functionHelper)
{
this._dBContext = dBContext;
this._stringLocalizer = stringLocalizer;
+ this._functionHelper = functionHelper;
}
#endregion constructor
@@ -104,7 +111,7 @@ namespace ModernWMS.WMS.Services
.Where(t => t.tenant_id.Equals(currentUser.tenant_id))
.Where(queries.AsExpression());
int totals = await query.CountAsync();
- var list = await query.OrderByDescending(t => t.handle_time)
+ var list = await query.OrderByDescending(t => t.last_update_time)
.Skip((pageSearch.pageIndex - 1) * pageSearch.pageSize)
.Take(pageSearch.pageSize)
.ToListAsync();
@@ -153,10 +160,7 @@ namespace ModernWMS.WMS.Services
warehouse_name = location.warehouse_name,
series_number = m.series_number,
}).FirstOrDefaultAsync();
- if (data == null)
- {
- return null;
- }
+
return data;
}
@@ -175,9 +179,9 @@ namespace ModernWMS.WMS.Services
entity.handler = currentUser.user_name;
entity.last_update_time = DateTime.Now;
entity.tenant_id = currentUser.tenant_id;
- entity.job_code = await GetOrderCode(currentUser);
+ entity.job_code = await _functionHelper.GetFormNoAsync("Stockfreeze");
var stock_DBSet = _dBContext.GetDbSet();
- var stocks = await stock_DBSet.Where(t => t.goods_location_id == entity.goods_location_id && t.goods_owner_id == entity.goods_owner_id && t.sku_id == entity.sku_id).ToListAsync();
+ var stocks = await stock_DBSet.Where(t => t.goods_location_id == entity.goods_location_id && t.goods_owner_id == entity.goods_owner_id && t.sku_id == entity.sku_id && t.series_number == entity.series_number ).ToListAsync();
foreach (var stock in stocks)
{
if (entity.job_type == true)
diff --git a/backend/ModernWMS.WMS/Services/Stockmove/StockmoveService.cs b/backend/ModernWMS.WMS/Services/Stockmove/StockmoveService.cs
index 374897c..92117f9 100644
--- a/backend/ModernWMS.WMS/Services/Stockmove/StockmoveService.cs
+++ b/backend/ModernWMS.WMS/Services/Stockmove/StockmoveService.cs
@@ -18,6 +18,7 @@ using Microsoft.AspNetCore.Mvc;
using static System.Runtime.InteropServices.JavaScript.JSType;
using System;
using ModernWMS.Core.Utility;
+using ModernWMS.Core;
namespace ModernWMS.WMS.Services
{
@@ -38,6 +39,11 @@ namespace ModernWMS.WMS.Services
///
private readonly IStringLocalizer _stringLocalizer;
+ ///
+ /// Function Helper
+ ///
+ private readonly FunctionHelper _functionHelper;
+
#endregion Args
#region constructor
@@ -50,10 +56,12 @@ namespace ModernWMS.WMS.Services
public StockmoveService(
SqlDBContext dBContext
, IStringLocalizer stringLocalizer
+ , FunctionHelper functionHelper
)
{
this._dBContext = dBContext;
this._stringLocalizer = stringLocalizer;
+ this._functionHelper = functionHelper;
}
#endregion constructor
@@ -108,11 +116,14 @@ namespace ModernWMS.WMS.Services
orig_goods_location_name = orig_location.location_name,
orig_goods_warehouse = orig_location.warehouse_name,
series_number = m.series_number,
+ expiry_date = m.expiry_date,
+ price = m.price,
+ putaway_date = m.putaway_date,
};
query = query.Where(t => t.tenant_id.Equals(currentUser.tenant_id))
.Where(queries.AsExpression());
int totals = await query.CountAsync();
- var list = await query.OrderByDescending(t => t.create_time)
+ var list = await query.OrderByDescending(t => t.last_update_time)
.Skip((pageSearch.pageIndex - 1) * pageSearch.pageSize)
.Take(pageSearch.pageSize)
.ToListAsync();
@@ -157,6 +168,9 @@ namespace ModernWMS.WMS.Services
orig_goods_location_name = orig_location.location_name,
orig_goods_warehouse = orig_location.warehouse_name,
series_number = m.series_number,
+ expiry_date = m.expiry_date,
+ price = m.price,
+ putaway_date = m.putaway_date,
}
).ToListAsync();
return data.Adapt>();
@@ -201,11 +215,11 @@ namespace ModernWMS.WMS.Services
orig_goods_location_name = orig_location.location_name,
orig_goods_warehouse = orig_location.warehouse_name,
series_number = m.series_number,
+ expiry_date = m.expiry_date,
+ price = m.price,
+ putaway_date = m.putaway_date,
}).FirstOrDefaultAsync();
- if (data == null)
- {
- return null;
- }
+
return data;
}
@@ -226,7 +240,7 @@ namespace ModernWMS.WMS.Services
var dispatch_group_datas = from dp in dispatch_DBSet.AsNoTracking()
join dpp in dispatchpick_DBSet.AsNoTracking() on dp.id equals dpp.dispatchlist_id
where dp.dispatch_status > 1 && dp.dispatch_status < 6
- && dpp.goods_owner_id == entity.goods_owner_id && dpp.series_number == entity.series_number && dpp.goods_location_id == entity.orig_goods_location_id && dpp.sku_id == entity.sku_id
+ && dpp.goods_owner_id == entity.goods_owner_id && dpp.series_number == entity.series_number && dpp.goods_location_id == entity.orig_goods_location_id && dpp.sku_id == entity.sku_id && dpp.expiry_date == entity.expiry_date && dpp.price == entity.price && dpp.putaway_date == entity.putaway_date
group dpp by new { dpp.sku_id, dpp.goods_location_id } into dg
select new
{
@@ -237,7 +251,7 @@ namespace ModernWMS.WMS.Services
var process_locked_group_datas = from pd in processdetail_DBSet
where pd.is_update_stock == false
&& pd.sku_id == entity.sku_id && pd.goods_location_id == entity.orig_goods_location_id
- && pd.goods_owner_id == entity.goods_owner_id && pd.series_number == entity.series_number
+ && pd.goods_owner_id == entity.goods_owner_id && pd.series_number == entity.series_number && pd.expiry_date == entity.expiry_date && pd.price == entity.price && pd.putaway_date == entity.putaway_date
group pd by new { pd.sku_id, pd.goods_location_id } into pdg
select new
{
@@ -247,7 +261,7 @@ namespace ModernWMS.WMS.Services
};
var move_locked_group_datas = from sm in DbSet.AsNoTracking()
where sm.move_status == 0 && sm.sku_id == entity.sku_id && sm.orig_goods_location_id == entity.orig_goods_location_id
- && sm.goods_owner_id == entity.goods_owner_id && sm.series_number == entity.series_number
+ && sm.goods_owner_id == entity.goods_owner_id && sm.series_number == entity.series_number && sm.expiry_date == entity.expiry_date && sm.price == entity.price && sm.putaway_date == entity.putaway_date
group sm by new { sm.sku_id, goods_location_id = sm.orig_goods_location_id } into smg
select new
{
@@ -266,13 +280,14 @@ namespace ModernWMS.WMS.Services
from sm in sm_left.DefaultIfEmpty()
where sg.sku_id == entity.sku_id && sg.goods_location_id == entity.orig_goods_location_id
&& sg.goods_owner_id == entity.goods_owner_id && sg.series_number == entity.series_number
+ && sg.expiry_date == entity.expiry_date && sg.price == entity.price && sg.putaway_date == entity.putaway_date
select new
{
id = sg.id,
qty_available = sg.is_freeze ? 0 : (sg.qty - (dp.qty_locked == null ? 0 : dp.qty_locked) - (pl.qty_locked == null ? 0 : pl.qty_locked) - (sm.qty_locked == null ? 0 : sm.qty_locked)),
}
).FirstOrDefaultAsync();
- var dest_stock = await stock_DBSet.FirstOrDefaultAsync(t => t.goods_owner_id == entity.goods_owner_id && t.series_number == entity.series_number && t.goods_location_id == entity.dest_googs_location_id && t.sku_id == entity.sku_id);
+ var dest_stock = await stock_DBSet.FirstOrDefaultAsync(t => t.goods_owner_id == entity.goods_owner_id && t.series_number == entity.series_number && t.goods_location_id == entity.dest_googs_location_id && t.sku_id == entity.sku_id && t.expiry_date == entity.expiry_date && t.price == entity.price && t.putaway_date == entity.putaway_date);
if (orig_stock == null || orig_stock.qty_available < entity.qty)
{
return (0, _stringLocalizer["qty_not_available"]);
@@ -287,7 +302,7 @@ namespace ModernWMS.WMS.Services
entity.creator = currentUser.user_name;
entity.last_update_time = DateTime.Now;
entity.tenant_id = currentUser.tenant_id;
- entity.job_code = await GetOrderCode(currentUser);
+ entity.job_code = await _functionHelper.GetFormNoAsync("Stockmove");
await DbSet.AddAsync(entity);
await _dBContext.SaveChangesAsync();
if (entity.id > 0)
@@ -315,12 +330,13 @@ namespace ModernWMS.WMS.Services
{
return (false, _stringLocalizer["not_exists_entity"]);
}
+ var now_time = DateTime.Now;
entity.handler = currentUser.user_name;
- entity.handle_time = DateTime.Now;
+ entity.handle_time = now_time;
entity.move_status = 1;
- entity.last_update_time = DateTime.Now;
- var orig_stock = await stock_DBSet.FirstOrDefaultAsync(t => t.goods_owner_id == entity.goods_owner_id && t.series_number == entity.series_number && t.goods_location_id == entity.orig_goods_location_id && t.sku_id == entity.sku_id);
- var dest_stock = await stock_DBSet.FirstOrDefaultAsync(t => t.goods_owner_id == entity.goods_owner_id && t.series_number == entity.series_number && t.goods_location_id == entity.dest_googs_location_id && t.sku_id != entity.sku_id);
+ entity.last_update_time = now_time;
+ var orig_stock = await stock_DBSet.FirstOrDefaultAsync(t => t.goods_owner_id == entity.goods_owner_id && t.series_number == entity.series_number && t.goods_location_id == entity.orig_goods_location_id && t.sku_id == entity.sku_id && t.expiry_date == entity.expiry_date && t.price == entity.price && t.putaway_date == entity.putaway_date);
+ var dest_stock = await stock_DBSet.FirstOrDefaultAsync(t => t.goods_owner_id == entity.goods_owner_id && t.series_number == entity.series_number && t.goods_location_id == entity.dest_googs_location_id && t.sku_id != entity.sku_id && t.expiry_date == entity.expiry_date && t.price == entity.price && t.putaway_date == entity.putaway_date);
if (orig_stock != null)
{
if (orig_stock.qty == entity.qty)
@@ -330,7 +346,7 @@ namespace ModernWMS.WMS.Services
else
{
orig_stock.qty -= entity.qty;
- orig_stock.last_update_time = DateTime.Now;
+ orig_stock.last_update_time = now_time;
}
}
if (dest_stock == null)
@@ -341,16 +357,20 @@ namespace ModernWMS.WMS.Services
sku_id = entity.sku_id,
goods_owner_id = entity.goods_owner_id,
is_freeze = false,
- last_update_time = DateTime.Now,
+ last_update_time = now_time,
qty = entity.qty,
tenant_id = entity.tenant_id,
+ series_number = entity.series_number,
+ expiry_date = entity.expiry_date,
+ price = entity.price,
+ putaway_date = entity.putaway_date,
};
await stock_DBSet.AddAsync(dest_stock);
}
else
{
dest_stock.qty += entity.qty;
- dest_stock.last_update_time = DateTime.Now;
+ dest_stock.last_update_time = now_time;
}
var saved = false;
int res = 0;
diff --git a/backend/ModernWMS.WMS/Services/Stockprocess/StockprocessService.cs b/backend/ModernWMS.WMS/Services/Stockprocess/StockprocessService.cs
index 0dd96cc..eccbcb3 100644
--- a/backend/ModernWMS.WMS/Services/Stockprocess/StockprocessService.cs
+++ b/backend/ModernWMS.WMS/Services/Stockprocess/StockprocessService.cs
@@ -20,6 +20,7 @@ using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc.Formatters.Xml;
using Microsoft.AspNetCore.SignalR.Protocol;
using System.Linq;
+using ModernWMS.Core;
namespace ModernWMS.WMS.Services
{
@@ -40,6 +41,11 @@ namespace ModernWMS.WMS.Services
///
private readonly IStringLocalizer _stringLocalizer;
+ ///
+ /// Function Helper
+ ///
+ private readonly FunctionHelper _functionHelper;
+
#endregion Args
#region constructor
@@ -52,10 +58,12 @@ namespace ModernWMS.WMS.Services
public StockprocessService(
SqlDBContext dBContext
, IStringLocalizer stringLocalizer
+ , FunctionHelper functionHelper
)
{
this._dBContext = dBContext;
this._stringLocalizer = stringLocalizer;
+ this._functionHelper = functionHelper;
}
#endregion constructor
@@ -109,7 +117,7 @@ namespace ModernWMS.WMS.Services
.Where(t => t.tenant_id.Equals(currentUser.tenant_id))
.Where(queries.AsExpression());
int totals = await query.CountAsync();
- var list = await query.OrderByDescending(t => t.create_time)
+ var list = await query.OrderByDescending(t => t.last_update_time)
.Skip((pageSearch.pageIndex - 1) * pageSearch.pageSize)
.Take(pageSearch.pageSize)
.ToListAsync();
@@ -157,6 +165,9 @@ namespace ModernWMS.WMS.Services
unit = sku.unit,
location_name = gl.location_name == null ? "" : gl.location_name,
series_number = spd.series_number,
+ expiry_date = spd.expiry_date,
+ price = spd.price,
+ putaway_date = spd.putaway_date,
}).ToListAsync();
if (entity == null)
{
@@ -207,6 +218,18 @@ namespace ModernWMS.WMS.Services
PropertyInfo t_prop_sn = typeof(StockEntity).GetProperty("series_number");
MemberExpression t_sn_exp = Expression.Property(parameterExpression, t_prop_sn);
BinaryExpression t_sn_full_exp = Expression.Equal(t_sn_exp, t_constan_sn);
+ ConstantExpression t_constan_expiry = Expression.Constant(entity.detailList[i].expiry_date);
+ PropertyInfo t_prop_expiry = typeof(StockEntity).GetProperty("expiry_date");
+ MemberExpression t_expiry_exp = Expression.Property(parameterExpression, t_prop_sn);
+ BinaryExpression t_expiry_full_exp = Expression.Equal(t_sn_exp, t_constan_sn);
+ ConstantExpression t_constan_price = Expression.Constant(entity.detailList[i].price);
+ PropertyInfo t_prop_price = typeof(StockEntity).GetProperty("price");
+ MemberExpression t_price_exp = Expression.Property(parameterExpression, t_prop_sn);
+ BinaryExpression t_price_full_exp = Expression.Equal(t_sn_exp, t_constan_sn);
+ ConstantExpression t_constan_putaway = Expression.Constant(entity.detailList[i].putaway_date);
+ PropertyInfo t_prop_putaway = typeof(StockEntity).GetProperty("putaway_date");
+ MemberExpression t_putaway_exp = Expression.Property(parameterExpression, t_prop_sn);
+ BinaryExpression t_putaway_full_exp = Expression.Equal(t_sn_exp, t_constan_sn);
var t_exp = Expression.And(t_location_full_exp, t_sku_full_exp);
t_exp = Expression.And(t_exp, t_owner_full_exp);
if (exp != null)
@@ -221,13 +244,16 @@ namespace ModernWMS.WMS.Services
var lockeds = await (from d in _dBContext.GetDbSet().AsNoTracking()
where d.is_update_stock == false && goods_location_id_list.Contains(d.goods_location_id)
&& sku_id_list.Contains(d.sku_id)
- group d by new { d.goods_location_id, d.sku_id, d.goods_owner_id, d.series_number } into lg
+ group d by new { d.goods_location_id, d.sku_id, d.goods_owner_id, d.series_number, d.expiry_date, d.price,d.putaway_date } into lg
select new
{
sku_id = lg.Key.sku_id,
goods_location_id = lg.Key.goods_location_id,
goods_owner_id = lg.Key.goods_owner_id,
series_number = lg.Key.series_number,
+ lg.Key.expiry_date,
+ lg.Key.price,
+ lg.Key.putaway_date,
qty_locked = lg.Sum(e => e.qty)
}).ToListAsync();
entity.id = 0;
@@ -235,21 +261,21 @@ namespace ModernWMS.WMS.Services
entity.creator = currentUser.user_name;
entity.last_update_time = DateTime.Now;
entity.tenant_id = currentUser.tenant_id;
- entity.job_code = await GetOrderCode(currentUser);
+ entity.job_code = await _functionHelper.GetFormNoAsync("Stockprocess");
await DbSet.AddAsync(entity);
foreach (var d in entity.detailList)
{
d.tenant_id = currentUser.tenant_id;
d.last_update_time = DateTime.Now;
d.id = 0;
- var s = stocks.FirstOrDefault(t => t.sku_id == d.sku_id && t.goods_location_id == d.goods_location_id && t.goods_owner_id == d.goods_owner_id && t.series_number == d.series_number);
+ var s = stocks.FirstOrDefault(t => t.sku_id == d.sku_id && t.goods_location_id == d.goods_location_id && t.goods_owner_id == d.goods_owner_id && t.series_number == d.series_number && t.expiry_date == d.expiry_date && t.price == d.price && t.putaway_date == d.putaway_date);
if (d.is_source == true)
{
if (s == null)
{
return (0, _stringLocalizer["data_changed"]);
}
- var locked = lockeds.FirstOrDefault(t => t.sku_id == d.sku_id && t.goods_location_id == d.goods_location_id && t.goods_owner_id == d.goods_owner_id && t.series_number == d.series_number);
+ var locked = lockeds.FirstOrDefault(t => t.sku_id == d.sku_id && t.goods_location_id == d.goods_location_id && t.goods_owner_id == d.goods_owner_id && t.series_number == d.series_number && t.expiry_date == d.expiry_date && t.price == d.price && t.putaway_date == d.putaway_date);
if ((s.qty - (locked == null ? 0 : locked.qty_locked)) < d.qty)
{
return (0, _stringLocalizer["data_changed"]);
@@ -334,6 +360,7 @@ namespace ModernWMS.WMS.Services
var detail_DBSet = _dBContext.GetDbSet();
var adjust_DBset = _dBContext.GetDbSet();
var entity = await DBSet.FirstOrDefaultAsync(t => t.id == id);
+ var now_time = DateTime.Now;
if (entity == null)
{
return (false, _stringLocalizer["not_exists_entity"]);
@@ -358,25 +385,28 @@ namespace ModernWMS.WMS.Services
job_type = 2,
goods_owner_id = d.goods_owner_id,
qty = d.is_source ? -d.qty : d.qty,
- create_time = DateTime.Now,
+ create_time = now_time,
creator = currentUser.user_name,
- last_update_time = DateTime.Now,
+ last_update_time = now_time,
tenant_id = currentUser.tenant_id,
series_number = d.series_number,
+ expiry_date = d.expiry_date,
+ price = d.price,
+ putaway_date = d.putaway_date,
}).ToList();
- entity.last_update_time = DateTime.Now;
+ entity.last_update_time = now_time;
var stock_DBSet = _dBContext.GetDbSet();
if (entity == null)
{
return (false, _stringLocalizer["not_exists_entity"]);
}
- var stocks = await stock_DBSet.Where(s => detail_DBSet.Where(t => t.stock_process_id == id).Any(t => t.goods_location_id == s.goods_location_id && t.sku_id == s.sku_id && t.goods_owner_id == s.goods_owner_id && t.series_number == s.series_number)).ToListAsync();
+ var stocks = await stock_DBSet.Where(s => detail_DBSet.Where(t => t.stock_process_id == id).Any(t => t.goods_location_id == s.goods_location_id && t.sku_id == s.sku_id && t.goods_owner_id == s.goods_owner_id && t.series_number == s.series_number && t.expiry_date == s.expiry_date && t.price == s.price && t.putaway_date == s.putaway_date)).ToListAsync();
foreach (var d in details)
{
- var stock = stocks.FirstOrDefault(t => t.goods_location_id == d.goods_location_id && t.sku_id == d.sku_id && t.goods_owner_id == d.goods_owner_id && t.series_number == d.series_number);
+ var stock = stocks.FirstOrDefault(t => t.goods_location_id == d.goods_location_id && t.sku_id == d.sku_id && t.goods_owner_id == d.goods_owner_id && t.series_number == d.series_number && t.expiry_date == d.expiry_date && t.price == d.price && t.putaway_date == d.putaway_date);
d.is_update_stock = true;
- d.last_update_time = DateTime.Now;
+ d.last_update_time = now_time;
if (d.is_source)
{
if (stock == null)
@@ -384,10 +414,11 @@ namespace ModernWMS.WMS.Services
return (false, _stringLocalizer["data_changed"]);
}
stock.qty -= d.qty;
- stock.last_update_time = DateTime.Now;
+ stock.last_update_time = now_time;
}
else
{
+ d.putaway_date = DateTime.Today;
if (stock == null)
{
await stock_DBSet.AddAsync(new StockEntity
@@ -396,8 +427,11 @@ namespace ModernWMS.WMS.Services
goods_location_id = d.goods_location_id,
goods_owner_id = d.goods_owner_id,
series_number = d.series_number,
+ expiry_date = d.expiry_date,
+ price = d.price,
+ putaway_date = d.putaway_date,
is_freeze = false,
- last_update_time = DateTime.Now,
+ last_update_time = now_time,
qty = d.qty,
tenant_id = currentUser.tenant_id
});
@@ -405,7 +439,7 @@ namespace ModernWMS.WMS.Services
else
{
stock.qty += d.qty;
- stock.last_update_time = DateTime.Now;
+ stock.last_update_time = now_time;
}
}
}
diff --git a/backend/ModernWMS.WMS/Services/Stocktaking/StocktakingService.cs b/backend/ModernWMS.WMS/Services/Stocktaking/StocktakingService.cs
index 35e01b9..ae67dd2 100644
--- a/backend/ModernWMS.WMS/Services/Stocktaking/StocktakingService.cs
+++ b/backend/ModernWMS.WMS/Services/Stocktaking/StocktakingService.cs
@@ -14,6 +14,8 @@
using ModernWMS.Core.Models;
using ModernWMS.Core.JWT;
using System.Linq;
+using ModernWMS.Core;
+using ModernWMS.Core.Utility;
namespace ModernWMS.WMS.Services
{
@@ -32,6 +34,12 @@ namespace ModernWMS.WMS.Services
/// Localizer Service
///
private readonly IStringLocalizer _stringLocalizer;
+
+ ///
+ /// functions
+ ///
+ private readonly FunctionHelper _functionHelper;
+
#endregion
#region constructor
@@ -40,13 +48,16 @@ namespace ModernWMS.WMS.Services
///
/// The DBContext
/// Localizer
+ /// functionHelper
public StocktakingService(
SqlDBContext dBContext
, IStringLocalizer stringLocalizer
+ , FunctionHelper functionHelper
)
{
this._dBContext = dBContext;
this._stringLocalizer = stringLocalizer;
+ _functionHelper = functionHelper;
}
#endregion
@@ -89,7 +100,7 @@ namespace ModernWMS.WMS.Services
id = st.id,
job_code = st.job_code,
job_status = st.job_status,
- adjust_status = adj.id == null ? false : true,
+ adjust_status = adj.id == null ? false : true,
sku_id = sku.id,
sku_code = sku.sku_code,
sku_name = sku.sku_name,
@@ -100,6 +111,10 @@ namespace ModernWMS.WMS.Services
location_name = gsl.location_name,
goods_owner_id = st.goods_owner_id,
goods_owner_name = gso.goods_owner_name == null ? string.Empty : gso.goods_owner_name,
+ expiry_date = st.expiry_date,
+ price = st.price,
+ putaway_date = st.putaway_date,
+ series_number = st.series_number,
book_qty = st.book_qty,
counted_qty = st.counted_qty,
difference_qty = st.difference_qty,
@@ -111,7 +126,7 @@ namespace ModernWMS.WMS.Services
};
query = query.Where(queries.AsExpression());
int totals = await query.CountAsync();
- var list = await query.OrderByDescending(t => t.create_time)
+ var list = await query.OrderByDescending(t => t.last_update_time)
.Skip((pageSearch.pageIndex - 1) * pageSearch.pageSize)
.Take(pageSearch.pageSize)
.ToListAsync();
@@ -157,6 +172,10 @@ namespace ModernWMS.WMS.Services
location_name = gsl.location_name,
goods_owner_id = st.goods_owner_id,
goods_owner_name = gso.goods_owner_name == null ? string.Empty : gso.goods_owner_name,
+ expiry_date = st.expiry_date,
+ price = st.price,
+ putaway_date = st.putaway_date,
+ series_number = st.series_number,
book_qty = st.book_qty,
counted_qty = st.counted_qty,
difference_qty = st.difference_qty,
@@ -187,7 +206,7 @@ namespace ModernWMS.WMS.Services
var DbSet = _dBContext.GetDbSet();
var entity = viewModel.Adapt();
entity.id = 0;
- entity.job_code = await GetOrderCode(currentUser);
+ entity.job_code = await _functionHelper.GetFormNoAsync("Stocktaking");
entity.creator = currentUser.user_name;
entity.create_time = DateTime.Now;
entity.last_update_time = DateTime.Now;
@@ -293,7 +312,12 @@ namespace ModernWMS.WMS.Services
var Stocks = _dBContext.GetDbSet();
var stockEntity = await Stocks.FirstOrDefaultAsync(t => t.sku_id.Equals(entity.sku_id)
&& t.goods_owner_id.Equals(entity.goods_owner_id)
- && t.goods_location_id.Equals(entity.goods_location_id));
+ && t.goods_location_id.Equals(entity.goods_location_id)
+ && t.series_number.Equals(entity.series_number)
+ && t.expiry_date.Equals(entity.expiry_date)
+ && t.price.Equals(entity.price)
+ && t.putaway_date.Equals(entity.putaway_date)
+ );
if (stockEntity == null)
{
await Stocks.AddAsync(new StockEntity
@@ -302,6 +326,10 @@ namespace ModernWMS.WMS.Services
goods_location_id = entity.goods_location_id,
qty = entity.difference_qty,
goods_owner_id = entity.goods_owner_id,
+ series_number = entity.series_number,
+ expiry_date = entity.expiry_date,
+ price = entity.price,
+ putaway_date = DateTime.Now.ToString("yyyy-MM-dd").ObjToDate(),
is_freeze = false,
last_update_time = DateTime.Now,
tenant_id = currentUser.tenant_id
@@ -320,6 +348,10 @@ namespace ModernWMS.WMS.Services
sku_id = entity.sku_id,
goods_location_id = entity.goods_location_id,
goods_owner_id = entity.goods_owner_id,
+ series_number = entity.series_number,
+ expiry_date = entity.expiry_date,
+ price = entity.price,
+ putaway_date = entity.putaway_date,
qty = entity.difference_qty,
creator = currentUser.user_name,
create_time = DateTime.Now,
diff --git a/backend/ModernWMS.WMS/Services/user/UserService.cs b/backend/ModernWMS.WMS/Services/user/UserService.cs
index 0eecce0..50c91a0 100644
--- a/backend/ModernWMS.WMS/Services/user/UserService.cs
+++ b/backend/ModernWMS.WMS/Services/user/UserService.cs
@@ -501,6 +501,15 @@ namespace ModernWMS.WMS.Services
sort = 6,
tenant_id = tenant_id
},new MenuEntity
+ {
+ menu_name = "stockageStatistic",
+ module = "statisticAnalysis ",
+ vue_path = "stockageStatistic",
+ vue_path_detail = "",
+ vue_directory = "statisticAnalysis/stockageStatistic",
+ sort = 7,
+ tenant_id = tenant_id
+ },new MenuEntity
{
menu_name = "warehouseProcessing",
module = "warehouseWorkingModule",
@@ -564,6 +573,16 @@ namespace ModernWMS.WMS.Services
sort = 5,
tenant_id = tenant_id
}
+ ,new MenuEntity
+ {
+ menu_name = "largeScreen",
+ module = "",
+ vue_path = "largeScreen",
+ vue_path_detail = "",
+ vue_directory = "largeScreen/largeScreen",
+ sort = 6,
+ tenant_id = tenant_id
+ }
};
#endregion menus