From c10ba0a484c2978fdabd73c74b9d12d78e1f1718 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=80=9Cnewayliu1=E2=80=9D?= <“newayliu1@gmail.com”>
Date: Fri, 17 Mar 2017 16:28:25 -0400
Subject: [PATCH] Add dispense item feature
Worked NG lab with @lbreguet.
- Add dispense item feature to vendor.
-- created new component of dispense item
-- import balance and item servers
-- update balance if purchase successfully
-- add condition of insufficient purchase
-- return all coins if purchase successfully
- Give purchase message to user
---
db.json | 6 +--
src/app/app.component.html | 2 +
src/app/app.module.ts | 10 ++++-
.../dispense-item/dispense-item.component.css | 0
.../dispense-item.component.html | 1 +
.../dispense-item.component.spec.ts | 25 ++++++++++++
.../dispense-item/dispense-item.component.ts | 39 +++++++++++++++++++
.../insert-coin/insert-coin.component.html | 1 +
src/app/insert-coin/insert-coin.component.ts | 5 +++
src/app/select-item/select-item.component.css | 4 ++
.../select-item/select-item.component.html | 5 +++
.../select-item/select-item.component.spec.ts | 25 ++++++++++++
src/app/select-item/select-item.component.ts | 21 ++++++++++
13 files changed, 139 insertions(+), 5 deletions(-)
create mode 100644 src/app/dispense-item/dispense-item.component.css
create mode 100644 src/app/dispense-item/dispense-item.component.html
create mode 100644 src/app/dispense-item/dispense-item.component.spec.ts
create mode 100644 src/app/dispense-item/dispense-item.component.ts
create mode 100644 src/app/select-item/select-item.component.css
create mode 100644 src/app/select-item/select-item.component.html
create mode 100644 src/app/select-item/select-item.component.spec.ts
create mode 100644 src/app/select-item/select-item.component.ts
diff --git a/db.json b/db.json
index baf7af9..2ca2470 100644
--- a/db.json
+++ b/db.json
@@ -4,19 +4,19 @@
"id": 1,
"name": "Sprite",
"cost": 0.5,
- "remaining": 10
+ "remaining": -2
},
{
"id": 2,
"name": "Coke",
"cost": 0.5,
- "remaining": 10
+ "remaining": 5
},
{
"id": 3,
"name": "Dr. Pepper",
"cost": 0.75,
- "remaining": 10
+ "remaining": 9
},
{
"id": 4,
diff --git a/src/app/app.component.html b/src/app/app.component.html
index 20f9499..a4fee6a 100644
--- a/src/app/app.component.html
+++ b/src/app/app.component.html
@@ -2,3 +2,5 @@
{{title}}
+
+
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index b290358..d9f46f0 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -8,11 +8,15 @@ import { InsertCoinComponent } from './insert-coin/insert-coin.component';
import { ItemService } from './item/item.service';
import { BalanceService } from './balance/balance.service';
+import { SelectItemComponent } from './select-item/select-item.component';
+import { DispenseItemComponent } from './dispense-item/dispense-item.component';
@NgModule({
declarations: [
AppComponent,
- InsertCoinComponent
+ InsertCoinComponent,
+ SelectItemComponent,
+ DispenseItemComponent
],
imports: [
BrowserModule,
@@ -25,4 +29,6 @@ import { BalanceService } from './balance/balance.service';
],
bootstrap: [AppComponent]
})
-export class AppModule { }
+export class AppModule {
+
+}
diff --git a/src/app/dispense-item/dispense-item.component.css b/src/app/dispense-item/dispense-item.component.css
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/dispense-item/dispense-item.component.html b/src/app/dispense-item/dispense-item.component.html
new file mode 100644
index 0000000..b6f98ef
--- /dev/null
+++ b/src/app/dispense-item/dispense-item.component.html
@@ -0,0 +1 @@
+
diff --git a/src/app/dispense-item/dispense-item.component.spec.ts b/src/app/dispense-item/dispense-item.component.spec.ts
new file mode 100644
index 0000000..e3d2ca1
--- /dev/null
+++ b/src/app/dispense-item/dispense-item.component.spec.ts
@@ -0,0 +1,25 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { DispenseItemComponent } from './dispense-item.component';
+
+describe('DispenseItemComponent', () => {
+ let component: DispenseItemComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ DispenseItemComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(DispenseItemComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/dispense-item/dispense-item.component.ts b/src/app/dispense-item/dispense-item.component.ts
new file mode 100644
index 0000000..5f48d38
--- /dev/null
+++ b/src/app/dispense-item/dispense-item.component.ts
@@ -0,0 +1,39 @@
+import { Component, OnInit } from '@angular/core';
+import { ItemService } from '../item/item.service';
+import { BalanceService } from '../balance/balance.service';
+
+@Component({
+ selector: 'app-dispense-item',
+ templateUrl: './dispense-item.component.html',
+ styleUrls: ['./dispense-item.component.css']
+})
+export class DispenseItemComponent implements OnInit {
+ public items;
+ coinBalance = 0;
+ public selectedItem;
+ constructor(public itemService: ItemService, public balanceService: BalanceService) { }
+
+ ngOnInit() {
+ this.itemService.onItemsRetrieved((items) => this.items = items);
+ this.balanceService.onBalanceUpdated((balance) => {
+ this.coinBalance = balance;
+ });
+ }
+
+ onDispenseItem() {
+ this.selectedItem = this.itemService.getSelectedItem();
+ if (this.coinBalance >= this.selectedItem.cost && this.itemService.hasRemaining()) {
+ this.itemService.dispenseItem((item) => {
+ this.balanceService.deductBalance(item.cost);
+ this.balanceService.setBalance(0);
+ alert('Thank you for purchase!! Coins returned!');
+ });
+ } else if (!this.itemService.hasRemaining()) {
+ alert('SOLD OUT!!!');
+ }
+ else {
+ alert('Insufficient Balance!!!');
+ }
+
+ }
+}
diff --git a/src/app/insert-coin/insert-coin.component.html b/src/app/insert-coin/insert-coin.component.html
index 0513897..afc196e 100644
--- a/src/app/insert-coin/insert-coin.component.html
+++ b/src/app/insert-coin/insert-coin.component.html
@@ -2,3 +2,4 @@
+
diff --git a/src/app/insert-coin/insert-coin.component.ts b/src/app/insert-coin/insert-coin.component.ts
index 7c16031..29f68f0 100644
--- a/src/app/insert-coin/insert-coin.component.ts
+++ b/src/app/insert-coin/insert-coin.component.ts
@@ -21,4 +21,9 @@ export class InsertCoinComponent implements OnInit {
this.balanceService.addBalance(amount);
}
+ returnCoins() {
+ this.balanceService.setBalance(0);
+ alert('Coins returned!');
+ }
+
}
diff --git a/src/app/select-item/select-item.component.css b/src/app/select-item/select-item.component.css
new file mode 100644
index 0000000..2952c23
--- /dev/null
+++ b/src/app/select-item/select-item.component.css
@@ -0,0 +1,4 @@
+li {
+ color: white;
+ list-style-type: none;
+}
diff --git a/src/app/select-item/select-item.component.html b/src/app/select-item/select-item.component.html
new file mode 100644
index 0000000..dfd31bf
--- /dev/null
+++ b/src/app/select-item/select-item.component.html
@@ -0,0 +1,5 @@
+
+
+
+ {{item.name}}, {{item.cost}}
+
diff --git a/src/app/select-item/select-item.component.spec.ts b/src/app/select-item/select-item.component.spec.ts
new file mode 100644
index 0000000..217a5ae
--- /dev/null
+++ b/src/app/select-item/select-item.component.spec.ts
@@ -0,0 +1,25 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { SelectItemComponent } from './select-item.component';
+
+describe('SelectItemComponent', () => {
+ let component: SelectItemComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ SelectItemComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(SelectItemComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/select-item/select-item.component.ts b/src/app/select-item/select-item.component.ts
new file mode 100644
index 0000000..4e504c8
--- /dev/null
+++ b/src/app/select-item/select-item.component.ts
@@ -0,0 +1,21 @@
+import { Component, OnInit } from '@angular/core';
+import { ItemService } from '../item/item.service';
+
+@Component({
+ selector: 'app-select-item',
+ templateUrl: './select-item.component.html',
+ styleUrls: ['./select-item.component.css']
+})
+export class SelectItemComponent implements OnInit {
+ public items;
+ public selectedItem;
+ constructor(public itemService: ItemService) { }
+
+ ngOnInit() {
+ this.itemService.onItemsRetrieved((items) => this.items = items)
+ }
+
+ onItemSelected(item) {
+ this.itemService.setSelectedItem(item);
+ }
+}