| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 | 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<PurchaseOrderMaterial> 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<FmsMaterialPurchaseOrderMaterial>( 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; }    };}
 |