Advertisement
Guest User

Untitled

a guest
Jul 29th, 2015
213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.88 KB | None | 0 0
  1. public class CalculateClaimsBondsChangedCommand : ICalculateCommand
  2. {
  3. private readonly IDebenturChangesRepository debenturChangesRepository;
  4. private readonly IClaimsCalculatorService claimsCalculatorService;
  5.  
  6. public CalculateClaimsBondsChangedCommand(
  7. IDebenturChangesRepository debenturChangesRepository,
  8. IClaimsCalculatorService claimsCalculatorService)
  9. {
  10. if (debenturChangesRepository == null) throw new ArgumentNullException("debenturChangesRepository");
  11. if (claimsCalculatorService == null) throw new ArgumentNullException("claimsCalculatorService");
  12. this.debenturChangesRepository = debenturChangesRepository;
  13. this.claimsCalculatorService = claimsCalculatorService;
  14. }
  15.  
  16. public void Execute()
  17. {
  18. var newDebenturs = debenturChangesRepository.CreateForNewDebenturs();
  19. var changedDebenturs = debenturChangesRepository.CreateForChangedCalledIn();
  20.  
  21. claimsCalculatorService.CalculateClaims(newDebenturs.Concat(changedDebenturs).Select(d => d.ClaimNo));
  22.  
  23. foreach (var debentur in newDebenturs)
  24. {
  25. debenturChangesRepository.InsertDebenturChange(debentur);
  26. }
  27. foreach (var debentur in changedDebenturs)
  28. {
  29. debenturChangesRepository.UpdateDebenturChange(debentur);
  30. }
  31. }
  32. }
  33.  
  34. public class DebenturChangesRepository : IDebenturChangesRepository
  35. {
  36. private readonly string connectionString;
  37.  
  38. public DebenturChangesRepository(string connectionString)
  39. {
  40. if (connectionString == null) throw new ArgumentNullException("connectionString");
  41. this.connectionString = connectionString;
  42. }
  43.  
  44. public List<DebenturChange> CreateForNewDebenturs()
  45. {
  46. var sql = "Select ClaimNo, CalledIn " +
  47. "From Debentur " +
  48. "Where ClaimNo Not In (Select ClaimNo From DebenturChange) ";
  49.  
  50. using (var connection = new SqlConnection(connectionString))
  51. {
  52. connection.Open();
  53.  
  54. var command = connection.CreateCommand();
  55. command.CommandText = sql;
  56.  
  57. using (var reader = command.ExecuteReader())
  58. {
  59. return GetDebentursFromReader(reader);
  60. }
  61. }
  62. }
  63.  
  64. public List<DebenturChange> CreateForChangedCalledIn()
  65. {
  66. var sql = "Select d.ClaimNo, d.CalledIn " +
  67. "From Debentur d join DebenturChange c on d.ClaimNo = c.ClaimNo " +
  68. "Where IsNull(d.CalledIn, 0) <> IsNull(c.CalledIn, 0) ";
  69.  
  70. using (var connection = new SqlConnection(connectionString))
  71. {
  72. connection.Open();
  73.  
  74. var command = connection.CreateCommand();
  75. command.CommandText = sql;
  76.  
  77. using (var reader = command.ExecuteReader())
  78. {
  79. return GetDebentursFromReader(reader);
  80. }
  81. }
  82. }
  83.  
  84. private List<DebenturChange> GetDebentursFromReader(IDataReader reader)
  85. {
  86. var debenturs = new List<DebenturChange>();
  87. while (reader.Read())
  88. {
  89. debenturs.Add(ParseDebenturChange(reader));
  90. }
  91.  
  92. return debenturs;
  93. }
  94.  
  95. private DebenturChange ParseDebenturChange(IDataReader reader)
  96. {
  97. return new DebenturChange()
  98. {
  99. ClaimNo = (string)reader["ClaimNo"],
  100. CalledIn = ParseColumnToNullableInt(reader["CalledIn"])
  101. };
  102. }
  103.  
  104. private int? ParseColumnToNullableInt(object o)
  105. {
  106. if (o == DBNull.Value) return null;
  107. return Convert.ToInt32(o);
  108. }
  109.  
  110. public void InsertDebenturChange(DebenturChange debenturChange)
  111. {
  112. var sql = "Insert Into DebenturChange (ClaimNo, CalledIn) " +
  113. "Values (@ClaimNo, @CalledIn)";
  114.  
  115. using (var connection = new SqlConnection(connectionString))
  116. {
  117. connection.Open();
  118.  
  119. var command = connection.CreateCommand();
  120. command.CommandText = sql;
  121. command.Parameters.AddWithValue("ClaimNo", debenturChange.ClaimNo);
  122. command.Parameters.AddWithValue("CalledIn", ParseNullableIntToColumn(debenturChange.CalledIn));
  123.  
  124. command.ExecuteNonQuery();
  125. }
  126. }
  127.  
  128. public void UpdateDebenturChange(DebenturChange debenturChange)
  129. {
  130. var sql = "Update DebenturChange " +
  131. "Set CalledIn = @CalledIn " +
  132. "Where ClaimNo = @ClaimNo";
  133.  
  134. using (var connection = new SqlConnection(connectionString))
  135. {
  136. connection.Open();
  137.  
  138. var command = connection.CreateCommand();
  139. command.CommandText = sql;
  140. command.Parameters.AddWithValue("ClaimNo", debenturChange.ClaimNo);
  141. command.Parameters.AddWithValue("CalledIn", ParseNullableIntToColumn(debenturChange.CalledIn));
  142.  
  143. command.ExecuteNonQuery();
  144. }
  145. }
  146.  
  147. private object ParseNullableIntToColumn(int? value)
  148. {
  149. if (value == null) return DBNull.Value;
  150. return value.Value;
  151. }
  152. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement