From e88d007c6aac37ba38f6a6ec996af530ec022b52 Mon Sep 17 00:00:00 2001 From: rawan osama Date: Sun, 5 Nov 2023 10:05:19 +0200 Subject: [PATCH] order page --- retail-managment-system/rms-ui/angular.json | 3 + .../src/app/domain/order/models/order.ts | 19 ++- .../src/app/domain/order/models/orderItem.ts | 6 + .../app/domain/order/models/paymentEnum.ts | 5 + .../src/app/domain/order/order.repository.ts | 30 ++++ .../src/app/domain/product/models/product.ts | 2 + .../pages/home-page/home-page.component.html | 2 +- .../pages/home-page/home-page.component.ts | 4 + .../pages/order/order/order.component.html | 156 ++++++++++++++++++ .../pages/order/order/order.component.scss | 12 ++ .../app/pages/order/order/order.component.ts | 114 +++++++++++++ .../rms-ui/src/app/pages/pages.module.ts | 5 +- .../app/pages/product/product.component.html | 19 ++- .../app/pages/product/product.component.scss | 6 +- .../app/pages/product/product.component.ts | 28 +++- .../src/app/shared/service/shared.service.ts | 33 ++++ .../rms-ui/src/assets/i18n/ar.json | 17 +- .../rms-ui/src/assets/i18n/en.json | 17 +- 18 files changed, 462 insertions(+), 16 deletions(-) create mode 100644 retail-managment-system/rms-ui/src/app/domain/order/models/orderItem.ts create mode 100644 retail-managment-system/rms-ui/src/app/domain/order/models/paymentEnum.ts create mode 100644 retail-managment-system/rms-ui/src/app/domain/order/order.repository.ts create mode 100644 retail-managment-system/rms-ui/src/app/pages/order/order/order.component.html create mode 100644 retail-managment-system/rms-ui/src/app/pages/order/order/order.component.scss create mode 100644 retail-managment-system/rms-ui/src/app/pages/order/order/order.component.ts create mode 100644 retail-managment-system/rms-ui/src/app/shared/service/shared.service.ts diff --git a/retail-managment-system/rms-ui/angular.json b/retail-managment-system/rms-ui/angular.json index ac3f5614..237888cf 100644 --- a/retail-managment-system/rms-ui/angular.json +++ b/retail-managment-system/rms-ui/angular.json @@ -1,5 +1,8 @@ { "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "cli": { + "analytics": false + }, "version": 1, "newProjectRoot": "projects", "projects": { diff --git a/retail-managment-system/rms-ui/src/app/domain/order/models/order.ts b/retail-managment-system/rms-ui/src/app/domain/order/models/order.ts index aa1ddb2e..f4e5df51 100644 --- a/retail-managment-system/rms-ui/src/app/domain/order/models/order.ts +++ b/retail-managment-system/rms-ui/src/app/domain/order/models/order.ts @@ -1,12 +1,19 @@ import { Customers } from "../../customers/models/customers"; +import { Employee } from "../../employee/models/employee"; +import { Installment } from "../../installment/models/installment"; +import { orderItem } from "./orderItem"; +import { paymentEnum } from "./paymentEnum"; export interface Order { id: number; - version: number - orderDate: string; - paymentType: number + version: number; + orderDate: Date; + paymentType: paymentEnum; paidAmount: number; - remainingAmount: number - installmentAmount: number - customer : Customers + remainingAmount: number; + installmentAmount?: Installment; + customer : Customers; + totalPrice:number; + orderItems:orderItem; + employee:Employee; } diff --git a/retail-managment-system/rms-ui/src/app/domain/order/models/orderItem.ts b/retail-managment-system/rms-ui/src/app/domain/order/models/orderItem.ts new file mode 100644 index 00000000..22055c60 --- /dev/null +++ b/retail-managment-system/rms-ui/src/app/domain/order/models/orderItem.ts @@ -0,0 +1,6 @@ +export interface orderItem { + id: number; + unitPrice:number; + quantity:number; + product:any; +} diff --git a/retail-managment-system/rms-ui/src/app/domain/order/models/paymentEnum.ts b/retail-managment-system/rms-ui/src/app/domain/order/models/paymentEnum.ts new file mode 100644 index 00000000..15e23235 --- /dev/null +++ b/retail-managment-system/rms-ui/src/app/domain/order/models/paymentEnum.ts @@ -0,0 +1,5 @@ +export enum paymentEnum { + 'CASH'="CASH", + 'INSTALLMENTS'="INSTALLMENTS" + +} diff --git a/retail-managment-system/rms-ui/src/app/domain/order/order.repository.ts b/retail-managment-system/rms-ui/src/app/domain/order/order.repository.ts new file mode 100644 index 00000000..2ac612db --- /dev/null +++ b/retail-managment-system/rms-ui/src/app/domain/order/order.repository.ts @@ -0,0 +1,30 @@ +import { ResourceService } from 'src/app/core/services/resource.service'; +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Order } from './models/order'; + +@Injectable({ + providedIn: 'root', +}) +export class OrderRepository extends ResourceService { + constructor(httpClient: HttpClient) { + super(httpClient); + } + getResourceUrl(): string { + return 'order'; + } + toServerModel(entity: Order): any { + console.log(entity); + return { + id: entity.id, + orderDate: entity.orderDate, + paidAmount: entity.paidAmount, + remainingAmount: entity.remainingAmount, + paymentType:entity.paymentType, + totalPrice: entity.totalPrice, + employee: { id: entity.employee.id }, + customer: { id: entity.customer.id }, + orderItems:entity.orderItems + }; + } +} diff --git a/retail-managment-system/rms-ui/src/app/domain/product/models/product.ts b/retail-managment-system/rms-ui/src/app/domain/product/models/product.ts index 4a562b72..c4068c0d 100644 --- a/retail-managment-system/rms-ui/src/app/domain/product/models/product.ts +++ b/retail-managment-system/rms-ui/src/app/domain/product/models/product.ts @@ -9,4 +9,6 @@ export interface Product { cashPrice: number; quantity: number; productCategoryDto: Category; + orderQuantity:number; + } diff --git a/retail-managment-system/rms-ui/src/app/pages/home-page/home-page.component.html b/retail-managment-system/rms-ui/src/app/pages/home-page/home-page.component.html index 994eda81..f44c72d3 100644 --- a/retail-managment-system/rms-ui/src/app/pages/home-page/home-page.component.html +++ b/retail-managment-system/rms-ui/src/app/pages/home-page/home-page.component.html @@ -2,7 +2,7 @@
-
+
attach_money
diff --git a/retail-managment-system/rms-ui/src/app/pages/home-page/home-page.component.ts b/retail-managment-system/rms-ui/src/app/pages/home-page/home-page.component.ts index 21b34570..c2e11452 100644 --- a/retail-managment-system/rms-ui/src/app/pages/home-page/home-page.component.ts +++ b/retail-managment-system/rms-ui/src/app/pages/home-page/home-page.component.ts @@ -77,6 +77,10 @@ export class HomePageComponent implements OnInit { this.router.navigate(['/customers']); } + openOrder(){ + this.router.navigate(['/order']) + } + openInvestors() { this.router.navigate(['/investor']); } diff --git a/retail-managment-system/rms-ui/src/app/pages/order/order/order.component.html b/retail-managment-system/rms-ui/src/app/pages/order/order/order.component.html new file mode 100644 index 00000000..0e114656 --- /dev/null +++ b/retail-managment-system/rms-ui/src/app/pages/order/order/order.component.html @@ -0,0 +1,156 @@ + +
+
+
+

+ {{ "order.our-orders" | translate }} +

+
+
+ +
+
+
+
+
+
+
{{"order.name"|translate}}{{product.name}}
+
+
{{"order.price"|translate}} {{product.cashPrice}}
+
Quantity: {{product.orderQuantity}}
+ +
+
+
+
+
+
+ +
+
+
+
+

+ {{ "order.add" | translate }} + + {{ "order.order" | translate }} +

+ +
+
+
+
+
+ + {{ "order.order-date" | translate }} + + + + + {{ "order.paid-amount" | translate }} + + + + {{ "order.remaining-amount" | translate }} + + + + {{ "order.payment-type" | translate }} + + + {{pay}} + + + + + + + {{ "employee.employee" | translate }} + + + {{ emp.fullName }} + + + + + + + {{ "customrs.customer" | translate }} + + + {{ cust.fullName }} + + + + + + + {{ "order.total-price" | translate }} + + + + {{ "installments.installment" | translate }} + + + +
+
+
+
+ + +
+ +
+
+
+
+ + diff --git a/retail-managment-system/rms-ui/src/app/pages/order/order/order.component.scss b/retail-managment-system/rms-ui/src/app/pages/order/order/order.component.scss new file mode 100644 index 00000000..e3fd1e8f --- /dev/null +++ b/retail-managment-system/rms-ui/src/app/pages/order/order/order.component.scss @@ -0,0 +1,12 @@ +.add { + background-color: #002d40; + color: white; + width: 80px; + height: 40px; +} +.add:hover { + background-color: transparent; + color: #002d40; + +} + diff --git a/retail-managment-system/rms-ui/src/app/pages/order/order/order.component.ts b/retail-managment-system/rms-ui/src/app/pages/order/order/order.component.ts new file mode 100644 index 00000000..b0fcf376 --- /dev/null +++ b/retail-managment-system/rms-ui/src/app/pages/order/order/order.component.ts @@ -0,0 +1,114 @@ +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { TranslateService } from '@ngx-translate/core'; +import { CustomersRepository } from 'src/app/domain/customers/customers.repository'; +import { Customers } from 'src/app/domain/customers/models/customers'; +import { EmployeeRepository } from 'src/app/domain/employee/employee.repository'; +import { Employee } from 'src/app/domain/employee/models/employee'; +import { Order } from 'src/app/domain/order/models/order'; +import { orderItem } from 'src/app/domain/order/models/orderItem'; +import { paymentEnum } from 'src/app/domain/order/models/paymentEnum'; +import { OrderRepository } from 'src/app/domain/order/order.repository'; +import { Product } from 'src/app/domain/product/models/product'; +import { SharedService } from 'src/app/shared/service/shared.service'; +@Component({ + selector: 'app-order', + templateUrl: './order.component.html', + styleUrls: ['./order.component.scss'] +}) +export class OrderComponent implements OnInit { + orderProducts!:Product[]; + orderForm!:FormGroup; + prroducts!:Product[]; + payment=paymentEnum; + paymentType:String[] = []; + showInstallment:boolean=false; + orderQuantity!:number; + orderDto:Order[]=[]; + orderItem:orderItem[]=[]; + employees: Employee[] = []; + customers:Customers[]=[]; + constructor(private customersRepository:CustomersRepository ,private employeeRepository:EmployeeRepository,private orderRepository:OrderRepository,private sharedService:SharedService,private build: FormBuilder,private translate: TranslateService) { + + } + + ngOnInit(): void { + this.addOrderForm(); + this.getProduct(); + this.getPaymentType(); + this.getOrderQuantity(); + this.getAllEmployees(); + this.getAllCustomers(); + + } + + getOrderQuantity(){ + this.orderQuantity = this.sharedService.getQuantity(); + } + + getPaymentType(){ + this.paymentType = Object.keys(this.payment); + } + showInstallmentField(data){ + if(data=='INSTALLMENTS'){ + this.showInstallment=true; + } + else if(data=='CASH'){ + this.showInstallment=false; + + } + + } + + getProduct(){ + this.sharedService.getProducts().subscribe(products => { + this.orderProducts=products; + this.orderProducts.map(product=>{ + this.orderItem.push({ + id:product.id, + unitPrice:product.cashPrice, + quantity:product.orderQuantity, + product:product.id + }); + }); + + }); + } + + addOrderForm() { + this.orderForm = this.build.group({ + orderDate: ['',[Validators.required]], + paidAmount: ['',[Validators.required]], + remainingAmount: ['',[Validators.required]], + totalPrice: ['',[Validators.required]], + paymentType: ['',[Validators.required]], + employee:{ + id:[''] + }, + customer:{ + id:[''] + }, + installments:[''] + }); + } + +getAllEmployees(): void { + this.employeeRepository.getList().subscribe((result) => { + this.employees = result.data; + }); +} + +getAllCustomers(): void { + this.customersRepository.getList().subscribe((result:any) => { + this.customers = result; + }); +} + addOrder() { + this.orderForm.markAllAsTouched(); + let orderData = this.orderForm.value; + orderData.orderItem = this.orderItem; + if (this.orderForm.valid){ + this.orderRepository.add(orderData).subscribe(); + } + } +} diff --git a/retail-managment-system/rms-ui/src/app/pages/pages.module.ts b/retail-managment-system/rms-ui/src/app/pages/pages.module.ts index 673c9367..151bfd65 100644 --- a/retail-managment-system/rms-ui/src/app/pages/pages.module.ts +++ b/retail-managment-system/rms-ui/src/app/pages/pages.module.ts @@ -23,6 +23,7 @@ import { UserComponent } from './user/user.component'; import { RoleAssignComponent } from './user/role-assign/role-assign/role-assign.component'; import { RoleComponent } from './role/role.component'; import { StoreComponent } from './store/store.component'; +import { OrderComponent } from './order/order/order.component'; const routes: Routes = [ @@ -40,7 +41,8 @@ const routes: Routes = [ { path:'user', component:UserComponent }, { path:'role', component:RoleComponent }, { path:'user/:id', component : RoleAssignComponent }, - { path: 'store', component: StoreComponent} + { path: 'store', component: StoreComponent}, + {path:'order',component:OrderComponent} ]; @NgModule({ @@ -62,6 +64,7 @@ const routes: Routes = [ RoleAssignComponent, RoleComponent, StoreComponent, + OrderComponent, ], imports: [RouterModule.forChild(routes), SharedModule, TranslateModule,AuthModule,NgxPrintModule], diff --git a/retail-managment-system/rms-ui/src/app/pages/product/product.component.html b/retail-managment-system/rms-ui/src/app/pages/product/product.component.html index 1b7e99de..02e99eb6 100644 --- a/retail-managment-system/rms-ui/src/app/pages/product/product.component.html +++ b/retail-managment-system/rms-ui/src/app/pages/product/product.component.html @@ -97,6 +97,19 @@

+ + {{ "product.add" | translate }} + + + + + + + + @@ -104,7 +117,7 @@

- + ? ("update" | translate) : ("add" | translate) }} - + {{ "product.product" | translate }}

