شركة التطبيقات المتكاملة لتصميم النظم البرمجية الخاصة ش.ش.و.

Integrated Applications Programming Company

Skip Navigation LinksHome » Code Library » Inventory

Public general use code classes and xml files that we've compiled and used over the years:

Inventory Entity Framework class for Optical Fiber Network (OFN) entity model.

   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.Linq;
   4:  using System.ComponentModel.DataAnnotations.Schema;
   5:  using System.Threading;
   6:  using System.Threading.Tasks;
   7:   
   8:  namespace Ia.Ngn.Cl.Model
   9:  {
  10:      ////////////////////////////////////////////////////////////////////////////
  11:   
  12:      /// <summary publish="true">
  13:      /// Inventory Entity Framework class for Optical Fiber Network (OFN) entity model.
  14:      /// </summary>
  15:      /// 
  16:      /// <remarks> 
  17:      /// Copyright © 2006-2021 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
  18:      ///
  19:      /// This library is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by
  20:      /// the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
  21:      ///
  22:      /// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
  23:      /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
  24:      /// 
  25:      /// You should have received a copy of the GNU General Public License along with this library. If not, see http://www.gnu.org/licenses.
  26:      /// 
  27:      /// Copyright notice: This notice may not be removed or altered from any source distribution.
  28:      /// </remarks> 
  29:      public class Inventory
  30:      {
  31:          /// <summary/>
  32:          public Inventory() { }
  33:   
  34:          /// <summary/>
  35:          public int Id { get; set; }
  36:   
  37:          /// <summary/>
  38:          public string Name { get; set; }
  39:   
  40:          /// <summary/>
  41:          public int Company { get; set; }
  42:   
  43:          /// <summary/>
  44:          public string Description { get; set; }
  45:   
  46:          /// <summary/>
  47:          public string BarCode { get; set; }
  48:   
  49:          /// <summary/>
  50:          public int Quantity { get; set; }
  51:   
  52:          /// <summary/>
  53:          public float Price { get; set; }
  54:   
  55:          /// <summary/>
  56:          public DateTime Created { get; set; }
  57:   
  58:          /// <summary/>
  59:          public DateTime Updated { get; set; }
  60:   
  61:          /// <summary/>
  62:          public System.Guid UserId { get; set; }
  63:   
  64:          ////////////////////////////////////////////////////////////////////////////
  65:   
  66:          /// <summary>
  67:          ///
  68:          /// </summary>
  69:          public static bool Create(Inventory newInventory, out string result)
  70:          {
  71:              bool b;
  72:   
  73:              b = false;
  74:              result = string.Empty;
  75:   
  76:              using (var db = new Ia.Ngn.Cl.Model.Ngn())
  77:              {
  78:                  newInventory.Created = newInventory.Updated = DateTime.UtcNow.AddHours(3);
  79:   
  80:                  db.Inventories.Add(newInventory);
  81:                  db.SaveChanges();
  82:   
  83:                  b = true;
  84:              }
  85:   
  86:              return b;
  87:          }
  88:   
  89:          ////////////////////////////////////////////////////////////////////////////
  90:   
  91:          /// <summary>
  92:          ///
  93:          /// </summary>
  94:          public static Inventory Read(int id)
  95:          {
  96:              Inventory inventory;
  97:   
  98:              using (var db = new Ia.Ngn.Cl.Model.Ngn())
  99:              {
 100:                  inventory = (from i in db.Inventories where i.Id == id select i).SingleOrDefault();
 101:              }
 102:   
 103:              return inventory;
 104:          }
 105:   
 106:          ////////////////////////////////////////////////////////////////////////////
 107:   
 108:          /// <summary>
 109:          ///
 110:          /// </summary>
 111:          public static List<Inventory> ReadList()
 112:          {
 113:              List<Inventory> inventoryList;
 114:   
 115:              using (var db = new Ia.Ngn.Cl.Model.Ngn())
 116:              {
 117:                  inventoryList = (from i in db.Inventories select i).ToList();
 118:              }
 119:   
 120:              return inventoryList;
 121:          }
 122:   
 123:          ////////////////////////////////////////////////////////////////////////////
 124:   
 125:          /// <summary>
 126:          ///
 127:          /// </summary>
 128:          public static bool Update(Inventory updatedInventory, out string result)
 129:          {
 130:              bool b;
 131:   
 132:              b = false;
 133:              result = string.Empty;
 134:   
 135:              using (var db = new Ia.Ngn.Cl.Model.Ngn())
 136:              {
 137:                  updatedInventory = (from i in db.Inventories where i.Id == updatedInventory.Id select i).SingleOrDefault();
 138:   
 139:                  updatedInventory.Updated = DateTime.UtcNow.AddHours(3);
 140:   
 141:                  db.Inventories.Attach(updatedInventory);
 142:   
 143:                  var v = db.Entry(updatedInventory);
 144:                  v.State = Microsoft.EntityFrameworkCore.EntityState.Modified;
 145:                  db.SaveChanges();
 146:   
 147:                  b = true;
 148:              }
 149:   
 150:              return b;
 151:          }
 152:   
 153:          ////////////////////////////////////////////////////////////////////////////
 154:   
 155:          /// <summary>
 156:          ///
 157:          /// </summary>
 158:          public bool Update(/*Ont updatedOnt*/ object updatedObject)
 159:          {
 160:              // below: this will not update Id, Created
 161:              bool updated;
 162:   
 163:              updated = false;
 164:   
 165:              //if (this.StateId != updatedOnt.StateId) { this.StateId = updatedOnt.StateId; updated = true; }
 166:   
 167:              //if (updated) this.Updated = DateTime.UtcNow.AddHours(3);
 168:   
 169:              return updated;
 170:          }
 171:   
 172:          ////////////////////////////////////////////////////////////////////////////
 173:   
 174:          /// <summary>
 175:          ///
 176:          /// </summary>
 177:          public static bool QuantityChange(int inventoryId, int increment, out string result)
 178:          {
 179:              bool b;
 180:              Inventory updatedInventory;
 181:   
 182:              b = false;
 183:              result = string.Empty;
 184:   
 185:              using (var db = new Ia.Ngn.Cl.Model.Ngn())
 186:              {
 187:                  updatedInventory = (from i in db.Inventories where i.Id == inventoryId select i).SingleOrDefault();
 188:   
 189:                  updatedInventory.Quantity += increment;
 190:   
 191:                  if (updatedInventory.Quantity >= 0)
 192:                  {
 193:                      // below: don't go below 0
 194:                      updatedInventory.Updated = DateTime.UtcNow.AddHours(3);
 195:   
 196:                      db.Inventories.Attach(updatedInventory);
 197:   
 198:                      var v = db.Entry(updatedInventory);
 199:                      v.State = Microsoft.EntityFrameworkCore.EntityState.Modified;
 200:                      db.SaveChanges();
 201:   
 202:                      b = true;
 203:                  }
 204:                  else
 205:                  {
 206:                      b = false;
 207:                  }
 208:              }
 209:   
 210:              return b;
 211:          }
 212:   
 213:          ////////////////////////////////////////////////////////////////////////////
 214:   
 215:          /// <summary>
 216:          ///
 217:          /// </summary>
 218:          public static bool Delete(int id, out string result)
 219:          {
 220:              bool b;
 221:   
 222:              b = false;
 223:              result = string.Empty;
 224:   
 225:              using (var db = new Ia.Ngn.Cl.Model.Ngn())
 226:              {
 227:                  var v = (from i in db.Inventories where i.Id == id select i).FirstOrDefault();
 228:   
 229:                  if (v.Quantity == 0)
 230:                  {
 231:                      db.Inventories.Remove(v);
 232:                      db.SaveChanges();
 233:   
 234:                      b = true;
 235:                  }
 236:                  else
 237:                  {
 238:                      result = "Item can't be deleted because quantity is not zero. ";
 239:   
 240:                      b = false;
 241:                  }
 242:              }
 243:   
 244:              return b;
 245:          }
 246:   
 247:          /*
 248:  <?xml version="1.0" encoding="utf-8"?>
 249:  
 250:  <inventory>
 251:  
 252:    <!--
 253:    Inventory System Requirements
 254:  
 255:    demand and
 256:    replenishment lead time data
 257:  
 258:    forecasts
 259:  
 260:    reviewing the stock
 261:    position;
 262:    - preparing the purchase
 263:    request;
 264:    - selecting the supplier;
 265:    receiving, inspecting, and
 266:    placing the material in
 267:    storage; and
 268:    - paying the vendor.
 269:  
 270:    Does the system estimate and
 271:    routinely update the per unit
 272:    inventory holding cost, which
 273:    is an estimate of the cost to
 274:    hold each additional unit of
 275:    inventory? Its primary
 276:    elements are storage space,
 277:    obsolescence, interest on
 278:    inventory investment, and
 279:    inventory shrinkage (due to
 280:    deterioration, theft, damage,
 281:    etc.).
 282:    4.
 283:  
 284:  
 285:    Does the system recompute
 286:    the Economic Order Quantity
 287:    (EOQ) on a regular, frequent
 288:    schedule, using the demand
 289:    forecast, ordering cost,
 290:    inventory holding cost, and
 291:    unit cost of the material? In
 292:    lieu of the EOQ, any other
 293:    optimum order quantity
 294:    calculation may be used,
 295:    provided (a) it is based on
 296:    sound business principles and
 297:    (b) it minimizes total cost,
 298:    including the sum of ordering
 299:    and inventory holding costs
 300:  
 301:  
 302:    Does the system recompute
 303:    the safety stock, if any, on a
 304:    regular and frequent schedule
 305:  
 306:  
 307:    Does the system recompute
 308:    the reorder point level on a
 309:    regular and frequent schedule
 310:  
 311:  
 312:    Does the system determine if
 313:    replenishment is needed on a
 314:    regular and frequent schedule,
 315:    basing the determination on
 316:    net stock and reorder point? If
 317:    needed, immediately initiate a
 318:    replenishment action using the
 319:    EOQ or other order quantity,
 320:  
 321:    Does the system provide
 322:    information on current
 323:    inventories and historical
 324:    usage to be used in capacity
 325:    planning?
 326:  
 327:    Does the system provide to
 328:    agency inventory managers
 329:    and designated internal review
 330:    officials, on a periodic or
 331:    requested basis, at least the
 332:    following types of
 333:    management information:
 334:    - demand?
 335:    - procurement lead time?
 336:    - procurement cycle?
 337:    - requirements?
 338:    - assets?
 339:    - available funds?
 340:    - budget versus actual?
 341:    - rates of fund utilization?
 342:  
 343:    Does the system record
 344:    information on material
 345:    returned by customers?
 346:  
 347:    Does the system provide
 348:    support for physical
 349:    verification of inventory
 350:    balances by location and type?
 351:  
 352:    Does the system record
 353:    changes in physical condition
 354:    (e.g., excellent, good, fair, or
 355:    poor), quantities, etc., based
 356:    on the results of physical
 357:    inventory verifications?
 358:  
 359:    =====================================
 360:  
 361:    Inventory System supports updating inventory information for all items, monitoring inventory depletion, and importing and exporting
 362:    inventory information to and from external systems of record
 363:  
 364:    =====================================
 365:  
 366:    Flexible configuration that allows for backordering and display of out of stock stock-keeping units (SKUs).
 367:  
 368:    Order checking and update through pipeline components.
 369:  
 370:    Full text search and query integration with the Catalog System.
 371:  
 372:    Transactional updates.
 373:  
 374:    Import and export operations similar to the Catalog System.
 375:  
 376:    Runtime APIs with methods for searching, browsing, viewing details, inventory search options that include product filtering, assigning inventory conditions, and roll-up values.
 377:    
 378:    
 379:    
 380:    Inventory Disposition consists of the following processes: (a) loaning
 381:  process, (b) issuing process, and (c) disposal process.
 382:  
 383:  
 384:  inventory shrinkage (due to
 385:  deterioration, theft, damage,
 386:  etc.).
 387:  4.
 388:  
 389:  Economic Order Quantity
 390:  (EOQ) on
 391:  
 392:  
 393:    <inventory>
 394:      <transaction>
 395:        <type id="1" name="Purchased" name_ar=""/>
 396:        <type id="2" name="Sold" name_ar=""/>
 397:        <type id="3" name="On Hold" name_ar=""/>
 398:        <type id="4" name="Waste" name_ar=""/>
 399:        <type id="0" name="Unspecified" name_ar="غير معرف"/>
 400:      </transaction>
 401:    </inventory>
 402:  
 403:    -->
 404:  
 405:    <type id="1" name="ONT" description=""/>
 406:    <type id="2" name="Computer" description=""/>
 407:    <type id="3" name="Board" description=""/>
 408:    <type id="4" name="Card" description=""/>
 409:    <type id="5" name="Switch" description=""/>
 410:    <type id="6" name="Cable" description=""/>
 411:    <type id="7" name="RJ" description=""/>
 412:    <type id="8" name="Screen" description=""/>
 413:    <type id="9" name="Keyboard" description=""/>
 414:    <type id="10" name="Mouse" description=""/>
 415:    <type id="11" name="Phone" description=""/>
 416:  
 417:    <item id="1" type_id="1" name="SFU" code="" discontinued="" description=""/>
 418:  
 419:  </inventory>
 420:           */
 421:   
 422:          ////////////////////////////////////////////////////////////////////////////
 423:          ////////////////////////////////////////////////////////////////////////////
 424:      }
 425:   
 426:      ////////////////////////////////////////////////////////////////////////////
 427:      ////////////////////////////////////////////////////////////////////////////
 428:  }