Skip to content

Commit 4fa0a49

Browse files
author
Dhyan
committed
till video 171
1 parent e4faa8c commit 4fa0a49

File tree

19 files changed

+1639
-37
lines changed

19 files changed

+1639
-37
lines changed

Bulky.DataAccess/Migrations/20230825090545_someCorrectionInModel.Designer.cs

Lines changed: 763 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
using Microsoft.EntityFrameworkCore.Migrations;
2+
3+
#nullable disable
4+
5+
namespace BulkyWeb.Migrations
6+
{
7+
/// <inheritdoc />
8+
public partial class someCorrectionInModel : Migration
9+
{
10+
/// <inheritdoc />
11+
protected override void Up(MigrationBuilder migrationBuilder)
12+
{
13+
migrationBuilder.AddColumn<string>(
14+
name: "Carrier",
15+
table: "orderHeaders",
16+
type: "nvarchar(max)",
17+
nullable: true);
18+
}
19+
20+
/// <inheritdoc />
21+
protected override void Down(MigrationBuilder migrationBuilder)
22+
{
23+
migrationBuilder.DropColumn(
24+
name: "Carrier",
25+
table: "orderHeaders");
26+
}
27+
}
28+
}

Bulky.DataAccess/Migrations/ApplicationDbContextModelSnapshot.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,9 @@ protected override void BuildModel(ModelBuilder modelBuilder)
132132
.IsRequired()
133133
.HasColumnType("nvarchar(450)");
134134

135+
b.Property<string>("Carrier")
136+
.HasColumnType("nvarchar(max)");
137+
135138
b.Property<string>("City")
136139
.IsRequired()
137140
.HasColumnType("nvarchar(max)");

Bulky.DataAccess/Repository/IRepositoy/IRepository.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@ public interface IRepository<T> where T : class
1414
void Add(T item);
1515

1616
void Remove(T item);
17-
void RemoveRange(T item);
17+
void RemoveRange(List<T> item);
1818
}
1919
}

Bulky.DataAccess/Repository/Repository.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public void Remove(T item)
7272
dbSet.Remove(item);
7373
}
7474

75-
public void RemoveRange(T item)
75+
public void RemoveRange(List<T> item)
7676
{
7777
dbSet.RemoveRange(item);
7878
}

Bulky.Model/Models/OrderHeader.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public class OrderHeader
2626
public string? OrderStatus { get; set; }
2727
public string? PaymentStatus { get; set; }
2828
public string? TrakingNumber { get; set;}
29-
public string? Carrier { get;}
29+
public string? Carrier { get; set; }
3030

3131

3232
public DateTime PaymentDate { get; set; }

Bulky.Model/ViewModels/OrderVM.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using Bulky.Model.Models;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Text;
6+
using System.Threading.Tasks;
7+
8+
namespace Bulky.Model.ViewModels
9+
{
10+
public class OrderVM
11+
{
12+
public OrderHeader orderHeader { get; set; }
13+
public IEnumerable<OrderDetail> orderDetails { get; set; }
14+
}
15+
}

