RecargasController.cs 8.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using Microsoft.AspNetCore.Http;
  6. using Microsoft.AspNetCore.Mvc;
  7. using Microsoft.EntityFrameworkCore;
  8. using WebApplication3.Models;
  9. using WebApplication3.Clases;
  10. namespace WebApplication3.Controllers
  11. {
  12. [Route("api/[controller]")]
  13. [ApiController]
  14. public class RecargasController : ControllerBase
  15. {
  16. private readonly AquiferContext _context;
  17. private TsRecargaController tsRecargaController;
  18. //private AcuiferoController aquiferController;
  19. public RecargasController(AquiferContext context)
  20. {
  21. _context = context;
  22. tsRecargaController = new TsRecargaController(context);
  23. //aquiferController = new AcuiferoController(context);
  24. }
  25. // GET: api/Recargas
  26. [HttpGet]
  27. public async Task<ActionResult<IEnumerable<Recarga>>> GetRecargas()
  28. {
  29. return await _context.Recargas.ToListAsync();
  30. }
  31. // GET: api/Recargas/5
  32. [HttpGet("{id}")]
  33. public async Task<ActionResult<DatosPozoRecarga>> GetRecarga(uint id)
  34. {
  35. var recarga = await _context.Recargas.FindAsync(id);
  36. if (recarga == null)
  37. {
  38. return NotFound();
  39. }
  40. DatosPozoRecarga datosRecarga = new DatosPozoRecarga();
  41. datosRecarga.Id = recarga.Id;
  42. datosRecarga.Nombre = recarga.Nombre;
  43. datosRecarga.Latitud = recarga.Latitud;
  44. datosRecarga.Longitud = recarga.Longitud;
  45. datosRecarga.Simulacion = recarga.IdSimulacion;
  46. datosRecarga.Ts = tsRecargaController.GetTsRecarga(id);
  47. return datosRecarga;
  48. }
  49. // PUT: api/Recargas/5
  50. // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754
  51. [HttpPut("{id}")]
  52. public async Task<IActionResult> PutRecarga(uint id, [FromBody] DatosPozoRecarga datos)
  53. {
  54. Recarga recarga = _context.Recargas.Find(id);
  55. if (id != recarga.Id)
  56. {
  57. return BadRequest();
  58. }
  59. recarga.IdSimulacion = (datos.Simulacion != null && recarga.IdSimulacion != datos.Simulacion) ? datos.Simulacion : recarga.IdSimulacion;
  60. recarga.Latitud = (datos.Latitud != null && recarga.Latitud != datos.Latitud) ? datos.Latitud : recarga.Latitud;
  61. recarga.Longitud = (datos.Longitud != null && recarga.Longitud != datos.Longitud) ? datos.Longitud : recarga.Longitud;
  62. recarga.Nombre = (datos.Nombre != null && recarga.Nombre != datos.Nombre) ? datos.Nombre : recarga.Nombre;
  63. //Para editar los datos de la TimeSerie haria falta un identificador más
  64. _context.Entry(recarga).State = EntityState.Modified;
  65. try
  66. {
  67. await _context.SaveChangesAsync();
  68. }
  69. catch (DbUpdateConcurrencyException)
  70. {
  71. if (!RecargaExists((uint)id))
  72. {
  73. return NotFound();
  74. }
  75. else
  76. {
  77. throw;
  78. }
  79. }
  80. return CreatedAtAction("GetRecarga", new { id = recarga.Id }, recarga);
  81. }
  82. // POST: api/Recargas
  83. // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754
  84. [HttpPost]
  85. public async Task<ActionResult<Recarga>> PostRecarga([FromBody] DatosPozoRecarga datos)
  86. {
  87. Recarga recarga = new Recarga();
  88. recarga.IdSimulacion = datos.Simulacion;
  89. recarga.Nombre = datos.Nombre;
  90. recarga.Latitud = datos.Latitud;
  91. recarga.Longitud = datos.Longitud;
  92. recarga.IdAcuifero = datos.Acuifero;
  93. _context.Recargas.Add(recarga);
  94. try
  95. {
  96. await _context.SaveChangesAsync();
  97. foreach(TimeSerie ts in datos.Ts)
  98. {
  99. TsRecarga tsRecarga = new TsRecarga();
  100. tsRecarga.IdRecarga = recarga.Id;
  101. tsRecarga.MarcaTiempo = ts.Hora;
  102. tsRecarga.Valor = ts.Valor;
  103. await tsRecargaController.PostTsRecarga(tsRecarga);
  104. }
  105. }
  106. catch (DbUpdateException)
  107. {
  108. if (RecargaExists(recarga.Id))
  109. {
  110. return Conflict();
  111. }
  112. else
  113. {
  114. throw;
  115. }
  116. }
  117. return CreatedAtAction("GetRecarga", new { id = recarga.Id }, recarga);
  118. }
  119. // DELETE: api/Recargas/5
  120. [HttpDelete("{id}")]
  121. public async Task<IActionResult> DeleteRecarga(uint id)
  122. {
  123. var recarga = await _context.Recargas.FindAsync(id);
  124. if (recarga == null)
  125. {
  126. return NotFound();
  127. }
  128. _context.Recargas.Remove(recarga);
  129. await _context.SaveChangesAsync();
  130. return NoContent();
  131. }
  132. private bool RecargaExists(uint id)
  133. {
  134. return _context.Recargas.Any(e => e.Id == id);
  135. }
  136. [NonAction]
  137. public async void SetRecargasSimulacion(uint? acuiferoId, uint? simulacionId)
  138. {
  139. Recarga[] recargas = _context.Recargas.Where(x => x.IdAcuifero == acuiferoId).ToArray<Recarga>();
  140. foreach (Recarga r in recargas)
  141. {
  142. Recarga recarga = r.Copy(simulacionId);
  143. _context.Recargas.Add(recarga);
  144. }
  145. await _context.SaveChangesAsync();
  146. }
  147. [NonAction]
  148. public List<Recarga> GetRecargasSimulacion(uint? simulacionId)
  149. {
  150. List<Recarga> recargas = _context.Recargas.Where(x => x.IdSimulacion == simulacionId).ToList<Recarga>();
  151. return recargas;
  152. }
  153. [NonAction]
  154. public Recarga[] GetRecargasAcuifero(uint acuiferoId)
  155. {
  156. return _context.Recargas.Where(x => x.IdAcuifero == acuiferoId).ToArray<Recarga>();
  157. }
  158. [NonAction]
  159. public Recarga[] GetRecargasAcuiferoSimulacionInicial(uint acuiferoId)
  160. {
  161. return _context.Recargas.Where(x => x.IdAcuifero == acuiferoId && x.IdSimulacion == null).ToArray<Recarga>();
  162. }
  163. [NonAction]
  164. public List<TsRecarga> GetTsRecargaFromRecaga(uint? recarga)
  165. {
  166. List<TsRecarga> tsRecarga = _context.TsRecargas.Where(x => x.IdRecarga == recarga).ToList<TsRecarga>();
  167. return tsRecarga;
  168. }
  169. [NonAction]
  170. public async Task<ActionResult<IEnumerable<Recarga>>> ParseoFichero(uint aquifer, string file)
  171. {
  172. Parser parser = new Parser();
  173. //string file = @"C:\Users\Admin\Desktop\ASD\infoPozos.VMW";
  174. RechargeData[] recharges = parser.ParseRechargeData(file, out string recharge_geometry);
  175. //await aquiferController.SetRechargeGeometry(aquifer, recharge_geometry);
  176. return await PostMultipleRecharges(aquifer,recharges);
  177. }
  178. [NonAction]
  179. public async Task<ActionResult<IEnumerable<Recarga>>> PostMultipleRecharges(uint aquifer, RechargeData[] recharges)
  180. {
  181. foreach (RechargeData r in recharges)
  182. {
  183. Recarga recarga = r.ToRecarga(aquifer);
  184. _context.Recargas.Add(recarga);
  185. try
  186. {
  187. await _context.SaveChangesAsync();
  188. foreach (TimeSerieInterno ts in r.Rates)
  189. {
  190. TsRecarga tsRecarga = new();
  191. tsRecarga.IdRecarga = recarga.Id;
  192. tsRecarga.MarcaTiempo = ts.Hora;
  193. tsRecarga.Valor = ts.Valor;
  194. await tsRecargaController.PostTsRecarga(tsRecarga);
  195. }
  196. }
  197. catch (DbUpdateException)
  198. {
  199. if (RecargaExists(recarga.Id))
  200. {
  201. return Conflict();
  202. }
  203. else
  204. {
  205. throw;
  206. }
  207. }
  208. }
  209. return await _context.Recargas.ToListAsync();
  210. }
  211. }
  212. }