0e7d1137287103c3b676d19d354f15cb06a11c78.svn-base 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Data.Entity;
  5. using System.Data.Entity.Infrastructure;
  6. using System.Diagnostics;
  7. using System.Linq;
  8. using System.Net;
  9. using System.Net.Http;
  10. using System.Web;
  11. using System.Web.Http;
  12. using System.Web.Http.Description;
  13. using DevExpress.XtraCharts.Native;
  14. using DevExpress.XtraPrinting.Native;
  15. using iBemsDataService;
  16. using iBemsDataService.Model;
  17. using iBemsDataService.Util;
  18. using System.Transactions;
  19. namespace iBemsDataService.Controllers
  20. {
  21. public class FmsMaterialPurchaseOrderMaterialController : ApiController
  22. {
  23. private iBemsEntities db = new iBemsEntities();
  24. [ResponseType( typeof( void ) )]
  25. public IHttpActionResult PostFmsMaterialPurchaseOrderMaterial( List<PurchaseOrderMaterial> materials )
  26. {
  27. if ( !ModelState.IsValid )
  28. {
  29. return BadRequest( ModelState );
  30. }
  31. Uri uri = Request.RequestUri;
  32. var uriQuery = HttpUtility.ParseQueryString( uri.Query );
  33. int siteId, businessFieldId, purchaseRequestId, purchaseOrderId;
  34. if( int.TryParse( uriQuery.Get( "SiteId" ) , out siteId ) == false ||
  35. int.TryParse( uriQuery.Get( "BusinessFieldId" ) , out businessFieldId ) == false ||
  36. int.TryParse( uriQuery.Get( "PurchaseRequestId" ) , out purchaseRequestId ) == false ||
  37. int.TryParse( uriQuery.Get( "PurchaseOrderId" ) , out purchaseOrderId ) == false )
  38. {
  39. return BadRequest( "Not Found Parameters." );
  40. }
  41. using (var transaction = new TransactionScope())
  42. {
  43. var qm = new QueryManager<FmsMaterialPurchaseOrderMaterial>( db );
  44. try
  45. {
  46. var purchaseRequest = db.FmsMaterialPurchaseRequest.SingleOrDefault( d =>
  47. d.SiteId == siteId &&
  48. d.BusinessFieldId == businessFieldId &&
  49. d.PurchaseRequestId == purchaseRequestId );
  50. if ( purchaseRequest == null )
  51. {
  52. return BadRequest( "Not Found a PurchaseOrder." );
  53. }
  54. purchaseRequest.ProgressId = (short)PurchaseProgress.PURCHASE_ORDER;
  55. var query = from d in db.FmsMaterialPurchaseOrderMaterial
  56. where d.SiteId == siteId &&
  57. d.BusinessFieldId == businessFieldId &&
  58. d.PurchaseOrderId == purchaseOrderId
  59. select d;
  60. qm.DeleteAndInsert( db.FmsMaterialPurchaseOrderMaterial , materials , query );
  61. foreach ( var m in materials )
  62. {
  63. var dbMaterial = db.FmsMaterial.SingleOrDefault( x =>
  64. x.SiteId == m.SiteId &&
  65. //x.BusinessFieldId == m.BusinessFieldId &&
  66. x.MaterialId == m.MaterialId );
  67. if( dbMaterial == null )
  68. continue;
  69. if ( dbMaterial.FinalPrice != m.UnitCost )
  70. {
  71. dbMaterial.FinalPrice = m.UnitCost;
  72. }
  73. }
  74. var RM = from d in db.FmsMaterialPurchaseRequestMaterial
  75. where d.SiteId == siteId &&
  76. d.BusinessFieldId == businessFieldId &&
  77. d.PurchaseRequestId == purchaseRequestId
  78. select d;
  79. var OM = from d in db.FmsMaterialPurchaseOrderMaterial
  80. where d.SiteId == siteId &&
  81. d.BusinessFieldId == businessFieldId &&
  82. d.PurchaseOrderId == purchaseOrderId
  83. select d;
  84. bool bAllSame;
  85. if (RM.Count() == OM.Count())
  86. {
  87. bAllSame = false;
  88. foreach (var r in RM)
  89. {
  90. var fM = OM.SingleOrDefault(x =>
  91. x.MaterialId == r.MaterialId &&
  92. //x.BusinessFieldId == m.BusinessFieldId &&
  93. x.MaterialCount == r.MaterialCount);
  94. if (fM == null)
  95. {
  96. bAllSame = false;
  97. break;
  98. }
  99. else
  100. {
  101. bAllSame = true;
  102. }
  103. }
  104. }
  105. else
  106. {
  107. bAllSame = false;
  108. }
  109. var updateRquest = (
  110. from us in db.FmsMaterialPurchaseRequest
  111. where us.SiteId == siteId && us.BusinessFieldId == businessFieldId && us.PurchaseRequestId == purchaseRequestId
  112. select us).FirstOrDefault();
  113. if (updateRquest != null)
  114. {
  115. updateRquest.bSameOrder = bAllSame;
  116. }
  117. db.SaveChanges();
  118. }
  119. catch ( DbUpdateException e )
  120. {
  121. {
  122. throw e;
  123. }
  124. }
  125. transaction.Complete();
  126. }
  127. return StatusCode( HttpStatusCode.NoContent );
  128. }
  129. protected override void Dispose(bool disposing)
  130. {
  131. if (disposing)
  132. {
  133. db.Dispose();
  134. }
  135. base.Dispose(disposing);
  136. }
  137. }
  138. public class PurchaseOrderMaterial
  139. {
  140. public int SiteId { get; set; }
  141. public int BusinessFieldId { get; set; }
  142. public int PurchaseOrderId { get; set; }
  143. public int MaterialId { get; set; }
  144. public int MaterialCount { get; set; }
  145. public int UnitCost { get; set; }
  146. };
  147. }