source: StockMaster/Views/PurchaseOrder/Details.cshtml@ dfe03b8

main
Last change on this file since dfe03b8 was dfe03b8, checked in by Ceyda <ceyda.huseini@…>, 2 days ago

Initialize StockMaster project

  • Property mode set to 100644
File size: 12.4 KB
Line 
1@model StockMaster.Models.PurchaseOrder
2@{
3 ViewData["Title"] = "Order Details";
4 var totalCost = Model.PurchaseOrderItems.Sum(i => i.Quantity * i.UnitCost);
5}
6
7<div class="row mb-4">
8 <div class="col-12">
9 <h2><i class="fas fa-file-invoice"></i> Purchase Order Details</h2>
10 <nav aria-label="breadcrumb">
11 <ol class="breadcrumb">
12 <li class="breadcrumb-item"><a href="/">Home</a></li>
13 <li class="breadcrumb-item"><a href="/PurchaseOrder/Index">Purchase Orders</a></li>
14 <li class="breadcrumb-item active">Order #PO-@Model.PoId</li>
15 </ol>
16 </nav>
17 </div>
18</div>
19
20<div class="row">
21 <div class="col-md-8">
22 <div class="card mb-4">
23 <div class="card-header d-flex justify-content-between align-items-center">
24 <span><i class="fas fa-info-circle"></i> Order Information</span>
25 @switch (Model.Status)
26 {
27 case "Pending":
28 <span class="badge bg-warning fs-6">
29 <i class="fas fa-clock"></i> Pending
30 </span>
31 break;
32 case "Confirmed":
33 <span class="badge bg-info fs-6">
34 <i class="fas fa-check"></i> Confirmed
35 </span>
36 break;
37 case "Received":
38 <span class="badge bg-success fs-6">
39 <i class="fas fa-box-check"></i> Received
40 </span>
41 break;
42 }
43 </div>
44 <div class="card-body">
45 <div class="row mb-3">
46 <div class="col-md-6">
47 <label class="text-muted small mb-1">Order Number</label>
48 <h5><strong>#PO-@Model.PoId</strong></h5>
49 </div>
50 <div class="col-md-6">
51 <label class="text-muted small mb-1">Order Date</label>
52 <h5>
53 <i class="fas fa-calendar me-2"></i>
54 @Model.OrderDate.ToString("dd.MM.yyyy")
55 </h5>
56 </div>
57 </div>
58
59 <div class="row mb-3">
60 <div class="col-md-6">
61 <label class="text-muted small mb-1">Supplier</label>
62 <h5>
63 @if (Model.Supplier != null)
64 {
65 <span>
66 <i class="fas fa-building me-2"></i>
67 @Model.Supplier.Name
68 </span>
69 }
70 else
71 {
72 <span class="text-muted">Not specified</span>
73 }
74 </h5>
75 </div>
76 <div class="col-md-6">
77 <label class="text-muted small mb-1">Warehouse</label>
78 <h5>
79 <i class="fas fa-warehouse me-2"></i>
80 @Model.Warehouse.Name
81 </h5>
82 </div>
83 </div>
84
85 <div class="row">
86 <div class="col-md-6">
87 <label class="text-muted small mb-1">Expected Delivery</label>
88 <h5>
89 <i class="fas fa-truck me-2"></i>
90 @Model.ExpectedDeliveryDate.ToString("dd.MM.yyyy")
91 </h5>
92 </div>
93 <div class="col-md-6">
94 <label class="text-muted small mb-1">Actual Delivery</label>
95 <h5>
96 @if (Model.ActualDeliveryDate != null)
97 {
98 <span class="text-success">
99 <i class="fas fa-check-circle me-2"></i>
100 @Model.ActualDeliveryDate.Value.ToString("dd.MM.yyyy")
101 </span>
102 }
103 else
104 {
105 <span class="text-muted">Not yet received</span>
106 }
107 </h5>
108 </div>
109 </div>
110 </div>
111 </div>
112
113 <div class="card">
114 <div class="card-header">
115 <i class="fas fa-list"></i> Order Items
116 </div>
117 <div class="card-body">
118 <div class="table-responsive">
119 <table class="table table-bordered">
120 <thead class="table-light">
121 <tr>
122 <th>Product</th>
123 <th class="text-center">Order Quantity</th>
124 <th class="text-center">Received Quantity</th>
125 <th class="text-end">Unit Cost</th>
126 <th class="text-end">Total</th>
127 </tr>
128 </thead>
129 <tbody>
130 @foreach (var item in Model.PurchaseOrderItems)
131 {
132 <tr>
133 <td>
134 <strong>@item.Product.Name</strong>
135 <br>
136 <small class="text-muted">SKU: @item.Product.Sku</small>
137 </td>
138 <td class="text-center">
139 <span class="badge bg-primary">@item.Quantity</span>
140 </td>
141 <td class="text-center">
142 @if (item.ReceivedQuantity > 0)
143 {
144 <span class="badge bg-success">@item.ReceivedQuantity</span>
145 }
146 else
147 {
148 <span class="badge bg-secondary">0</span>
149 }
150 </td>
151 <td class="text-end">
152 @item.UnitCost.ToString("N2") MKD
153 </td>
154 <td class="text-end">
155 <strong>@((item.Quantity * item.UnitCost).ToString("N2")) MKD</strong>
156 </td>
157 </tr>
158 }
159 </tbody>
160 <tfoot>
161 <tr class="table-light">
162 <td colspan="4" class="text-end">
163 <strong>TOTAL COST:</strong>
164 </td>
165 <td class="text-end">
166 <h5 class="mb-0 text-primary">
167 <strong>@totalCost.ToString("N2") MKD</strong>
168 </h5>
169 </td>
170 </tr>
171 </tfoot>
172 </table>
173 </div>
174 </div>
175 </div>
176 </div>
177
178 <div class="col-md-4">
179 <div class="card mb-3">
180 <div class="card-header">
181 <i class="fas fa-calculator"></i> Summary
182 </div>
183 <div class="card-body">
184 <div class="d-flex justify-content-between mb-2">
185 <span>Product Types:</span>
186 <strong>@Model.PurchaseOrderItems.Count</strong>
187 </div>
188 <div class="d-flex justify-content-between mb-2">
189 <span>Total Quantity:</span>
190 <strong>@Model.PurchaseOrderItems.Sum(i => i.Quantity)</strong>
191 </div>
192 <div class="d-flex justify-content-between mb-2">
193 <span>Received Quantity:</span>
194 <strong class="text-success">@Model.PurchaseOrderItems.Sum(i => i.ReceivedQuantity)</strong>
195 </div>
196 <hr>
197 <div class="d-flex justify-content-between">
198 <h5>Total Cost:</h5>
199 <h5 class="text-primary">
200 <strong>@totalCost.ToString("N2") MKD</strong>
201 </h5>
202 </div>
203 </div>
204 </div>
205
206 @if (Model.Supplier != null)
207 {
208 <div class="card mb-3">
209 <div class="card-header">
210 <i class="fas fa-building"></i> Supplier Information
211 </div>
212 <div class="card-body">
213 <p class="mb-2">
214 <strong>Company:</strong><br>
215 @Model.Supplier.Name
216 </p>
217 <p class="mb-2">
218 <strong>Contact:</strong><br>
219 @Model.Supplier.ContactPerson
220 </p>
221 <p class="mb-2">
222 <strong>Email:</strong><br>
223 <a href="mailto:@Model.Supplier.Email">@Model.Supplier.Email</a>
224 </p>
225 <p class="mb-2">
226 <strong>Phone:</strong><br>
227 @Model.Supplier.Phone
228 </p>
229 <p class="mb-0">
230 <strong>Address:</strong><br>
231 @Model.Supplier.Address
232 </p>
233 </div>
234 </div>
235 }
236
237 <div class="card">
238 <div class="card-header">
239 <i class="fas fa-tools"></i> Actions
240 </div>
241 <div class="card-body">
242 <div class="d-grid gap-2">
243 @if (Model.Status != "Received")
244 {
245 <form method="post" action="/PurchaseOrder/Receive/@Model.PoId">
246 @Html.AntiForgeryToken()
247 <button type="submit" class="btn btn-success w-100"
248 onclick="return confirm('Are you sure you want to receive this order? Stock will be updated.')">
249 <i class="fas fa-box-check"></i> Receive Order
250 </button>
251 </form>
252 }
253 else
254 {
255 <div class="alert alert-success mb-0">
256 <i class="fas fa-check-circle"></i>
257 Order received and stock updated
258 </div>
259 }
260 <button class="btn btn-primary" onclick="window.print()">
261 <i class="fas fa-print"></i> Print
262 </button>
263 <a href="/PurchaseOrder/Index" class="btn btn-secondary">
264 <i class="fas fa-arrow-left"></i> Back
265 </a>
266 </div>
267 </div>
268 </div>
269
270 @if (Model.Status == "Received")
271 {
272 <div class="card mt-3">
273 <div class="card-header bg-success text-white">
274 <i class="fas fa-info-circle"></i> Delivery Information
275 </div>
276 <div class="card-body">
277 <p class="mb-0">
278 <i class="fas fa-calendar-check me-2"></i>
279 <strong>Received Date:</strong><br>
280 @Model.ActualDeliveryDate.Value.ToString("dd.MM.yyyy HH:mm")
281 </p>
282 </div>
283 </div>
284 }
285 </div>
286</div>
287
288@section Styles {
289 <style>
290 @@media print {
291 .navbar, .breadcrumb, .card:last-child, button, form {
292 display: none !important;
293 }
294
295 .card {
296 border: 1px solid #000 !important;
297 box-shadow: none !important;
298 }
299 }
300 </style>
301}
Note: See TracBrowser for help on using the repository browser.