- + { this.allProducts = result.data @@ -63,7 +87,7 @@ export class ProductComponent implements OnInit { { duration: 2000, } - ); + ); } }) } diff --git a/retail-managment-system/rms-ui/src/app/shared/service/shared.service.ts b/retail-managment-system/rms-ui/src/app/shared/service/shared.service.ts new file mode 100644 index 00000000..6d73aba3 --- /dev/null +++ b/retail-managment-system/rms-ui/src/app/shared/service/shared.service.ts @@ -0,0 +1,33 @@ +import { Injectable } from '@angular/core'; +import { BehaviorSubject, Observable } from 'rxjs'; +import { Product } from 'src/app/domain/product/models/product'; +@Injectable({ + providedIn: 'root' +}) +export class SharedService { +private availableProduct = new BehaviorSubject([]); +private orderQuantity :number = 1; + constructor() { } + + loadProducts(product:Product[]){ + this.availableProduct.next(product); + + } + getProducts():Observable{ + return this.availableProduct.asObservable(); + } + getQuantity(): number { + return this.orderQuantity; + } + + setQuantity(newQuantity: number): void { + if(newQuantity==null){ + this.orderQuantity =1; + } + else{ + this.orderQuantity = newQuantity; + + } + } + +} diff --git a/retail-managment-system/rms-ui/src/assets/i18n/ar.json b/retail-managment-system/rms-ui/src/assets/i18n/ar.json index aa157445..5182d283 100644 --- a/retail-managment-system/rms-ui/src/assets/i18n/ar.json +++ b/retail-managment-system/rms-ui/src/assets/i18n/ar.json @@ -83,7 +83,8 @@ "delete-successfuly": "تم مسح المنتج بنجاح", "no-products":" لا يوجد منتجات تحت هذه الفئة", "close": "اغلاق", - "choose-by-category":"الفئة" + "choose-by-category":"الفئة", + "add":"اضافة" }, "category": { "category": "الفئات", @@ -327,5 +328,19 @@ "close": "اغلاق", "choose-employee":"اختار اسم الموظف", "search-stores":"البحث عن مخزن" + }, + "order":{ + "our-orders":"الطلبات", + "add":"اضف", + "order":"الطلب", + "id":"رقم الطلب", + "version":"الاصدار", + "order-date":"تاريخ الطلب", + "paid-amount":"القيمة المدفوعة", + "remaining-amount":"القيمة المتبقية", + "total-price":"المبلغ كامل", + "payment-type":"طريقة الدفع", + "name":":الاسم", + "price":":السعر " } } diff --git a/retail-managment-system/rms-ui/src/assets/i18n/en.json b/retail-managment-system/rms-ui/src/assets/i18n/en.json index bf47cb22..4af5a9dc 100644 --- a/retail-managment-system/rms-ui/src/assets/i18n/en.json +++ b/retail-managment-system/rms-ui/src/assets/i18n/en.json @@ -85,7 +85,8 @@ "delete-successfuly": "Product Deleted Successfuly!", "no-products":"No products found in this category!", "close": "close", - "choose-by-category":"Category" + "choose-by-category":"Category", + "add":"Add" }, "category": { "category": "Category", @@ -328,5 +329,19 @@ "close": "Close!", "choose-employee":"Choose Employee", "search-stores":"Search for store" + }, + "order":{ + "our-orders":"Our Orders", + "add":"Add", + "order":"Order", + "id":"Id", + "version":"Version", + "order-date":"Order Date", + "paid-amount":"Paid Amount", + "remaining-amount":"Remaining Amount", + "total-price":"Total Price", + "payment-type":"Payment Type", + "name":"Name: ", + "price":"Price: " } }