Bulky.Utility/SD.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,7 @@ public static class SD
2525
public const string PaymentStatusApproved = "Approved";
2626
public const string PaymentStatusDelayedPayment = "ApprovedForDelayedPayment";
2727
public const string PaymentStatusRejected = "Rejected";
28+
29+
public const string SessionCart = "SessionShoppingCart";
2830
}
2931
}
Lines changed: 255 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,255 @@
1+
using Bulky.DataAccess.Repository;
2+
using Bulky.DataAccess.Repository.IRepositoy;
3+
using Bulky.Model.Models;
4+
using Bulky.Model.ViewModels;
5+
using Bulky.Utility;
6+
using Microsoft.AspNetCore.Authorization;
7+
using Microsoft.AspNetCore.Mvc;
8+
using Stripe;
9+
using Stripe.Checkout;
10+
using System.Diagnostics;
11+
using System.Security.Claims;
12+
13+
namespace BulkyWeb.Areas.Admin.Controllers
14+
{
15+
[Area(nameof(Admin))]
16+
[Authorize]
17+
public class OrderController : Controller
18+
{
19+
private readonly IUnitOfWork _unitOfWork;
20+
[BindProperty]
21+
public OrderVM OrderVM { get; set; }
22+
23+
public OrderController(IUnitOfWork unitOfWork)
24+
{
25+
_unitOfWork = unitOfWork;
26+
}
27+
28+
public IActionResult Index()
29+
{
30+
return View();
31+
}
32+
33+
public IActionResult Details(int orderId)
34+
{
35+
OrderVM = new OrderVM
36+
{
37+
orderHeader = _unitOfWork.OrderHeaderRepository.Get(u => u.Id == orderId, includeProperties: "ApplicationUser"),
38+
orderDetails = _unitOfWork.OrderDetailRepository.GetAll(u => u.OrderHeaderId == orderId, includeProperties:"Product")
39+
};
40+
41+
return View(OrderVM);
42+
}
43+
44+
[HttpPost]
45+
[Authorize(Roles = SD.Role_Admin + " , "+ SD.Role_Employee)]
46+
public IActionResult UpdateOrderDetail()
47+
{
48+
OrderHeader orderHeaderFromDb = _unitOfWork.OrderHeaderRepository.Get(u => u.Id == OrderVM.orderHeader.Id);
49+
orderHeaderFromDb.Name = OrderVM.orderHeader.Name;
50+
orderHeaderFromDb.PhoneNumber = OrderVM.orderHeader.PhoneNumber;
51+
orderHeaderFromDb.StreetAddress = OrderVM.orderHeader.StreetAddress;
52+
orderHeaderFromDb.City = OrderVM.orderHeader.City;
53+
orderHeaderFromDb.State = OrderVM.orderHeader.State;
54+
orderHeaderFromDb.PostalCode = OrderVM.orderHeader.PostalCode;
55+
if (!string.IsNullOrEmpty(OrderVM.orderHeader.TrakingNumber))
56+
{
57+
orderHeaderFromDb.TrakingNumber = OrderVM.orderHeader.TrakingNumber;
58+
}
59+
if (!string.IsNullOrEmpty(OrderVM.orderHeader.Carrier))
60+
{
61+
orderHeaderFromDb.Carrier = OrderVM.orderHeader.Carrier;
62+
}
63+
_unitOfWork.OrderHeaderRepository.Update(orderHeaderFromDb);
64+
_unitOfWork.Save();
65+
66+
TempData["Success"] = "Order detail updated successfully";
67+
68+
return RedirectToAction(nameof(Details), new {orderId = OrderVM.orderHeader.Id});
69+
}
70+
71+
72+
[HttpPost]
73+
[Authorize(Roles = SD.Role_Admin + " , " + SD.Role_Employee)]
74+
public IActionResult StartProcessing()
75+
{
76+
_unitOfWork.OrderHeaderRepository.UpdateStatus(OrderVM.orderHeader.Id, SD.StatusInProcess);
77+
_unitOfWork.Save();
78+
79+
TempData["Success"] = "Order status updated successfully";
80+
81+
return RedirectToAction(nameof(Details), new { orderId = OrderVM.orderHeader.Id });
82+
}
83+
84+
85+
public IActionResult ShipOrder()
86+
{
87+
OrderHeader orderHeaderFromDb = _unitOfWork.OrderHeaderRepository.Get(u => u.Id == OrderVM.orderHeader.Id);
88+
orderHeaderFromDb.TrakingNumber = OrderVM.orderHeader.TrakingNumber;
89+
orderHeaderFromDb.Carrier = OrderVM.orderHeader.Carrier;
90+
orderHeaderFromDb.OrderStatus = SD.StatusShipped;
91+
orderHeaderFromDb.ShippingDate = DateTime.Now;
92+
if(orderHeaderFromDb.PaymentStatus == SD.PaymentStatusDelayedPayment)
93+
{
94+
orderHeaderFromDb.PaymentDueDate = DateTime.Now.AddDays(30);
95+
}
96+
97+
_unitOfWork.OrderHeaderRepository.Update(orderHeaderFromDb);
98+
_unitOfWork.OrderHeaderRepository.UpdateStatus(OrderVM.orderHeader.Id, SD.StatusShipped);
99+
_unitOfWork.Save();
100+
101+
TempData["Success"] = "Order status updated successfully";
102+
103+
return RedirectToAction(nameof(Details), new { orderId = OrderVM.orderHeader.Id });
104+
}
105+
106+
public IActionResult CancelOrder()
107+
{
108+
OrderHeader orderHeader = _unitOfWork.OrderHeaderRepository.Get(u => u.Id == OrderVM.orderHeader.Id);
109+
if (orderHeader.PaymentStatus == SD.PaymentStatusApproved)
110+
{
111+
var options = new RefundCreateOptions
112+
{
113+
Reason = RefundReasons.RequestedByCustomer,
114+
PaymentIntent = orderHeader.PaymentIntentId
115+
};
116+
117+
var service = new RefundService();
118+
Refund refund = service.Create(options);
119+
120+
_unitOfWork.OrderHeaderRepository.UpdateStatus(OrderVM.orderHeader.Id, SD.StatusCancelled);
121+
}
122+
else
123+
{
124+
_unitOfWork.OrderHeaderRepository.UpdateStatus(OrderVM.orderHeader.Id, SD.StatusCancelled);
125+
}
126+
_unitOfWork.Save();
127+
128+
TempData["Success"] = "Order canceled updated successfully";
129+
130+
return RedirectToAction(nameof(Details), new { orderId = OrderVM.orderHeader.Id });
131+
}
132+
133+
134+
[ActionName(nameof(Details))]
135+
[HttpPost]
136+
public IActionResult Details_Pay_now()
137+
{
138+
OrderVM.orderHeader = _unitOfWork.OrderHeaderRepository.Get(u=> u.Id == OrderVM.orderHeader.Id, includeProperties:"ApplicationUser");
139+
OrderVM.orderDetails = _unitOfWork.OrderDetailRepository.GetAll(u => u.OrderHeaderId == OrderVM.orderHeader.Id, includeProperties : "Product");
140+
141+
if(OrderVM.orderHeader.PaymentStatus == SD.PaymentStatusDelayedPayment)
142+
{
143+
//add strip logic
144+
var domain = "https://localhost:7067/";
145+
var options = new SessionCreateOptions
146+
{
147+
SuccessUrl = domain + $"Admin/Order/OrderConformation?orderId={OrderVM.orderHeader.Id}",
148+
CancelUrl = domain + $"Admin/Order/Details?orderId={OrderVM.orderHeader.Id}",
149+
LineItems = new List<SessionLineItemOptions>(),
150+
Mode = "payment",
151+
};
152+
153+
foreach (OrderDetail detail in OrderVM.orderDetails)
154+
{
155+
SessionLineItemOptions sessionLineItem = new SessionLineItemOptions
156+
{
157+
PriceData = new SessionLineItemPriceDataOptions
158+
{
159+
UnitAmount = (long)(detail.Price * 100),
160+
Currency = "INR",
161+
ProductData = new SessionLineItemPriceDataProductDataOptions
162+
{
163+
Name = detail.Product.Title
164+
},
165+
},
166+
Quantity = detail.Count
167+
};
168+
169+
options.LineItems.Add(sessionLineItem);
170+
}
171+
172+
var service = new SessionService();
173+
Session session = service.Create(options);
174+
_unitOfWork.OrderHeaderRepository.UpdateStripePaymentId(OrderVM.orderHeader.Id, session.Id, session.PaymentIntentId);
175+
_unitOfWork.Save();
176+
Response.Headers.Add("Location", session.Url);
177+
return new StatusCodeResult(303);
178+
}
179+
180+
return View();
181+
}
182+
183+
public IActionResult OrderConformation(int orderId)
184+
{
185+
OrderHeader orderHeader = _unitOfWork.OrderHeaderRepository.Get(u=>u.Id == orderId);
186+
187+
var service = new SessionService();
188+
Session session = service.Get(orderHeader.SessionId);
189+
190+
if (session.PaymentStatus.ToLower() == "paid")
191+
{
192+
_unitOfWork.OrderHeaderRepository.UpdateStatus(orderHeader.Id, orderHeader.OrderStatus, SD.PaymentStatusApproved);
193+
_unitOfWork.OrderHeaderRepository.UpdateStripePaymentId(orderHeader.Id, orderHeader.SessionId, session.PaymentIntentId);
194+
_unitOfWork.Save();
195+
}
196+
197+
198+
199+
List<ShoppingCart> shoppingCarts = _unitOfWork.ShoppingCartRepository.GetAll(u => u.ApplicationUserId == orderHeader.ApplicationUserId).ToList();
200+
_unitOfWork.ShoppingCartRepository.RemoveRange(shoppingCarts);
201+
_unitOfWork.Save();
202+
203+
return View(orderId);
204+
205+
}
206+
207+
#region API CALLS
208+
209+
[HttpGet]
210+
public IActionResult GetAll(string status)
211+
{
212+
IEnumerable<OrderHeader> orderHeaderList;
213+
214+
215+
if (User.IsInRole(SD.Role_Admin) || User.IsInRole(SD.Role_Employee)){
216+
orderHeaderList = _unitOfWork.OrderHeaderRepository.GetAll(includeProperties: "ApplicationUser").ToList();
217+
}
218+
else
219+
{
220+
var claimIdentity = (ClaimsIdentity)User.Identity;
221+
string userId = claimIdentity.FindFirst(ClaimTypes.NameIdentifier).Value;
222+
orderHeaderList = _unitOfWork.OrderHeaderRepository.GetAll(u => u.ApplicationUserId == userId, includeProperties: "ApplicationUser");
223+
}
224+
225+
226+
227+
switch (status)
228+
{
229+
case "pending":
230+
orderHeaderList = orderHeaderList.Where(u => u.PaymentStatus == SD.PaymentStatusDelayedPayment);
231+
break;
232+
233+
case "inprocess":
234+
orderHeaderList = orderHeaderList.Where(u => u.OrderStatus == SD.StatusInProcess);
235+
break;
236+
237+
case "completed":
238+
orderHeaderList = orderHeaderList.Where(u => u.OrderStatus == SD.StatusShipped);
239+
break;
240+
241+
case "approved":
242+
orderHeaderList = orderHeaderList.Where(u => u.OrderStatus == SD.StatusApproved);
243+
break;
244+
245+
default:
246+
break;
247+
}
248+
249+
250+
return Json(new { data = orderHeaderList });
251+
}
252+
253+
}
254+
#endregion
255+
}

0 commit comments

Comments
 (0)