Index.cshtml 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405
  1. @{
  2. ViewData["Title"] = "Index";
  3. Layout = "~/Views/Shared/_Layout.cshtml";
  4. }
  5. @using SuperCms.Controllers;
  6. @using SuperCms.Models;
  7. @using System.Globalization;
  8. @using SuperCms.Database;
  9. @model StockViewModel
  10. @{
  11. DateTime oDateFrom = Model.fromDate != "" ? DateTime.ParseExact(Model.fromDate, "dd/MM/yyyy", CultureInfo.InvariantCulture) : DateTime.Now;
  12. var from_date = oDateFrom.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture);
  13. DateTime oDateTo = Model.toDate != "" ? DateTime.ParseExact(Model.toDate, "dd/MM/yyyy", CultureInfo.InvariantCulture) : DateTime.Now;
  14. var to_date = oDateTo.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture);
  15. }
  16. <div class="app-content content">
  17. <div class="content-wrapper">
  18. <div class="content-header row">
  19. <div class="content-header-left col-md-6 col-xs-12 mb-1">
  20. @*<h2 class="content-header-title">Message configuration</h2>*@
  21. </div>
  22. <div class="content-header-right breadcrumbs-right breadcrumbs-top col-md-6 col-xs-12">
  23. <div class="breadcrumb-wrapper col-xs-12">
  24. <ol class="breadcrumb">
  25. @*<li class="breadcrumb-item">
  26. <a href="Index">Admin</a>
  27. </li>*@
  28. @*<li class="breadcrumb-item">
  29. <a href="/Config">Tables</a>
  30. </li>*@
  31. </ol>
  32. </div>
  33. </div>
  34. </div>
  35. <div class="content-body">
  36. <!-- Basic form layout section start -->
  37. <section id="basic-form-layouts">
  38. <div class="row service-height">
  39. <div class="col-md-12">
  40. <div class="card">
  41. <div class="card-header">
  42. <h4 class="card-title" id="basic-layout-form">Toolbars</h4>
  43. <a class="heading-elements-toggle"><i class="icon-ellipsis font-medium-3"></i></a>
  44. <div class="heading-elements">
  45. <ul class="list-inline mb-0">
  46. <li><a data-action="collapse"><i class="icon-minus4"></i></a></li>
  47. <li><a data-action="expand"><i class="icon-expand2"></i></a></li>
  48. </ul>
  49. </div>
  50. </div>
  51. <div class="card-content collapse show">
  52. <div class="card-body ">
  53. <div class="card-block">
  54. <div class="form-body">
  55. <div class="row">
  56. <div class="col-md-12">
  57. <div class="form-group form-box">
  58. <form class="form-horizontal" action="/Stock" method="post">
  59. @Html.AntiForgeryToken()
  60. <div class="row">
  61. <div class="col-md-5">
  62. <div class="box-relative" style="width:100%;">
  63. <label>From</label>
  64. <input class="form-control" type="date" id="fromDate" name="fromDate" autocomplete="on" placeholder="Fill from date"
  65. value="@from_date"
  66. style="width:calc(100%); display:inline-block;height:auto">
  67. </div>
  68. </div>
  69. <div class="col-md-5">
  70. <div class="box-relative" style="width:100%;">
  71. <label>To</label>
  72. <input class="form-control" type="date" id="toDate" name="toDate" autocomplete="on" placeholder="Fill to date"
  73. value="@to_date"
  74. style="width:calc(100%); display:inline-block;height:auto">
  75. </div>
  76. </div>
  77. <div class="col-md-2" style="margin: initial; padding-top: 27px; text-align: end; ">
  78. <div class="box-relative" style="width:100%;">
  79. <button type="submit" class="btn btn-outline-primary" formaction="/Stock/Export">Export</button>
  80. <button type="submit" class="btn btn-outline-primary">Search</button>
  81. </div>
  82. </div>
  83. </div>
  84. </form>
  85. </div>
  86. </div>
  87. </div>
  88. </div>
  89. </div>
  90. </div>
  91. </div>
  92. </div>
  93. </div>
  94. <div class="col-12">
  95. <div class="card">
  96. <div class="row card-content" style="margin:0;">
  97. <div class="col-md-5 table-responsive" style="padding-right:0; padding-left: 0;">
  98. <table id="db-table-detail-report-month" class="table table-hover mb-0 ps-container ps-theme-default">
  99. @{
  100. <thead>
  101. <tr>
  102. <th>NO</th>
  103. <th>NGÀNH</th>
  104. <th>CHỈ SỐ</th>
  105. </tr>
  106. </thead>
  107. <tbody>
  108. @{
  109. // get the newest data folowing by each service
  110. for (int j = 0; j < Model.distributeData.Count; j++)
  111. {
  112. ConnCkNganh nganh = Model.distributeData.ElementAt(j).Key;
  113. <tr class="sencond-column @(j%2==0? "oven-column" : "")">
  114. <td rowspan="6" class="text-truncate main-column" style="vertical-align: middle;">@(j+1)</td>
  115. <td rowspan="6" class="text-truncate main-column" style="vertical-align: middle;">@(nganh.Name.ToUpper())</td>
  116. <td class="text-truncate">Tăng (+) / Giảm (-)</td>
  117. </tr>
  118. <tr class="sencond-column @(j%2==0? "oven-column" : "")">
  119. <td class="text-truncate">Thay đổi</td>
  120. </tr>
  121. <tr class="sencond-column @(j%2==0? "oven-column" : "")">
  122. <td class="text-truncate">Khối lượng</td>
  123. </tr>
  124. <tr class="sencond-column @(j%2==0? "oven-column" : "")">
  125. <td class="text-truncate">Giá trị</td>
  126. </tr>
  127. <tr class="sencond-column @(j%2==0? "oven-column" : "")">
  128. <td class="text-truncate">Mua</td>
  129. </tr>
  130. <tr class="sencond-column @(j%2==0? "oven-column" : "")">
  131. <td class="text-truncate">Bán</td>
  132. </tr>
  133. }
  134. int len = Model.distributeData.Count;
  135. <tr class="sencond-column @(len%2==0? "oven-column" : "")">
  136. <td rowspan="4" class="text-truncate main-column" style="vertical-align: middle;"></td>
  137. <td rowspan="4" class="text-truncate main-column" style="vertical-align: middle;">TONG</td>
  138. <td class="text-truncate">Khối lượng</td>
  139. </tr>
  140. <tr class="sencond-column @(len%2==0? "oven-column" : "")">
  141. <td class="text-truncate">Giá trị</td>
  142. </tr>
  143. <tr class="sencond-column @(len%2==0? "oven-column" : "")">
  144. <td class="text-truncate">Mua</td>
  145. </tr>
  146. <tr class="sencond-column @(len%2==0? "oven-column" : "")">
  147. <td class="text-truncate">Bán</td>
  148. </tr>
  149. }
  150. </tbody>
  151. }
  152. </table>
  153. </div>
  154. <div class="col-md-7 table-responsive" style="padding-left:0">
  155. <table id="db-table-detail-report-day" class="table table-hover mb-0 ps-container ps-theme-default">
  156. @{
  157. <thead>
  158. <tr>
  159. @{
  160. for (int d = 0; d < Model.listDate.Count; d++)
  161. {
  162. <th>@Model.listDate[d].ToString("dd/MM")</th>
  163. <th>%</th>
  164. }
  165. }
  166. </tr>
  167. </thead>
  168. <tbody>
  169. @{
  170. List<double> listTongGiaTri = new List<double>();
  171. List<double> listTongKhoiLuong = new List<double>();
  172. List<double> listTongThayDoi = new List<double>();
  173. List<double> listTongMua = new List<double>();
  174. List<double> listTongBan = new List<double>();
  175. for (int d = 0; d < Model.listDate.Count; d++)
  176. {
  177. // tong sum
  178. double tongGiaTri = 0.0;
  179. double tongThayDoi = 0.0;
  180. double tongKhoiLuong = 0.0;
  181. double tongMua = 0.0;
  182. double tongBan = 0.0;
  183. for (int k = 0; k < Model.distributeData.Count; k++)
  184. {
  185. Dictionary<DateTime, ConnCkData> dataDateList = Model.distributeData.ElementAt(k).Value;
  186. ConnCkData ckData = dataDateList.ElementAt(d).Value;
  187. if (ckData != null)
  188. {
  189. tongBan += Decimal.ToDouble(ckData.TnnBan ?? 0);
  190. tongMua += Decimal.ToDouble(ckData.TnnMua ?? 0);
  191. tongKhoiLuong += Decimal.ToDouble(ckData.KhoiLuong ?? 0);
  192. //tongThayDoi += Double.Parse(ckData.ThayDoi);
  193. tongGiaTri += Decimal.ToDouble(ckData.GiaTri ?? 0);
  194. }
  195. }
  196. listTongGiaTri.Add(tongGiaTri);
  197. listTongKhoiLuong.Add(tongKhoiLuong);
  198. listTongMua.Add(tongMua);
  199. listTongBan.Add(tongBan);
  200. //listTongThayDoi.Add(tongThayDoi);
  201. }
  202. for (int j = 0; j < Model.distributeData.Count; j++)
  203. {
  204. Dictionary<DateTime, ConnCkData> dataDateList = Model.distributeData.ElementAt(j).Value;
  205. <tr class="sencond-column @(j%2==0? "oven-column" : "")">
  206. @{
  207. for (int u = 0; u < dataDateList.Count; u++)
  208. {
  209. ConnCkData data = dataDateList.ElementAt(u).Value;
  210. if (data == null)
  211. {
  212. <td class="text-truncate"></td>
  213. <td class="text-truncate"></td>
  214. }
  215. else
  216. {
  217. <td class="text-truncate @(data.TangGiam.Contains("-") ? "red-text" : "green-text")">@(string.Format("{0:#,0}", data.TangGiam))</td>
  218. <td class="text-truncate"></td>
  219. }
  220. }
  221. }
  222. </tr>
  223. <tr class="sencond-column @(j%2==0? "oven-column" : "")">
  224. @{
  225. for (int u = 0; u < dataDateList.Count; u++)
  226. {
  227. ConnCkData data = dataDateList.ElementAt(u).Value;
  228. if (data == null)
  229. {
  230. <td class="text-truncate"></td>
  231. <td class="text-truncate"></td>
  232. }
  233. else
  234. {
  235. //double tongThayDoiNgay = listTongThayDoi[u];
  236. //double percent = Math.Round(Double.Parse(data.ThayDoi) * 100 / tongThayDoiNgay, 2);
  237. <td class="text-truncate">@(string.Format("{0:#,0}", data.ThayDoi))</td>
  238. //<td class="text-truncate">@(percent)%</td>
  239. <td class="text-truncate"></td>
  240. }
  241. }
  242. }
  243. </tr>
  244. <tr class="sencond-column @(j%2==0? "oven-column" : "")">
  245. @{
  246. for (int u = 0; u < dataDateList.Count; u++)
  247. {
  248. ConnCkData data = dataDateList.ElementAt(u).Value;
  249. if (data == null)
  250. {
  251. <td class="text-truncate"></td>
  252. <td class="text-truncate"></td>
  253. }
  254. else
  255. {
  256. double tongKhoiLuongNgay = listTongKhoiLuong[u];
  257. double percent = Math.Round(Decimal.ToDouble(data.KhoiLuong ?? 0) * 100 / tongKhoiLuongNgay, 2);
  258. <td class="text-truncate">@(string.Format("{0:#,0}", data.KhoiLuong))</td>
  259. <td class="text-truncate purple-bg">@percent%</td>
  260. }
  261. }
  262. }
  263. </tr>
  264. <tr class="sencond-column @(j%2==0? "oven-column" : "")">
  265. @{
  266. for (int u = 0; u < dataDateList.Count; u++)
  267. {
  268. ConnCkData data = dataDateList.ElementAt(u).Value;
  269. if (data == null)
  270. {
  271. <td class="text-truncate"></td>
  272. <td class="text-truncate"></td>
  273. }
  274. else
  275. {
  276. double tongGiaTriNgay = listTongGiaTri[u];
  277. double percent = Math.Round(Decimal.ToDouble(data.GiaTri ?? 0) * 100 / tongGiaTriNgay, 2);
  278. <td class="text-truncate">@(string.Format("{0:#,0}", data.GiaTri))</td>
  279. <td class="text-truncate purple-bg">@percent%</td>
  280. }
  281. }
  282. }
  283. </tr>
  284. <tr class="sencond-column @(j%2==0? "oven-column" : "")">
  285. @{
  286. for (int u = 0; u < dataDateList.Count; u++)
  287. {
  288. ConnCkData data = dataDateList.ElementAt(u).Value;
  289. if (data == null)
  290. {
  291. <td class="text-truncate"></td>
  292. <td class="text-truncate"></td>
  293. }
  294. else
  295. {
  296. double tongMuaNgay = listTongMua[u];
  297. double percent = Math.Round(Decimal.ToDouble(data.TnnMua ?? 0) * 100 / tongMuaNgay, 2);
  298. <td class="text-truncate">@(string.Format("{0:#,0}", data.TnnMua))</td>
  299. <td class="text-truncate purple-bg">@percent%</td>
  300. }
  301. }
  302. }
  303. </tr>
  304. <tr class="sencond-column @(j%2==0? "oven-column" : "")">
  305. @{
  306. for (int u = 0; u < dataDateList.Count; u++)
  307. {
  308. ConnCkData data = dataDateList.ElementAt(u).Value;
  309. if (data == null)
  310. {
  311. <td class="text-truncate"></td>
  312. <td class="text-truncate"></td>
  313. }
  314. else
  315. {
  316. double tongBanNgay = listTongBan[u];
  317. double percent = Math.Round(Decimal.ToDouble(data.TnnBan ?? 0) * 100 / tongBanNgay, 2);
  318. <td class="text-truncate">@(string.Format("{0:#,0}", data.TnnBan))</td>
  319. <td class="text-truncate purple-bg">@percent%</td>
  320. }
  321. }
  322. }
  323. </tr>
  324. }
  325. <tr class="sencond-column @(Model.distributeData.Count%2==0? "oven-column" : "")">
  326. @{
  327. for (int u = 0; u < Model.listDate.Count; u++)
  328. {
  329. <td class="text-truncate bold-text">@(string.Format("{0:#,0}", listTongKhoiLuong[u]))</td>
  330. <td class="text-truncate"></td>
  331. }
  332. }
  333. </tr>
  334. <tr class="sencond-column @(Model.distributeData.Count%2==0? "oven-column" : "")">
  335. @{
  336. for (int u = 0; u < Model.listDate.Count; u++)
  337. {
  338. <td class="text-truncate bold-text">@(string.Format("{0:#,0}", listTongGiaTri[u]))</td>
  339. <td class="text-truncate"></td>
  340. }
  341. }
  342. </tr>
  343. <tr class="sencond-column @(Model.distributeData.Count%2==0? "oven-column" : "")">
  344. @{
  345. for (int u = 0; u < Model.listDate.Count; u++)
  346. {
  347. <td class="text-truncate bold-text">@(string.Format("{0:#,0}", listTongMua[u]))</td>
  348. <td class="text-truncate"></td>
  349. }
  350. }
  351. </tr>
  352. <tr class="sencond-column @(Model.distributeData.Count%2==0? "oven-column" : "")">
  353. @{
  354. for (int u = 0; u < Model.listDate.Count; u++)
  355. {
  356. <td class="text-truncate bold-text">@(string.Format("{0:#,0}", listTongBan[u]))</td>
  357. <td class="text-truncate"></td>
  358. }
  359. }
  360. </tr>
  361. }
  362. </tbody>
  363. }
  364. </table>
  365. </div>
  366. </div>
  367. </div>
  368. </div>
  369. </div>
  370. </section>
  371. <!-- // Basic form layout section end -->
  372. </div>
  373. </div>
  374. </div>