public async Task <GTIN> GenerateGTINAsync(int partnerId, GTINTypes gTINTypes, UserSession session) { var company = await companyQueries.GetByIdAsync(partnerId); var productions = (await productionQueries.GetAllAsync(company.Id)).ToList(); var gTINId = productions.Select(x => x.GTINId); var gTINs = await gTINQueries.GetByCompanyCodeAsync(company.GS1Code); long maxNumericExist = (gTINs.Max(x => (long?)x.Numeric) ?? 0) + 1; var sessionBuffers = await _sessionBufferService.GetByCompanyIdAsync(company.Id, SessionBufferTypes.GTIN); var now = DateTime.Now; long maxNumericBuffer = sessionBuffers .Where(x => x.ExpiredDate > now && x.PartnerId == partnerId) .Select(x => JsonConvert.DeserializeObject <GTIN>(x.DataJson)?.Numeric) .Max() ?? 0; long numericGenerate = (maxNumericExist > maxNumericBuffer ? maxNumericExist : maxNumericBuffer) + 1; GTIN gTIN = new GTIN() { CompanyCode = company.GS1Code, Numeric = numericGenerate, PartnerId = partnerId, Type = gTINTypes, UsedDate = DateTime.Now, IsUsed = true, ModifiedBy = session.Id, ModifiedDate = DateTime.Now, CreatedBy = session.Id, CreatedDate = DateTime.Now }; var id = await _sessionBufferService.InsertOrUpdateAsync(new SessionBuffer() { PartnerId = company.Id, SessionId = session.SessionId, DataJson = JsonConvert.SerializeObject(gTIN), ExpiredDate = DateTime.Now.AddHours(2), Type = SessionBufferTypes.GTIN, }, session); return(gTIN); }
public static IGTINTypeService GetGTINService(this GTINTypes gTINTypes, IGTINQueries gTINQueries, IGTINRepository gTINRepository, ISessionBufferService _sessionBufferService) { switch (gTINTypes) { case GTINTypes.gtin_8: return(new GTIN8Service(gTINQueries, gTINRepository, _sessionBufferService)); case GTINTypes.gtin_12: return(new GTIN12Service(gTINQueries, gTINRepository, _sessionBufferService)); case GTINTypes.gtin_13: return(new GTIN13Service(gTINQueries, gTINRepository, _sessionBufferService)); case GTINTypes.gtin_14: return(new GTIN14Service(gTINQueries, gTINRepository, _sessionBufferService)); default: return(new GTIN13Service(gTINQueries, gTINRepository, _sessionBufferService)); } }
public GenerateGTINCommand(GTINTypes type) { Model = type; }