diff --git a/angular/src/app/components/footer/footer.component.scss b/angular/src/app/components/footer/footer.component.scss
index 25bf608..aeb84c5 100644
--- a/angular/src/app/components/footer/footer.component.scss
+++ b/angular/src/app/components/footer/footer.component.scss
@@ -5,8 +5,8 @@
gap: 20px;
padding-bottom: 100px;
h3 {
- margin: 0;
- font-family: Montserrat;
+ margin: 0;
+ font-family: Montserrat;
font-style: normal;
font-weight: 400;
font-size: 15px;
diff --git a/angular/src/app/components/invite-friends/invite-friends.component.scss b/angular/src/app/components/invite-friends/invite-friends.component.scss
index f54e659..1b1ffc4 100644
--- a/angular/src/app/components/invite-friends/invite-friends.component.scss
+++ b/angular/src/app/components/invite-friends/invite-friends.component.scss
@@ -1,7 +1,7 @@
:host {
- padding: 16px;
- h2 {
- font-family: Montserrat;
+ padding: 16px;
+ h2 {
+ font-family: Montserrat;
font-style: normal;
font-weight: 700;
font-size: 17px;
diff --git a/angular/src/app/components/last-order/last-order.component.scss b/angular/src/app/components/last-order/last-order.component.scss
index da9d2a2..de73367 100644
--- a/angular/src/app/components/last-order/last-order.component.scss
+++ b/angular/src/app/components/last-order/last-order.component.scss
@@ -2,7 +2,7 @@
padding: 24px 16px 0px;
& > h2 {
- font-family: Montserrat;
+ font-family: Montserrat;
font-style: normal;
font-weight: 700;
font-size: 15px;
diff --git a/angular/src/app/presentation-options/default-option/components/footer/footer.component.scss b/angular/src/app/presentation-options/default-option/components/footer/footer.component.scss
index 04b6b18..aeb84c5 100644
--- a/angular/src/app/presentation-options/default-option/components/footer/footer.component.scss
+++ b/angular/src/app/presentation-options/default-option/components/footer/footer.component.scss
@@ -6,6 +6,7 @@
padding-bottom: 100px;
h3 {
margin: 0;
+ font-family: Montserrat;
font-style: normal;
font-weight: 400;
font-size: 15px;
diff --git a/angular/src/app/presentation-options/default-option/components/invite-friends/invite-friends.component.scss b/angular/src/app/presentation-options/default-option/components/invite-friends/invite-friends.component.scss
index 0ff76c3..1b1ffc4 100644
--- a/angular/src/app/presentation-options/default-option/components/invite-friends/invite-friends.component.scss
+++ b/angular/src/app/presentation-options/default-option/components/invite-friends/invite-friends.component.scss
@@ -1,6 +1,7 @@
:host {
- padding: 16px;
+ padding: 16px;
h2 {
+ font-family: Montserrat;
font-style: normal;
font-weight: 700;
font-size: 17px;
diff --git a/angular/src/app/presentation-options/default-option/components/last-order/last-order.component.scss b/angular/src/app/presentation-options/default-option/components/last-order/last-order.component.scss
index 4c5a2c0..de73367 100644
--- a/angular/src/app/presentation-options/default-option/components/last-order/last-order.component.scss
+++ b/angular/src/app/presentation-options/default-option/components/last-order/last-order.component.scss
@@ -1,7 +1,8 @@
:host {
- padding: 24px 16px 56px;
+ padding: 24px 16px 0px;
& > h2 {
+ font-family: Montserrat;
font-style: normal;
font-weight: 700;
font-size: 15px;
diff --git a/angular/src/app/presentation-options/default-option/components/navbar/navbar.component.scss b/angular/src/app/presentation-options/default-option/components/navbar/navbar.component.scss
index dcd7a52..5ab2ef2 100644
--- a/angular/src/app/presentation-options/default-option/components/navbar/navbar.component.scss
+++ b/angular/src/app/presentation-options/default-option/components/navbar/navbar.component.scss
@@ -24,7 +24,7 @@
visibility: hidden;
}
.title {
- font-family: "Gotham Pro", sans-serif;
+ font-family: "Montserrat", sans-serif;
font-weight: 700;
font-size: 17px;
line-height: 22px;
diff --git a/angular/src/app/presentation-options/default-option/default-option-routing.module.ts b/angular/src/app/presentation-options/default-option/default-option-routing.module.ts
index 27b517c..c5fab24 100644
--- a/angular/src/app/presentation-options/default-option/default-option-routing.module.ts
+++ b/angular/src/app/presentation-options/default-option/default-option-routing.module.ts
@@ -4,6 +4,7 @@ import { IndexComponent } from './components/index/index.component';
import { GuestCardComponent } from './pages/guest-card/guest-card.component';
import { AuthGuard } from 'src/app/guards/auth-guard.guard';
import { LoginComponent } from './pages/login/login.component';
+import { LoyalityProgramComponent } from './pages/loyality-program/loyality-program.component';
const routes: Routes = [
{
@@ -15,6 +16,10 @@ const routes: Routes = [
path: 'login',
component: LoginComponent
},
+ {
+ path: 'loyality-program',
+ component: LoyalityProgramComponent,
+ }
];
@NgModule({
diff --git a/angular/src/app/presentation-options/default-option/default-option.module.ts b/angular/src/app/presentation-options/default-option/default-option.module.ts
index d0541ee..a6713cb 100644
--- a/angular/src/app/presentation-options/default-option/default-option.module.ts
+++ b/angular/src/app/presentation-options/default-option/default-option.module.ts
@@ -18,6 +18,7 @@ import { MatFormFieldModule } from '@angular/material/form-field';
import { NgxMatIntlTelInputComponent } from 'ngx-mat-intl-tel-input';
import { MatInputModule } from '@angular/material/input';
import { DirectivesModule } from 'src/app/directives/directives.module';
+import { LoyalityProgramComponent } from './pages/loyality-program/loyality-program.component';
@NgModule({
declarations: [
@@ -29,7 +30,8 @@ import { DirectivesModule } from 'src/app/directives/directives.module';
AccordionComponent,
LastOrderComponent,
InviteFriendsComponent,
- LoginComponent
+ LoginComponent,
+ LoyalityProgramComponent
],
imports: [
CommonModule,
diff --git a/angular/src/app/presentation-options/default-option/pages/guest-card/guest-card.component.html b/angular/src/app/presentation-options/default-option/pages/guest-card/guest-card.component.html
index e2ccabe..fee486c 100644
--- a/angular/src/app/presentation-options/default-option/pages/guest-card/guest-card.component.html
+++ b/angular/src/app/presentation-options/default-option/pages/guest-card/guest-card.component.html
@@ -1,197 +1,104 @@
-
-
-
-
-
-
-
-
-
-
- Текущий баланс бонусов:
-
- {{ loyaltyProgram.getBalanceAmount(customerInfo?.walletBalances) }}
- бонусов
+
+
+
+
Уровень {{ loyaltyProgram.currentLvl }}
+
Кэшбек {{ loyaltyProgram.currentLvlPeriod.percent }}%
+
+
+ {{ loyaltyProgram.getBalanceAmount(customerInfo?.walletBalances) }}
+ бонусов
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Осталось купить на сумму
+ {{
+ loyaltyProgram.currentLvlPeriod.end -
+ (loyaltyProgram.purchaseData.currentAmount || 0) +
+ 1
+ }}
+ рублей, тогда кэшбек будет
+ {{ loyaltyProgram.getNextLevel().percent }}%
+ с
+ {{
+ loyaltyProgram.purchaseData.currentPeriod[1]
+ .locale("ru")
+ .format("D MMMM")
+ }}
+
+
+ У Вас последний уровень бонусной программы. Процент начисляемых
+ бонусов:
+ {{ loyaltyProgram.currentLvlPeriod.percent }}%
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Подробнее о правилах
+ Программы лояльности
-
-
-
- Расчет начисления бонусов - 10% от суммы покупок за период с 11.01.2023г.
- по 31.03.2023 г.
-
-
- За период с 11.01.2023г. по 31.03.2023 г. сумма ваших покупок составила
- 3700 руб.
-
- Начисляемый бонус 10% от суммы покупок
-
-
-
- Участник может использовать Бонусы для «оплаты» до 100% стоимости любой
- покупки.
-
-
- Списание Бонусов происходит из расчета 1:1 (один Бонус дает скидку 1
- российский рубль / 1 тенге / 1 белорусский рубль. Скидка, предоставляемая
- Участнику при списании Бонусов, уменьшает цену товаров в заказе в
- соответствии с условиями ПЛ.
-
-
- Для списания Бонусов Участник должен попросить об этом в кофе-баре сети
- «COFFEE LIKE» кассира до момента пробития фискального чека, после чего им
- будет проверена возможность списания Бонусов.
-
-
- Для всех Участников возможно списание без использования мобильного
- приложения.
-
- Полученные Бонусы не подлежат обмену на денежные средства.
-
-
-
- Начисленные на счет бонусы сгорают по прошествии 90 дней с момента
- совершения последней покупки с начислением или списанием бонусов.
-
-
-
- Возврат покупки, за которую бонусы были начислены:
-
- В случае, если бонусов на счету достаточно для списания, бонусы
- списываются в полном ранее начисленном за возвращаемый товар объеме.
-
-
- В случае, если бонусов на счету недостаточно, формируется минусовой
- баланс.
-
-
-
-
- Возврат покупки, которая была оплачена бонусами:
-
- В случае предъявления Участником кассового или товарного чека, сумма
- бонусов, списанная для оплаты возвращаемого товара, зачисляется на счет
- участника.
-
-
- В случае возврата товара с применением оплаты бонусами, клиенту
- возвращается денежная сумма в размере, внесенном Участником в оплату
- товара при покупке, за вычетом суммы, оплаченной бонусами.
-
-
-
-
-
- Сумма ваших покупок за период с
- {{ loyaltyProgram.purchaseData.currentPeriod[0].format("DD.MM.yyyyг.") }} -
- {{ loyaltyProgram.purchaseData.currentAmount }} руб.
-
-
-
-
-
-
- Начисление Бонусных баллов происходит по дифференцированной шкале в
- зависимости от уровня:
-
-
-
-
-
- Уровень {{ index + 1 }}
-
- Сумма покупок за предыдущий период {{ item.start }}-{{ item.end }}
- руб.
-
- Начисляемый бонус {{ item.percent }}% от суммы покупки
-
-
-
-
-
- Уровень {{ index + 1 }}
- Сумма покупок за предыдущий период — от {{ item.start }} руб.
- Начисляемый бонус, в % от суммы покупки - {{ item.percent }}%
-
-
-
-
-
-
-
-
-
- До следующего уровня за период с
- {{ loyaltyProgram.purchaseData.currentPeriod[0].format("DD.MM.yyyyг") }} по
- {{ loyaltyProgram.purchaseData.currentPeriod[1].format("DD.MM.yyyyг") }}
- осталось совершить покупки на {{ currentLvlPeriod.end - (loyaltyProgram.purchaseData.currentAmount || 0) + 1 }} рублей
-
-
-
-
-
- У Вас последний уровень бонусной программы. Процент начисляемых бонусов: {{currentLvlPeriod.percent}}%
-
-
-
-
-
-
-
-
-
- Узнать условия начисления бонусов
-
-
-
-
-
-
-
-
-
-
-
-
Подробнее о правилах
- Программы лояльности
-
+
+
+
+
diff --git a/angular/src/app/presentation-options/default-option/pages/guest-card/guest-card.component.scss b/angular/src/app/presentation-options/default-option/pages/guest-card/guest-card.component.scss
index f3aab9b..8d19b9a 100644
--- a/angular/src/app/presentation-options/default-option/pages/guest-card/guest-card.component.scss
+++ b/angular/src/app/presentation-options/default-option/pages/guest-card/guest-card.component.scss
@@ -3,11 +3,42 @@
display: flex;
flex-direction: column;
align-items: center;
- padding: 8px 0 0;
max-width: 600px;
margin: 0 auto;
+ .top-info {
+ padding: 8px 0 0;
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ background-color: #292929;
+ border-bottom-left-radius: 10px;
+ border-bottom-right-radius: 10px;
+ border: 1px solid #000000;
+ border-top: 1px solid #888888;
+
+ &__level {
+ width: 100%;
+
+ display: flex;
+ align-items: center;
+ justify-content: space-around;
+
+ font-size: 16px;
+ }
+
+ & p {
+ color: #28af49;
+ }
+
+ p.top-info__bonus {
+ font-size: 20px;
+ }
+ }
+
&__qr {
+ margin: 10px;
padding: 10px;
width: fit-content;
background-image: linear-gradient(
@@ -32,21 +63,23 @@
}
&__user-description {
- margin: 18px 0 0;
+ background-color: #292929;
padding: 14px 24px;
- width: 100%;
- text-align: left;
- border-top: 1px solid #fff;
- border-bottom: 1px solid #fff;
- // font-family: "Goldman";
- font-style: normal;
- font-weight: 400;
- font-size: 16px;
- line-height: 19px;
- letter-spacing: -0.5px;
- span {
- color: #f2994a;
+ p {
+ width: 60%;
+ text-align: center;
+ margin: 0 auto;
+ font-style: normal;
+ font-weight: 400;
+ font-size: 16px;
+ line-height: 19px;
+ letter-spacing: -0.5px;
+ }
+
+ .price,
+ .percent {
+ font-weight: bold;
}
}
@@ -54,9 +87,7 @@
margin: 0;
padding: 14px 24px;
width: 100%;
- text-align: left;
- border-bottom: 1px solid #fff;
- // font-family: "Goldman";
+ text-align: center;
font-style: normal;
font-weight: 400;
font-size: 16px;
@@ -70,13 +101,16 @@
}
&__level-info {
- padding: 36px;
+ padding-top: 36px;
+ padding-left: 36px;
+ padding-right: 36px;
display: flex;
flex-direction: column;
align-items: center;
h2 {
font-style: normal;
+ font-family: Montserrat;
font-weight: 700;
font-size: 17px;
line-height: 22px;
@@ -124,7 +158,6 @@
width: 16px;
height: 16px;
border-radius: 100%;
- display: none;
}
&::-ms-thumb {
@@ -149,19 +182,6 @@
transition: background 0.3s ease-in-out;
}
}
-
- & > .show-more {
- margin-top: 42px;
- font-style: normal;
- font-weight: 400;
- font-size: 12px;
- line-height: 16px;
- text-align: center;
- a {
- text-decoration: none;
- color: #28af49;
- }
- }
}
&__download-app {
@@ -178,9 +198,9 @@
&__loyalty-program {
text-align: center;
- color: rgba(255, 255, 255, 0.5);
+ color: #28af49;
font-style: normal;
- font-weight: 400;
+ font-weight: bold;
font-size: 12px;
line-height: 16px;
text-decoration: none;
diff --git a/angular/src/app/presentation-options/default-option/pages/guest-card/guest-card.component.ts b/angular/src/app/presentation-options/default-option/pages/guest-card/guest-card.component.ts
index 6f9da3d..5046144 100644
--- a/angular/src/app/presentation-options/default-option/pages/guest-card/guest-card.component.ts
+++ b/angular/src/app/presentation-options/default-option/pages/guest-card/guest-card.component.ts
@@ -24,8 +24,6 @@ export class GuestCardComponent implements OnInit {
public purchases!: Purchase[];
public lastPurchase!: Purchase;
- public lvlPeriods: lvlPeriod[] = lvlPeriods;
- public currentLvlPeriod!: lvlPeriod;
constructor(
private _bottomSheet: MatBottomSheet,
@@ -55,7 +53,8 @@ export class GuestCardComponent implements OnInit {
this.loyaltyProgram.setCurrentPurchases(this.purchases)
const currentAmount = this.loyaltyProgram.purchaseData.currentAmount || 0
- this.currentLvlPeriod = this.lvlPeriods.find((item) => item.start <= currentAmount && currentAmount <= (item.end || Infinity))!
+ this.loyaltyProgram.setCurrentLvl(currentAmount)
+ // this.currentLvlPeriod = this.lvlPeriods.find((item) => item.start <= currentAmount && currentAmount <= (item.end || Infinity))!
this.loyaltyProgram.purchaseData.$loading = false;
});
},
diff --git a/angular/src/app/presentation-options/default-option/pages/login/login.component.ts b/angular/src/app/presentation-options/default-option/pages/login/login.component.ts
index 0a60904..e848f34 100644
--- a/angular/src/app/presentation-options/default-option/pages/login/login.component.ts
+++ b/angular/src/app/presentation-options/default-option/pages/login/login.component.ts
@@ -3,7 +3,7 @@ import {
Component,
EventEmitter,
HostListener,
- OnInit
+ OnInit,
} from '@angular/core';
import { FormControl, FormGroup, Validators } from '@angular/forms';
import { MatSnackBar } from '@angular/material/snack-bar';
@@ -37,7 +37,8 @@ export class LoginComponent implements OnInit, AfterViewInit {
private router: Router,
private jsonrpc: JsonrpcService,
private messageService: MessageService,
- private _snackBar: MatSnackBar
+ private _snackBar: MatSnackBar,
+ private jsonRpcService: JsonrpcService
) {}
ngOnInit(): void {}
@@ -45,7 +46,7 @@ export class LoginComponent implements OnInit, AfterViewInit {
ngAfterViewInit() {
setTimeout(() => {
this.inputFocusEmitter.emit(`#${this.inputIds[0]}`);
- }, 1000)
+ }, 1000);
}
public inputFocusEmitter = new EventEmitter();
@@ -72,7 +73,6 @@ export class LoginComponent implements OnInit, AfterViewInit {
const nextInputIndex = index + 1;
if (event.target.value.length > 1) {
event.target.value = event.target.value.slice(-1);
-
}
if (nextInputIndex > 0 && nextInputIndex <= this.inputIds.length) {
this.inputFocusEmitter.emit(`#${this.inputIds[nextInputIndex]}`);
@@ -91,68 +91,95 @@ export class LoginComponent implements OnInit, AfterViewInit {
});
return;
}
- this.jsonrpc.rpc({
- method: 'sendVerifyByPhone',
- params: [data.phone]
- }, RpcService.authService, false).subscribe({
+ this.jsonrpc
+ .rpc(
+ {
+ method: 'sendVerifyByPhone',
+ params: [data.phone],
+ },
+ RpcService.authService,
+ false
+ )
+ .subscribe({
next: (result) => {
if (result.code !== 0) {
this._snackBar.open('Произошла ошибка! Попробуйте позже', '', {
- duration: 3000
- })
+ duration: 3000,
+ });
}
if (result.code === 0) {
this.timeLeft = 60;
const interval = setInterval(() => {
- if(this.timeLeft > 0) {
+ if (this.timeLeft > 0) {
this.timeLeft--;
} else {
clearInterval(interval);
}
- },1000)
+ }, 1000);
}
this.isShowNumber = false;
},
error: (error) => {
console.error('Error: ', error);
-
- }
- }
- );
+ },
+ });
setTimeout(() => {
this.inputFocusEmitter.emit(`#${this.inputIds[0]}`);
- }, 0)
+ }, 0);
}
submitCode() {
const data = this.codeForm.value;
- this.jsonrpc.rpc({
- method: 'getTokenByPhone',
- params: [this.phoneForm.value.phone, Object.values(data).join('')]
- }, RpcService.authService, false).subscribe({
+ this.jsonrpc
+ .rpc(
+ {
+ method: 'getTokenByPhone',
+ params: [this.phoneForm.value.phone, Object.values(data).join('')],
+ },
+ RpcService.authService,
+ false
+ )
+ .subscribe({
next: (result) => {
if (result.code === 0) {
this.cookiesService.setCookie('token', result?.data?.token);
- this.router.navigate(['/'], {
- queryParams: {
- token: result?.data?.token
+ this.jsonRpcService.rpc(
+ {
+ method: 'updateAdditionalInfo',
+ params: [
+ {
+ first_name: this.phoneForm.value.name,
+ birth_day: '01.01.1999'
+ },
+ ],
},
- });
+ RpcService.authService,
+ true
+ ).subscribe({
+ next: (value) => {
+ this.router.navigate(['/'], {
+ queryParams: {
+ token: result?.data?.token,
+ },
+ });
+ },
+ error: (err) => {
+ console.error(err);
+
+ }
+ })
// this.phoneConfirmed.emit(null);
} else if (result.code === 230) {
this._snackBar.open('Неверный код!', '', {
- duration: 3000
- })
+ duration: 3000,
+ });
// this.errorConfirmCode = true;
-
}
},
error: (error) => {
console.error(error);
-
- }
- }
- );
+ },
+ });
}
backToPhoneForm() {
@@ -160,8 +187,8 @@ export class LoginComponent implements OnInit, AfterViewInit {
code: '',
code1: '',
code2: '',
- code3: ''
- })
- this.isShowNumber = true
+ code3: '',
+ });
+ this.isShowNumber = true;
}
}
diff --git a/angular/src/app/presentation-options/default-option/pages/loyality-program/loyality-program.component.html b/angular/src/app/presentation-options/default-option/pages/loyality-program/loyality-program.component.html
new file mode 100644
index 0000000..23962b7
--- /dev/null
+++ b/angular/src/app/presentation-options/default-option/pages/loyality-program/loyality-program.component.html
@@ -0,0 +1,99 @@
+
+
+
+
+
+ Расчет начисления бонусов - 10% от суммы покупок за период с 11.01.2023г.
+ по 31.03.2023 г.
+
+
+ За период с 11.01.2023г. по 31.03.2023 г. сумма ваших покупок составила
+ 3700 руб.
+
+ Начисляемый бонус 10% от суммы покупок
+
+
+
+ Участник может использовать Бонусы для «оплаты» до 100% стоимости любой
+ покупки.
+
+
+ Списание Бонусов происходит из расчета 1:1 (один Бонус дает скидку 1
+ российский рубль / 1 тенге / 1 белорусский рубль. Скидка, предоставляемая
+ Участнику при списании Бонусов, уменьшает цену товаров в заказе в
+ соответствии с условиями ПЛ.
+
+
+ Для списания Бонусов Участник должен попросить об этом в кофе-баре сети
+ «COFFEE LIKE» кассира до момента пробития фискального чека, после чего им
+ будет проверена возможность списания Бонусов.
+
+
+ Для всех Участников возможно списание без использования мобильного
+ приложения.
+
+ Полученные Бонусы не подлежат обмену на денежные средства.
+
+
+
+ Начисленные на счет бонусы сгорают по прошествии 90 дней с момента
+ совершения последней покупки с начислением или списанием бонусов.
+
+
+
+ Возврат покупки, за которую бонусы были начислены:
+
+ В случае, если бонусов на счету достаточно для списания, бонусы
+ списываются в полном ранее начисленном за возвращаемый товар объеме.
+
+
+ В случае, если бонусов на счету недостаточно, формируется минусовой
+ баланс.
+
+
+
+
+ Возврат покупки, которая была оплачена бонусами:
+
+ В случае предъявления Участником кассового или товарного чека, сумма
+ бонусов, списанная для оплаты возвращаемого товара, зачисляется на счет
+ участника.
+
+
+ В случае возврата товара с применением оплаты бонусами, клиенту
+ возвращается денежная сумма в размере, внесенном Участником в оплату
+ товара при покупке, за вычетом суммы, оплаченной бонусами.
+
+
+
+
+
+
+ Начисление Бонусных баллов происходит по дифференцированной шкале в
+ зависимости от уровня:
+
+
+
+
+
+ Уровень {{ index + 1 }}
+
+ Сумма покупок за предыдущий период {{ item.start }}-{{ item.end }}
+ руб.
+
+ Начисляемый бонус {{ item.percent }}% от суммы покупки
+
+
+
+
+
+ Уровень {{ index + 1 }}
+ Сумма покупок за предыдущий период — от {{ item.start }} руб.
+ Начисляемый бонус, в % от суммы покупки - {{ item.percent }}%
+
+
+
+
+
diff --git a/angular/src/app/presentation-options/default-option/pages/loyality-program/loyality-program.component.scss b/angular/src/app/presentation-options/default-option/pages/loyality-program/loyality-program.component.scss
new file mode 100644
index 0000000..7225d85
--- /dev/null
+++ b/angular/src/app/presentation-options/default-option/pages/loyality-program/loyality-program.component.scss
@@ -0,0 +1,3 @@
+.loyality-program {
+ margin-bottom: 20px;
+}
diff --git a/angular/src/app/presentation-options/default-option/pages/loyality-program/loyality-program.component.ts b/angular/src/app/presentation-options/default-option/pages/loyality-program/loyality-program.component.ts
new file mode 100644
index 0000000..cd19f75
--- /dev/null
+++ b/angular/src/app/presentation-options/default-option/pages/loyality-program/loyality-program.component.ts
@@ -0,0 +1,21 @@
+import { Component, OnInit } from '@angular/core';
+import { Location } from '@angular/common';
+import { lvlPeriod } from 'src/app/interface/data';
+import { lvlPeriods } from 'src/app/app.constants';
+
+@Component({
+ selector: 'loyality-program',
+ templateUrl: './loyality-program.component.html',
+ styleUrls: ['./loyality-program.component.scss'],
+})
+export class LoyalityProgramComponent implements OnInit {
+ constructor(private _location: Location) {}
+
+ public lvlPeriods: lvlPeriod[] = lvlPeriods;
+
+ goBack() {
+ this._location.back();
+ }
+
+ ngOnInit(): void {}
+}
diff --git a/angular/src/app/services/loyalty-program.service.ts b/angular/src/app/services/loyalty-program.service.ts
index 67f9aa8..9537cd6 100644
--- a/angular/src/app/services/loyalty-program.service.ts
+++ b/angular/src/app/services/loyalty-program.service.ts
@@ -1,6 +1,7 @@
import { Injectable } from '@angular/core';
import moment from 'moment';
-import { Moment, Purchase } from '../interface/data';
+import { Moment, Purchase, lvlPeriod } from '../interface/data';
+import { lvlPeriods } from '../app.constants';
export interface IPurchaseData {
currentPeriod: Moment[];
@@ -25,12 +26,20 @@ export class LoyaltyProgramService {
get currentAmount(): number {
const amount = this.currentPurchases.reduce(
(accumulator, currentValue) => {
- if (['CancelPayFromWallet', 'CancelRefillWalletFromOrder'].includes(currentValue.transactionType || '')) {
+ if (
+ ['CancelPayFromWallet', 'CancelRefillWalletFromOrder'].includes(
+ currentValue.transactionType || ''
+ )
+ ) {
return accumulator - currentValue.orderSum!;
- } else if (['PayFromWallet', 'RefillWalletFromOrder'].includes(currentValue.transactionType || '')) {
+ } else if (
+ ['PayFromWallet', 'RefillWalletFromOrder'].includes(
+ currentValue.transactionType || ''
+ )
+ ) {
return accumulator + currentValue.orderSum!;
}
- return accumulator
+ return accumulator;
},
0
);
@@ -39,17 +48,29 @@ export class LoyaltyProgramService {
},
get lastAmount(): number {
const amount = this.lastPurchases.reduce((accumulator, currentValue) => {
- if (['CancelPayFromWallet', 'CancelRefillWalletFromOrder'].includes(currentValue.transactionType || '')) {
+ if (
+ ['CancelPayFromWallet', 'CancelRefillWalletFromOrder'].includes(
+ currentValue.transactionType || ''
+ )
+ ) {
return accumulator - currentValue.orderSum!;
- } else if (['PayFromWallet', 'RefillWalletFromOrder'].includes(currentValue.transactionType || '')) {
+ } else if (
+ ['PayFromWallet', 'RefillWalletFromOrder'].includes(
+ currentValue.transactionType || ''
+ )
+ ) {
return accumulator + currentValue.orderSum!;
}
- return accumulator
+ return accumulator;
}, 0);
return amount * 1;
},
};
+ public currentLvl: number = 1;
+ public currentLvlPeriod!: lvlPeriod;
+ public lvlPeriods: lvlPeriod[] = lvlPeriods;
+
constructor() {
this.getCurrentQuarterOfYear();
}
@@ -60,7 +81,10 @@ export class LoyaltyProgramService {
moment().subtract(1, 'years').endOf('year').subtract(3, 'months'),
moment().startOf('year').add(10, 'days'),
],
- [moment().startOf('year').add(10, 'days'), moment().startOf('year').add(3, 'months')],
+ [
+ moment().startOf('year').add(10, 'days'),
+ moment().startOf('year').add(3, 'months'),
+ ],
[
moment().startOf('year').add(3, 'months'),
moment().startOf('year').add(6, 'months'),
@@ -84,13 +108,13 @@ export class LoyaltyProgramService {
}
getBalanceAmount(loyaltyPrograms: any[]) {
- return loyaltyPrograms.reduce((accumulator, currentValue) => {
+ return (loyaltyPrograms || []).reduce((accumulator, currentValue) => {
return accumulator + currentValue.balance;
}, 0);
}
setLastPurchases(purchases: Purchase[]) {
- this.purchaseData.lastPurchases = purchases.filter((value: Purchase) => {
+ this.purchaseData.lastPurchases = (purchases || []).filter((value: Purchase) => {
return moment(value.transactionCreateDate).isBetween(
this.purchaseData.lastPeriod[0],
this.purchaseData.lastPeriod[1]
@@ -99,7 +123,7 @@ export class LoyaltyProgramService {
}
setCurrentPurchases(purchases: Purchase[]) {
- this.purchaseData.currentPurchases = purchases.filter((value: Purchase) => {
+ this.purchaseData.currentPurchases = (purchases || []).filter((value: Purchase) => {
return moment(value.transactionCreateDate).isBetween(
this.purchaseData.currentPeriod[0],
this.purchaseData.currentPeriod[1]
@@ -108,7 +132,7 @@ export class LoyaltyProgramService {
}
filterPurchases(purchases: Purchase[]) {
- return purchases.filter((purchase: Purchase) =>
+ return (purchases || []).filter((purchase: Purchase) =>
[
'PayFromWallet',
'RefillWalletFromOrder',
@@ -125,4 +149,22 @@ export class LoyaltyProgramService {
)
)[0];
}
+
+ setCurrentLvl(currentAmount: number) {
+ const index = this.lvlPeriods.findIndex(
+ (item) =>
+ item.start <= currentAmount && currentAmount <= (item.end || Infinity)
+ )!;
+ if (index != -1) {
+ this.currentLvlPeriod = this.lvlPeriods[index];
+ this.currentLvl = index + 1;
+ }
+ }
+
+ getNextLevel(): lvlPeriod {
+ if(this.currentLvl == this.lvlPeriods.length) {
+ return lvlPeriods[this.currentLvl - 1];
+ }
+ return lvlPeriods[this.currentLvl];
+ }
}
diff --git a/angular/src/environments/environment.ts b/angular/src/environments/environment.ts
index f753a94..060fb78 100644
--- a/angular/src/environments/environment.ts
+++ b/angular/src/environments/environment.ts
@@ -19,7 +19,7 @@ export const environment = {
},
version: packageJson.version,
appleWalletEndpoint: 'http://192.168.0.179:4200/apns/api',
- icardProxy: 'http://localhost:4200/icard-proxy/',
+ icardProxy: 'http://192.168.0.14:4200/icard-proxy/',
appleWalletSecret: 'Token F5mbzEERAznGKVbB6l',
clientName: 'coffeeLike'
};