Create.cshtml 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. @model GreenTree.Strohrmann.ERP.Web.Models.Business.CraftModel
  2. @{
  3. ViewData["Title"] = "Neues Gewerk";
  4. }
  5. <script type="text/javascript">
  6. function calculateEmployeeAggregation() {
  7. var count = $("input[data-aggregation='employeeAmount']").length;
  8. var avgAmount = $("input[data-aggregation='employeeAmount']").map(function () {
  9. return parseFloat($(this).val());
  10. }).get().avg();
  11. var sumValues = $("input[data-aggregation='employeeValue']").map(function () {
  12. return parseFloat($(this).val());
  13. }).get().sum();
  14. $("#aggEmployeeCount").text(count);
  15. $("#aggEmployeeAmountAvg").text(isNaN(avgAmount) ? " -" : avgAmount + " Std.");
  16. $("#aggEmployeeValueSum").text(isNaN(sumValues) ? " -" : sumValues + " €");
  17. }
  18. function calculateMaterialAggregation() {
  19. var count = $("input[data-aggregation='materialCalculationFactor']").length;
  20. var avgCalculationFactor = $("input[data-aggregation='materialCalculationFactor']").map(function () {
  21. return parseFloat($(this).val());
  22. }).get().avg();
  23. var sumValues = $("input[data-aggregation='materialValue']").map(function () {
  24. return parseFloat($(this).val());
  25. }).get().sum();
  26. $("#aggMaterialCount").text(count);
  27. $("#aggMaterialCalculationFactorAvg").text(isNaN(avgCalculationFactor) ? " -" : avgCalculationFactor + " %");
  28. $("#aggMaterialValueSum").text(isNaN(sumValues) ? " -" : sumValues + " €");
  29. }
  30. function addCraftEmployeePartial() {
  31. $.ajax({
  32. type: "GET",
  33. url: '@Url.Action("AddCraftEmployeePartial")',
  34. data: {
  35. Index: $("#craftemployeelist").children(".row").length
  36. },
  37. success: function (data) {
  38. $("#craftemployeelist").append(data);
  39. calculateEmployeeAggregation();
  40. },
  41. error: function (errorData) { console.error(errorData); }
  42. });
  43. }
  44. function addCraftMaterialPartial() {
  45. $.ajax({
  46. type: "GET",
  47. url: '@Url.Action("AddCraftMaterialPartial")',
  48. data: {
  49. Index: $("#craftmateriallist").children(".row").length
  50. },
  51. success: function (data) {
  52. $("#craftmateriallist").append(data);
  53. },
  54. error: function (errorData) { console.error(errorData); }
  55. });
  56. }
  57. </script>
  58. <h1>Gewerk erstellen</h1>
  59. <h4>Neues Gewerk</h4>
  60. <hr />
  61. <form asp-action="Create">
  62. <div asp-validation-summary="ModelOnly" class="text-danger"></div>
  63. <div class="row">
  64. <div class="col-3 pr-1">
  65. <div class="card h-100 bg-light">
  66. <div class="card-header pb-1">
  67. <h6>Allgemein</h6>
  68. </div>
  69. <div class="card-body">
  70. <div class="form-group">
  71. <label asp-for="Name" class="control-label"></label>
  72. <input asp-for="Name" class="form-control" />
  73. <span asp-validation-for="Name" class="text-danger"></span>
  74. </div>
  75. <div class="form-group">
  76. <label asp-for="CreationDate" class="control-label"></label>
  77. <input asp-for="CreationDate" type="date" class="form-control" />
  78. <span asp-validation-for="CreationDate" class="text-danger"></span>
  79. </div>
  80. <div class="form-group">
  81. <label asp-for="CustomerId" class="control-label"></label>
  82. @await Html.PartialAsync("~/Views/Customer/_SearchCustomerPartial.cshtml")
  83. <span asp-validation-for="CustomerId" class="text-danger"></span>
  84. </div>
  85. <div class="form-group">
  86. <label asp-for="Comment" class="control-label"></label>
  87. <textarea asp-for="Comment" class="form-control"></textarea>
  88. <span asp-validation-for="Comment" class="text-danger"></span>
  89. </div>
  90. </div>
  91. </div>
  92. </div>
  93. <div class="col-9">
  94. <div class="card bg-light">
  95. <div class="card-header pb-1">
  96. <h6 class="float-left">Arbeitsstunden</h6>
  97. <a class="float-right" href="#" onclick="addCraftEmployeePartial()">Hinzufügen</a>
  98. </div>
  99. <div id="craftemployeelist" class="card-body">
  100. @if (Model != null && Model.CraftEmployees != null)
  101. {
  102. @foreach (var item in Model.CraftEmployees)
  103. {
  104. @await Html.PartialAsync("_CraftEmployeePartial", item.Value)
  105. }
  106. }
  107. else
  108. {
  109. @await Html.PartialAsync("_CraftEmployeePartial")
  110. }
  111. </div>
  112. <div class="card-footer">
  113. <div class="row">
  114. <div class="col-4">
  115. <h5 class="mb-0">
  116. <span class="badge badge-info">
  117. <span class="fa fa-hashtag" aria-label="Anzahl"> </span>
  118. @if (Model != null && Model.CraftEmployees != null)
  119. {
  120. <span id="aggEmployeeCount">
  121. @Model.CraftEmployees.Values.Count
  122. </span>
  123. }
  124. else
  125. {
  126. <span id="aggEmployeeCount">1</span>
  127. }
  128. </span>
  129. </h5>
  130. </div>
  131. <div class="col-2">
  132. <h5 class="mb-0">
  133. <span class="badge badge-info">
  134. <img height="14" src="~/img/icon-average-48.png" alt="Durchschnitt" title="Durchschnitt" />
  135. @if (Model != null && Model.CraftEmployees != null)
  136. {
  137. <span id="aggEmployeeAmountAvg">
  138. @String.Format("{0} Std.", Model.CraftEmployees.Values.Average(m => m.Amount))
  139. </span>
  140. }
  141. else
  142. {
  143. <span id="aggEmployeeAmountAvg"> -</span>
  144. }
  145. </span>
  146. </h5>
  147. </div>
  148. <div class="col-6">
  149. <h5 class="mb-0">
  150. <span class="badge badge-info">
  151. <img height="14" src="~/img/icon-sigma-48.png" alt="Summe" title="Summe" />
  152. @if (Model != null && Model.CraftEmployees != null)
  153. {
  154. <span id="aggEmployeeValueSum">
  155. @String.Format("{0} €", Model.CraftEmployees.Values.Sum(m => m.Value))
  156. </span>
  157. }
  158. else
  159. {
  160. <span id="aggEmployeeValueSum"> -</span>
  161. }
  162. </span>
  163. </h5>
  164. </div>
  165. </div>
  166. </div>
  167. </div>
  168. <div class="card bg-light mt-3">
  169. <div class="card bg-light">
  170. <div class="card-header pb-1">
  171. <h6 class="float-left">Materialien</h6>
  172. <a class="float-right" href="#" onclick="addCraftMaterialPartial()">Hinzufügen</a>
  173. </div>
  174. <div id="craftmateriallist" class="card-body">
  175. @if (Model != null && Model.CraftMaterials != null)
  176. {
  177. @foreach (var item in Model.CraftMaterials)
  178. {
  179. @await Html.PartialAsync("_CraftMaterialPartial", item.Value)
  180. }
  181. }
  182. else
  183. {
  184. @await Html.PartialAsync("_CraftMaterialPartial")
  185. }
  186. </div>
  187. <div class="card-footer">
  188. <div class="row">
  189. <div class="col-3">
  190. <h5 class="mb-0">
  191. <span class="badge badge-info">
  192. <span class="fa fa-hashtag" aria-label="Anzahl"> </span>
  193. @if (Model != null && Model.CraftMaterials != null)
  194. {
  195. <span id="aggMaterialCount">
  196. @Model.CraftMaterials.Values.Count
  197. </span>
  198. }
  199. else
  200. {
  201. <span id="aggMaterialCount">1</span>
  202. }
  203. </span>
  204. </h5>
  205. </div>
  206. <div class="col-2">
  207. </div>
  208. <div class="col-3">
  209. <h5 class="mb-0">
  210. <span class="badge badge-info">
  211. <img height="14" src="~/img/icon-average-48.png" alt="Durchschnitt" title="Durchschnitt" />
  212. @if (Model != null && Model.CraftMaterials != null)
  213. {
  214. <span id="aggMaterialCalculationFactorAvg">
  215. @String.Format("{0} %", Model.CraftMaterials.Values.Average(m => m.CalculationFactor))
  216. </span>
  217. }
  218. else
  219. {
  220. <span id="aggMaterialCalculationFactorAvg"> -</span>
  221. }
  222. </span>
  223. </h5>
  224. </div>
  225. <div class="col-4">
  226. <h5 class="mb-0">
  227. <span class="badge badge-info">
  228. <img height="14" src="~/img/icon-sigma-48.png" alt="Summe" title="Summe" />
  229. @if (Model != null && Model.CraftMaterials != null)
  230. {
  231. <span id="aggMaterialValueSum">
  232. @String.Format("{0} €", Model.CraftMaterials.Values.Sum(m => m.Value))
  233. </span>
  234. }
  235. else
  236. {
  237. <span id="aggMaterialValueSum"> -</span>
  238. }
  239. </span>
  240. </h5>
  241. </div>
  242. </div>
  243. </div>
  244. </div>
  245. </div>
  246. </div>
  247. </div>
  248. <hr />
  249. <div class="form-group d-flex mt-3">
  250. <input type="submit" value="Erstellen" class="btn btn-primary" />
  251. <div class="align-self-center ml-3">
  252. <a asp-action="Index">Zurück zur Liste</a>
  253. </div>
  254. </div>
  255. </form>