using System; using System.Collections.Generic; using System.Data; using System.Data.Entity; using System.Data.Entity.Infrastructure; using System.Diagnostics; using System.Linq; using System.Net; using System.Net.Http; using System.Web; using System.Web.Http; using System.Web.Http.Description; using DevExpress.XtraCharts.Native; using DevExpress.XtraPrinting.Native; using iBemsDataService; using iBemsDataService.Model; using iBemsDataService.Util; using System.Transactions; namespace iBemsDataService.Controllers { public class FmsMaterialPurchaseOrderMaterialController : ApiController { private iBemsEntities db = new iBemsEntities(); [ResponseType( typeof( void ) )] public IHttpActionResult PostFmsMaterialPurchaseOrderMaterial( List materials ) { if ( !ModelState.IsValid ) { return BadRequest( ModelState ); } Uri uri = Request.RequestUri; var uriQuery = HttpUtility.ParseQueryString( uri.Query ); int siteId, businessFieldId, purchaseRequestId, purchaseOrderId; if( int.TryParse( uriQuery.Get( "SiteId" ) , out siteId ) == false || int.TryParse( uriQuery.Get( "BusinessFieldId" ) , out businessFieldId ) == false || int.TryParse( uriQuery.Get( "PurchaseRequestId" ) , out purchaseRequestId ) == false || int.TryParse( uriQuery.Get( "PurchaseOrderId" ) , out purchaseOrderId ) == false ) { return BadRequest( "Not Found Parameters." ); } using (var transaction = new TransactionScope()) { var qm = new QueryManager( db ); try { var purchaseRequest = db.FmsMaterialPurchaseRequest.SingleOrDefault( d => d.SiteId == siteId && d.BusinessFieldId == businessFieldId && d.PurchaseRequestId == purchaseRequestId ); if ( purchaseRequest == null ) { return BadRequest( "Not Found a PurchaseOrder." ); } purchaseRequest.ProgressId = (short)PurchaseProgress.PURCHASE_ORDER; var query = from d in db.FmsMaterialPurchaseOrderMaterial where d.SiteId == siteId && d.BusinessFieldId == businessFieldId && d.PurchaseOrderId == purchaseOrderId select d; qm.DeleteAndInsert( db.FmsMaterialPurchaseOrderMaterial , materials , query ); foreach ( var m in materials ) { var dbMaterial = db.FmsMaterial.SingleOrDefault( x => x.SiteId == m.SiteId && //x.BusinessFieldId == m.BusinessFieldId && x.MaterialId == m.MaterialId ); if( dbMaterial == null ) continue; if ( dbMaterial.FinalPrice != m.UnitCost ) { dbMaterial.FinalPrice = m.UnitCost; } } var RM = from d in db.FmsMaterialPurchaseRequestMaterial where d.SiteId == siteId && d.BusinessFieldId == businessFieldId && d.PurchaseRequestId == purchaseRequestId select d; var OM = from d in db.FmsMaterialPurchaseOrderMaterial where d.SiteId == siteId && d.BusinessFieldId == businessFieldId && d.PurchaseOrderId == purchaseOrderId select d; bool bAllSame; if (RM.Count() == OM.Count()) { bAllSame = false; foreach (var r in RM) { var fM = OM.SingleOrDefault(x => x.MaterialId == r.MaterialId && //x.BusinessFieldId == m.BusinessFieldId && x.MaterialCount == r.MaterialCount); if (fM == null) { bAllSame = false; break; } else { bAllSame = true; } } } else { bAllSame = false; } var updateRquest = ( from us in db.FmsMaterialPurchaseRequest where us.SiteId == siteId && us.BusinessFieldId == businessFieldId && us.PurchaseRequestId == purchaseRequestId select us).FirstOrDefault(); if (updateRquest != null) { updateRquest.bSameOrder = bAllSame; } db.SaveChanges(); } catch ( DbUpdateException e ) { { throw e; } } transaction.Complete(); } return StatusCode( HttpStatusCode.NoContent ); } protected override void Dispose(bool disposing) { if (disposing) { db.Dispose(); } base.Dispose(disposing); } } public class PurchaseOrderMaterial { public int SiteId { get; set; } public int BusinessFieldId { get; set; } public int PurchaseOrderId { get; set; } public int MaterialId { get; set; } public int MaterialCount { get; set; } public int UnitCost { get; set; } }; }