using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using CY.IDAL;
using CY.Model;
using CY.Infrastructure.Configuration;
using CY.Infrastructure.Common;
using CY.BLL;
using System.Transactions;
using CY.Infrastructure.Query;
namespace CY.BLL.OA
{
public class OA_OutOfStorageBLL
{
OA_InventoryBLL _OA_InventoryBLL = null;
IOA_OutOfStorageDAL outOfStorageDAL = null;
OA_ProcurementBLL bll_OA_ProcurementBLL = null;
OA_ProcurementBLL _OA_ProcurementBLL = null;
public OA_OutOfStorageBLL()
{
_OA_ProcurementBLL = new OA_ProcurementBLL();
_OA_InventoryBLL = new OA_InventoryBLL();
outOfStorageDAL = AbstractFactory.Factory.GetDALByInterfaceName(AbstractFactory.DALInterface.IOA_OutOfStorageDAL) as IOA_OutOfStorageDAL;
bll_OA_ProcurementBLL = new OA_ProcurementBLL();
}
public bool InertModel(OA_OutOfStorage outOfStorage)
{
return outOfStorageDAL.InserModel(outOfStorage);
}
public bool UpdateModel(OA_OutOfStorage model)
{
return outOfStorageDAL.UpdateModel(model);
}
///
/// 增加一条入库信息
///
///
///
public bool InsertModel(OA_Inventory inventory, OA_OutOfStorage outOfStorage)
{
bool isSuccess = true;
OA_Inventory m_OA_Inventory = _OA_InventoryBLL.IfHasModel(inventory);
if (m_OA_Inventory != null)//如果所选货位存在此产品
{
using (TransactionScope scope = new TransactionScope())
{
isSuccess = outOfStorageDAL.InserModel(outOfStorage);
if (isSuccess)
{
if (outOfStorage.InfoType == "出库")
{
m_OA_Inventory.InventoryCount -= outOfStorage.Quantity;//出库数据量减
}
else
{
m_OA_Inventory.InventoryCount += outOfStorage.Quantity;//出库数据量减
}
m_OA_Inventory.TotalPrice = (m_OA_Inventory.UnitPrice ?? 0) * (m_OA_Inventory.InventoryCount ?? 0);
isSuccess = _OA_InventoryBLL.UpdateModel(m_OA_Inventory);
}
if (isSuccess)
scope.Complete();
}
return isSuccess;
}
else//如果所选货位不存在此产品
{
using (TransactionScope scope = new TransactionScope())
{
isSuccess = outOfStorageDAL.InserModel(outOfStorage);
if (isSuccess)
{
inventory.TotalPrice = (inventory.UnitPrice ?? 0) * (inventory.InventoryCount ?? 0);
isSuccess = _OA_InventoryBLL.InsertModel(inventory);
}
if (isSuccess)
scope.Complete();
}
return isSuccess;
}
}
public IEnumerable getModelList(Pagination pa, Guid FirmId, string Operator, string InfoType, string SuppliersId, string GoodsNameId, string WarehouseId, DateTime? beginTime, DateTime? endTime, string BrandName, string SpeceicationName, string PaperWeightName, string GoodsTypeId)
{
return outOfStorageDAL.getModelList(pa, FirmId, Operator, InfoType, SuppliersId, GoodsNameId, WarehouseId, beginTime, endTime, BrandName, SpeceicationName, PaperWeightName, GoodsTypeId);
}
public bool InsertModelList(string[] Keys, int? WarehouseId, string WarehouseName )
{
try
{
bool isSuccess = true;
using (TransactionScope scope = new TransactionScope())
{
foreach (var Keyid in Keys)
{
OA_Procurement m_OA_Procurement = new OA_Procurement();
OA_Inventory m_OA_Inventory = new OA_Inventory();
OA_OutOfStorage m_OA_OutOfStorage = new OA_OutOfStorage();
OA_WarehouseInfo m_OA_WarehouseInfo = new OA_WarehouseInfo();
OA_WarehouseInfoBLL bll_OA_WarehouseInfoBLL = new OA_WarehouseInfoBLL();
m_OA_WarehouseInfo = bll_OA_WarehouseInfoBLL.getSingleModel(WarehouseId.ToString());
m_OA_Procurement = _OA_ProcurementBLL.SelectSingleModel(Keyid);
m_OA_Procurement.PurchaseStatusId = 201;
m_OA_Procurement.Remark = m_OA_WarehouseInfo.WarehouseName;
if (!WarehouseName.Equals("上机使用"))
{
//库存表对象
m_OA_Inventory.CargoSpaceId = 0;
m_OA_Inventory.FirmId = m_OA_Procurement.FirmId;
m_OA_Inventory.GoodsId = m_OA_Procurement.GoodsId;
m_OA_Inventory.InventoryCount = m_OA_Procurement.Quantity;
m_OA_Inventory.LastUpdateTime = DateTime.Now;
m_OA_Inventory.Operator = m_OA_Procurement.Operator;
m_OA_Inventory.Remark = "";
m_OA_Inventory.WarehouseId = WarehouseId;
m_OA_Inventory.BrandId = m_OA_Procurement.BrandId;
m_OA_Inventory.SpecificationId = m_OA_Procurement.SpecificationId;
m_OA_Inventory.PaperWeightId = m_OA_Procurement.PaperWeightId;
m_OA_Inventory.UnitPrice = m_OA_Procurement.Price ?? 0;
m_OA_Inventory.TotalPrice = m_OA_Procurement.AllMoney ?? 0;
//出入库信息表对象
m_OA_OutOfStorage.FirmId = m_OA_Procurement.FirmId;
m_OA_OutOfStorage.GoodsId = m_OA_Procurement.GoodsId;
m_OA_OutOfStorage.CargoSpaceId = 0;
m_OA_OutOfStorage.LastUpdateTime = DateTime.Now;
m_OA_OutOfStorage.Operator = m_OA_Procurement.Operator;
m_OA_OutOfStorage.Remark = "";
m_OA_OutOfStorage.WarehouseId = WarehouseId;
m_OA_OutOfStorage.SuppliersId = m_OA_Procurement.SuppliersId;
m_OA_OutOfStorage.AllMoney = m_OA_Procurement.AllMoney;
m_OA_OutOfStorage.InfoType = "入库";
m_OA_OutOfStorage.Price = m_OA_Procurement.Price;
m_OA_OutOfStorage.Quantity = m_OA_Procurement.Quantity;
m_OA_OutOfStorage.BrandId = m_OA_Procurement.BrandId;
m_OA_OutOfStorage.SpecificationId = m_OA_Procurement.SpecificationId;
m_OA_OutOfStorage.PaperWeightId = m_OA_Procurement.PaperWeightId;
m_OA_OutOfStorage.TanPrice = m_OA_Procurement.TanPrice ?? 0;
isSuccess = InsertModel(m_OA_Inventory, m_OA_OutOfStorage);
}
if (isSuccess)
{
isSuccess = bll_OA_ProcurementBLL.UpdateModel(m_OA_Procurement);
}
}
if (isSuccess)
scope.Complete();
}
return isSuccess;
}
catch (Exception ex)
{
throw ex;
}
}
///
/// 获取单个信息
///
///
///
public OA_OutOfStorage GetModelByKeyid(int? Keyid)
{
return outOfStorageDAL.GetModelByKeyid(Keyid);
}
public OA_OutOfStorage GetModelInfo(int? keyid)
{
return outOfStorageDAL.GetModelInfo(keyid);
}
public bool GoodsOutofStorage(Model.OA_Inventory model, Model.OA_OutOfStorage OutOfStorage)
{
OA_Inventory m_OA_Inventory = _OA_InventoryBLL.IfHasModel(model);
if (m_OA_Inventory != null)//如果所选货位存在此产品
{
if (m_OA_Inventory.InventoryCount < OutOfStorage.Quantity)
{
return false;
}
else
{
m_OA_Inventory.InventoryCount = m_OA_Inventory.InventoryCount - OutOfStorage.Quantity;
bool isSuccess = _OA_InventoryBLL.UpdateModel(m_OA_Inventory);
if (isSuccess)
{
OutOfStorage.InfoType = "出库";
isSuccess = UpdateModel(OutOfStorage);
}
return isSuccess;
}
}
else
{
return false;
}
}
public IEnumerable getModelList(Pagination pa, Guid FirmId, string Keyids)
{
return outOfStorageDAL.getModelList(pa, FirmId, Keyids);
}
}
}