Create a first migration
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
// <auto-generated />
|
||||
namespace InventoryTraker.Web.Migrations
|
||||
{
|
||||
using System.CodeDom.Compiler;
|
||||
using System.Data.Entity.Migrations;
|
||||
using System.Data.Entity.Migrations.Infrastructure;
|
||||
using System.Resources;
|
||||
|
||||
[GeneratedCode("EntityFramework.Migrations", "6.1.3-40302")]
|
||||
public sealed partial class Initial : IMigrationMetadata
|
||||
{
|
||||
private readonly ResourceManager Resources = new ResourceManager(typeof(Initial));
|
||||
|
||||
string IMigrationMetadata.Id
|
||||
{
|
||||
get { return "201609201242047_Initial"; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Source
|
||||
{
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
string IMigrationMetadata.Target
|
||||
{
|
||||
get { return Resources.GetString("Target"); }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,156 @@
|
||||
namespace InventoryTraker.Web.Migrations
|
||||
{
|
||||
using System;
|
||||
using System.Data.Entity.Migrations;
|
||||
|
||||
public partial class Initial : DbMigration
|
||||
{
|
||||
|
||||
|
||||
public override void Up()
|
||||
{
|
||||
CreateTable(
|
||||
"dbo.Inventories",
|
||||
c => new
|
||||
{
|
||||
Id = c.Int(nullable: false, identity: true),
|
||||
ExpirationDate = c.DateTime(nullable: false),
|
||||
AddedDate = c.DateTime(nullable: false),
|
||||
Quantity = c.Int(nullable: false),
|
||||
Memo = c.String(),
|
||||
InventoryType_Id = c.Int(),
|
||||
})
|
||||
.PrimaryKey(t => t.Id)
|
||||
.ForeignKey("dbo.InventoryTypes", t => t.InventoryType_Id)
|
||||
.Index(t => t.InventoryType_Id);
|
||||
|
||||
CreateTable(
|
||||
"dbo.InventoryTypes",
|
||||
c => new
|
||||
{
|
||||
Id = c.Int(nullable: false, identity: true),
|
||||
Identifier = c.String(nullable: false),
|
||||
Name = c.String(nullable: false),
|
||||
UnitsPerCase = c.Int(nullable: false),
|
||||
ContainerType = c.String(nullable: false),
|
||||
WeightPerCase = c.Double(nullable: false),
|
||||
PricePerCase = c.Decimal(nullable: false, precision: 18, scale: 2),
|
||||
})
|
||||
.PrimaryKey(t => t.Id);
|
||||
|
||||
CreateTable(
|
||||
"dbo.Transactions",
|
||||
c => new
|
||||
{
|
||||
Id = c.Int(nullable: false, identity: true),
|
||||
TransactionType = c.Int(nullable: false),
|
||||
AddedQuantity = c.Int(nullable: false),
|
||||
RemovedQuantity = c.Int(nullable: false),
|
||||
CurrentQuantity = c.Int(nullable: false),
|
||||
TransactionDate = c.DateTime(nullable: false),
|
||||
Memo = c.String(),
|
||||
Destination = c.String(),
|
||||
Timestamp = c.DateTime(nullable: false),
|
||||
Inventory_Id = c.Int(),
|
||||
})
|
||||
.PrimaryKey(t => t.Id)
|
||||
.ForeignKey("dbo.Inventories", t => t.Inventory_Id)
|
||||
.Index(t => t.Inventory_Id);
|
||||
|
||||
CreateTable(
|
||||
"dbo.AspNetRoles",
|
||||
c => new
|
||||
{
|
||||
Id = c.String(nullable: false, maxLength: 128),
|
||||
Name = c.String(nullable: false, maxLength: 256),
|
||||
})
|
||||
.PrimaryKey(t => t.Id)
|
||||
.Index(t => t.Name, unique: true, name: "RoleNameIndex");
|
||||
|
||||
CreateTable(
|
||||
"dbo.AspNetUserRoles",
|
||||
c => new
|
||||
{
|
||||
UserId = c.String(nullable: false, maxLength: 128),
|
||||
RoleId = c.String(nullable: false, maxLength: 128),
|
||||
})
|
||||
.PrimaryKey(t => new { t.UserId, t.RoleId })
|
||||
.ForeignKey("dbo.AspNetRoles", t => t.RoleId, cascadeDelete: true)
|
||||
.ForeignKey("dbo.AspNetUsers", t => t.UserId, cascadeDelete: true)
|
||||
.Index(t => t.UserId)
|
||||
.Index(t => t.RoleId);
|
||||
|
||||
CreateTable(
|
||||
"dbo.AspNetUsers",
|
||||
c => new
|
||||
{
|
||||
Id = c.String(nullable: false, maxLength: 128),
|
||||
Email = c.String(maxLength: 256),
|
||||
EmailConfirmed = c.Boolean(nullable: false),
|
||||
PasswordHash = c.String(),
|
||||
SecurityStamp = c.String(),
|
||||
PhoneNumber = c.String(),
|
||||
PhoneNumberConfirmed = c.Boolean(nullable: false),
|
||||
TwoFactorEnabled = c.Boolean(nullable: false),
|
||||
LockoutEndDateUtc = c.DateTime(),
|
||||
LockoutEnabled = c.Boolean(nullable: false),
|
||||
AccessFailedCount = c.Int(nullable: false),
|
||||
UserName = c.String(nullable: false, maxLength: 256),
|
||||
})
|
||||
.PrimaryKey(t => t.Id)
|
||||
.Index(t => t.UserName, unique: true, name: "UserNameIndex");
|
||||
|
||||
CreateTable(
|
||||
"dbo.AspNetUserClaims",
|
||||
c => new
|
||||
{
|
||||
Id = c.Int(nullable: false, identity: true),
|
||||
UserId = c.String(nullable: false, maxLength: 128),
|
||||
ClaimType = c.String(),
|
||||
ClaimValue = c.String(),
|
||||
})
|
||||
.PrimaryKey(t => t.Id)
|
||||
.ForeignKey("dbo.AspNetUsers", t => t.UserId, cascadeDelete: true)
|
||||
.Index(t => t.UserId);
|
||||
|
||||
CreateTable(
|
||||
"dbo.AspNetUserLogins",
|
||||
c => new
|
||||
{
|
||||
LoginProvider = c.String(nullable: false, maxLength: 128),
|
||||
ProviderKey = c.String(nullable: false, maxLength: 128),
|
||||
UserId = c.String(nullable: false, maxLength: 128),
|
||||
})
|
||||
.PrimaryKey(t => new { t.LoginProvider, t.ProviderKey, t.UserId })
|
||||
.ForeignKey("dbo.AspNetUsers", t => t.UserId, cascadeDelete: true)
|
||||
.Index(t => t.UserId);
|
||||
|
||||
}
|
||||
|
||||
public override void Down()
|
||||
{
|
||||
DropForeignKey("dbo.AspNetUserRoles", "UserId", "dbo.AspNetUsers");
|
||||
DropForeignKey("dbo.AspNetUserLogins", "UserId", "dbo.AspNetUsers");
|
||||
DropForeignKey("dbo.AspNetUserClaims", "UserId", "dbo.AspNetUsers");
|
||||
DropForeignKey("dbo.AspNetUserRoles", "RoleId", "dbo.AspNetRoles");
|
||||
DropForeignKey("dbo.Transactions", "Inventory_Id", "dbo.Inventories");
|
||||
DropForeignKey("dbo.Inventories", "InventoryType_Id", "dbo.InventoryTypes");
|
||||
DropIndex("dbo.AspNetUserLogins", new[] { "UserId" });
|
||||
DropIndex("dbo.AspNetUserClaims", new[] { "UserId" });
|
||||
DropIndex("dbo.AspNetUsers", "UserNameIndex");
|
||||
DropIndex("dbo.AspNetUserRoles", new[] { "RoleId" });
|
||||
DropIndex("dbo.AspNetUserRoles", new[] { "UserId" });
|
||||
DropIndex("dbo.AspNetRoles", "RoleNameIndex");
|
||||
DropIndex("dbo.Transactions", new[] { "Inventory_Id" });
|
||||
DropIndex("dbo.Inventories", new[] { "InventoryType_Id" });
|
||||
DropTable("dbo.AspNetUserLogins");
|
||||
DropTable("dbo.AspNetUserClaims");
|
||||
DropTable("dbo.AspNetUsers");
|
||||
DropTable("dbo.AspNetUserRoles");
|
||||
DropTable("dbo.AspNetRoles");
|
||||
DropTable("dbo.Transactions");
|
||||
DropTable("dbo.InventoryTypes");
|
||||
DropTable("dbo.Inventories");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,126 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="Target" xml:space="preserve">
|
||||
<value>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</value>
|
||||
</data>
|
||||
<data name="DefaultSchema" xml:space="preserve">
|
||||
<value>dbo</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -9,12 +9,12 @@ namespace InventoryTraker.Web.Migrations
|
||||
{
|
||||
AutomaticMigrationsEnabled = true;
|
||||
// TODO false
|
||||
AutomaticMigrationDataLossAllowed = true;
|
||||
AutomaticMigrationDataLossAllowed = false;
|
||||
}
|
||||
|
||||
protected override void Seed(AppDbContext context)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,295 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using InventoryTraker.Web.Core;
|
||||
using InventoryTraker.Web.Data;
|
||||
using InventoryTraker.Web.Identity;
|
||||
using InventoryTraker.Web.Utilities;
|
||||
using Microsoft.AspNet.Identity;
|
||||
using Microsoft.AspNet.Identity.EntityFramework;
|
||||
|
||||
namespace InventoryTraker.Web.Migrations
|
||||
{
|
||||
public static class SeedData
|
||||
{
|
||||
public static void Init()
|
||||
{
|
||||
using (var context = new AppDbContext())
|
||||
Init(context);
|
||||
}
|
||||
|
||||
public static void Init(AppDbContext context)
|
||||
{
|
||||
if (!context.Users.Any())
|
||||
{
|
||||
var manager = new ApplicationUserManager(new UserStore<User>(context));
|
||||
manager.Create(new User
|
||||
{
|
||||
Email = "james.kolpack@gmail.com",
|
||||
UserName = "James Kolpack",
|
||||
}, "hgBdFiJTK");
|
||||
|
||||
manager.Create(new User
|
||||
{
|
||||
Email = "bbanegas@ethra.org",
|
||||
UserName = "Brandi Banegas",
|
||||
}, "3v9qxe");
|
||||
|
||||
manager.Create(new User
|
||||
{
|
||||
Email = "ccecil@ethra.org",
|
||||
UserName = "Cyndie Cecil",
|
||||
}, "95kdsxa");
|
||||
|
||||
manager.Create(new User
|
||||
{
|
||||
Email = "knorton@ethra.org",
|
||||
UserName = "Kay Norton",
|
||||
}, "rt9pmz1");
|
||||
}
|
||||
|
||||
if (!context.Inventories.Any())
|
||||
{
|
||||
AddInventoryTypes(context);
|
||||
|
||||
context.SaveChanges();
|
||||
|
||||
AddInventory(context);
|
||||
|
||||
context.SaveChanges();
|
||||
}
|
||||
}
|
||||
|
||||
private static void AddInventoryTypes(AppDbContext context)
|
||||
{
|
||||
var folder = HttpContext.Current.Server.MapPath("~/App_Data");
|
||||
var inventoryTypeFile = Path.Combine(folder, "InventoryTypeSeedData.xlsx");
|
||||
var parser = new InventoryTypeParser(new FileInfo(inventoryTypeFile));
|
||||
foreach (var inventoryType in parser.Parse())
|
||||
{
|
||||
context.InventoryTypes.Add(inventoryType);
|
||||
}
|
||||
}
|
||||
|
||||
private static void AddInventory(AppDbContext context)
|
||||
{
|
||||
var r = new Random(1);
|
||||
var inventoryTypes = context.InventoryTypes.ToList();
|
||||
var counties = new List<string> {"Blount County", "Morgan County", "Knox County", "Anderson County", "Claiborne County", "Campbell County"};
|
||||
var colors = new List<string> {"Red", "Purple", "Blue", "Yellow", "White"};
|
||||
|
||||
for (var dd = DateTime.Today.AddYears(-4); dd < DateTime.Today.AddMonths(-2); dd = dd.AddMonths(3))
|
||||
{
|
||||
ExprireLossInventory(context, dd, r);
|
||||
// add some inventory
|
||||
for (int i = 0; i < r.Next(5,10); i++)
|
||||
{
|
||||
var inventoryType = inventoryTypes.ElementAt(r.Next(0, context.InventoryTypes.Count()));
|
||||
var addedDate = dd.AddDays(r.Next(-10, 10));
|
||||
var expiration = addedDate.AddMonths(r.Next(2, 48));
|
||||
var memo =
|
||||
r.Next(0, 3) > 0
|
||||
? colors.ElementAt(r.Next(0, colors.Count)) + $" {inventoryType.ContainerType}"
|
||||
: string.Empty;
|
||||
var quantity = r.Next(5, 112);
|
||||
|
||||
var addedTransaction = new Transaction
|
||||
{
|
||||
TransactionType = TransactionType.Added,
|
||||
AddedQuantity = quantity,
|
||||
Memo = "Arrival",
|
||||
CurrentQuantity = quantity,
|
||||
TransactionDate = addedDate,
|
||||
Timestamp = addedDate
|
||||
};
|
||||
var inventory = new Inventory
|
||||
{
|
||||
InventoryType = inventoryType,
|
||||
ExpirationDate = expiration,
|
||||
AddedDate = addedDate,
|
||||
Memo = memo,
|
||||
Quantity = quantity,
|
||||
Transactions = new List<Transaction> {addedTransaction}
|
||||
};
|
||||
context.Inventories.Add(inventory);
|
||||
}
|
||||
dd = dd.AddDays(14);
|
||||
// expire/loss some inventory
|
||||
ExprireLossInventory(context, dd, r);
|
||||
|
||||
dd = dd.AddDays(14);
|
||||
// distribute some inventory
|
||||
foreach (var destination in counties)
|
||||
{
|
||||
var availableInventories =
|
||||
context.Inventories.Local.Where(i => i.Quantity > 0).ToList();
|
||||
|
||||
for (
|
||||
var i = r.Next(0, availableInventories.Count);
|
||||
i < availableInventories.Count;
|
||||
i += r.Next(1, availableInventories.Count / 2))
|
||||
{
|
||||
var inventory = availableInventories.ElementAt(i);
|
||||
if (inventory.ExpirationDate <= dd)
|
||||
continue;
|
||||
|
||||
var quantityRemoved = r.Next(1, inventory.Quantity + 1);
|
||||
|
||||
var transMemo = $"Distributed to {destination}";
|
||||
var transType = TransactionType.Distributed;
|
||||
|
||||
var distributeTransaction = new Transaction
|
||||
{
|
||||
TransactionType = transType,
|
||||
RemovedQuantity = quantityRemoved,
|
||||
CurrentQuantity = inventory.Quantity - quantityRemoved,
|
||||
Inventory = inventory,
|
||||
Memo = transMemo,
|
||||
TransactionDate = dd,
|
||||
Timestamp = dd,
|
||||
Destination = destination
|
||||
};
|
||||
inventory.Quantity = distributeTransaction.CurrentQuantity;
|
||||
|
||||
inventory.Transactions.Add(distributeTransaction);
|
||||
}
|
||||
}
|
||||
ExprireLossInventory(context, dd, r);
|
||||
}
|
||||
|
||||
//for (int i = 0; i < 200; i++)
|
||||
//{
|
||||
// var inventoryType = inventoryTypes.ElementAt(r.Next(0, context.InventoryTypes.Count()));
|
||||
// var addedDate = DateTime.Today.AddMonths(-r.Next(1, 24));
|
||||
// var expiration = addedDate.AddMonths(r.Next(2, 48));
|
||||
// var memo =
|
||||
// r.Next(0,3) > 0
|
||||
// ? colors.ElementAt(r.Next(0, colors.Count)) + $" {inventoryType.ContainerType}"
|
||||
// : string.Empty;
|
||||
// var quantity = r.Next(5, 112);
|
||||
|
||||
// var previousTransaction = new Transaction
|
||||
// {
|
||||
// TransactionType = TransactionType.Added,
|
||||
// AddedQuantity = quantity,
|
||||
// Memo = "Arrival",
|
||||
// CurrentQuantity = quantity,
|
||||
// TransactionDate = addedDate,
|
||||
// Timestamp = addedDate
|
||||
// };
|
||||
// var inventory = new Inventory
|
||||
// {
|
||||
// InventoryType = inventoryType,
|
||||
// ExpirationDate = expiration,
|
||||
// AddedDate = addedDate,
|
||||
// Memo = memo,
|
||||
// Quantity = quantity,
|
||||
// Transactions = new List<Transaction> { previousTransaction}
|
||||
// };
|
||||
// context.Inventories.Add(inventory);
|
||||
|
||||
// for (int j = 0; j < 5 && previousTransaction.CurrentQuantity > 0; j++)
|
||||
// {
|
||||
// var transactionDate = previousTransaction.TransactionDate.AddDays(r.Next(1, 100));
|
||||
// if (transactionDate >= DateTime.Today)
|
||||
// break;
|
||||
|
||||
// Transaction transaction;
|
||||
// if (transactionDate >= expiration)
|
||||
// {
|
||||
// if (r.Next(1, 3) == 1)
|
||||
// break;
|
||||
|
||||
//transaction = new Transaction
|
||||
//{
|
||||
// TransactionType = TransactionType.Expired,
|
||||
// RemovedQuantity = previousTransaction.CurrentQuantity,
|
||||
// CurrentQuantity = 0,
|
||||
// Inventory = inventory,
|
||||
// Memo = $"Expired on {expiration.ToShortDateString()}",
|
||||
// TransactionDate = transactionDate,
|
||||
// Timestamp = transactionDate
|
||||
//};
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// var quantityRemoved = r.Next(1, 100);
|
||||
// if (quantityRemoved > previousTransaction.CurrentQuantity)
|
||||
// quantityRemoved = previousTransaction.CurrentQuantity;
|
||||
|
||||
// var destination = counties.ElementAt(r.Next(0, counties.Count));
|
||||
// var transMemo = $"Distributed to {destination}";
|
||||
// var transType = TransactionType.Distributed;
|
||||
|
||||
// if (r.Next(1, 15) == 1)
|
||||
// {
|
||||
// transMemo = "Loss";
|
||||
// transType = TransactionType.Loss;
|
||||
// }
|
||||
|
||||
// transaction = new Transaction
|
||||
// {
|
||||
// TransactionType = transType,
|
||||
// RemovedQuantity = quantityRemoved,
|
||||
// CurrentQuantity = previousTransaction.CurrentQuantity - quantityRemoved,
|
||||
// Inventory = inventory,
|
||||
// Memo = transMemo,
|
||||
// TransactionDate = transactionDate,
|
||||
// Timestamp = transactionDate,
|
||||
// Destination = destination
|
||||
// };
|
||||
// }
|
||||
|
||||
// inventory.Quantity = transaction.CurrentQuantity;
|
||||
|
||||
// inventory.Transactions.Add(transaction);
|
||||
|
||||
// previousTransaction = transaction;
|
||||
// }
|
||||
//}
|
||||
}
|
||||
|
||||
private static void ExprireLossInventory(AppDbContext context, DateTime dd, Random r)
|
||||
{
|
||||
var availableInventories =
|
||||
context.Inventories.Local.Where(i => i.Quantity > 0).ToList();
|
||||
|
||||
foreach (var inventory in availableInventories)
|
||||
{
|
||||
if (inventory.ExpirationDate <= dd && r.Next(0, 4) > 0)
|
||||
{
|
||||
var expiredTransaction = new Transaction
|
||||
{
|
||||
TransactionType = TransactionType.Expired,
|
||||
RemovedQuantity = inventory.Quantity,
|
||||
CurrentQuantity = 0,
|
||||
Inventory = inventory,
|
||||
Memo = $"Expired on {inventory.ExpirationDate.ToShortDateString()}",
|
||||
TransactionDate = dd,
|
||||
Timestamp = dd
|
||||
};
|
||||
inventory.Quantity = expiredTransaction.CurrentQuantity;
|
||||
inventory.Transactions.Add(expiredTransaction);
|
||||
}
|
||||
else if (r.Next(0, 40) == 0)
|
||||
{
|
||||
var lossQty = r.Next(1, inventory.Quantity + 1);
|
||||
var lossTransaction = new Transaction
|
||||
{
|
||||
TransactionType = TransactionType.Loss,
|
||||
RemovedQuantity = lossQty,
|
||||
CurrentQuantity = inventory.Quantity - lossQty,
|
||||
Inventory = inventory,
|
||||
Memo = $"Missing",
|
||||
TransactionDate = dd,
|
||||
Timestamp = dd
|
||||
};
|
||||
inventory.Quantity = lossTransaction.CurrentQuantity;
|
||||
inventory.Transactions.Add(lossTransaction);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user