Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge to Master: LCSD 6147, 7312, 7235, 6857, 7322, 7367, 6465 #4306

Merged
merged 14 commits into from
Nov 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions cllc-public-app/ClientApp/src/app/app.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,9 @@
</div>
</header>

<section>

<!-- System Maintenance Banner -->
<!-- <section>
<div style="background: red; color: #ffffff; padding-left: 25px; padding-right: 25px; font-weight: bold; text-align: center;">
<br>
There will be scheduled system maintenance starting on November 15, 2024 at 6 PM and ending on November 18, 2024 at 8 AM PT. The liquor and cannabis licensing portal will not be available during this time.
Expand All @@ -47,7 +49,7 @@
<br>
<br>
</div>
</section>
</section> -->

<div *ngIf="showBceidTermsOfUse()">
<main class="app-content">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -470,6 +470,41 @@ <h3 class="blue-header">APPLICATION CONTACT DETAILS</h3>
</app-field>
</address>

<h3 class="blue-header">REFUND POLICY</h3>
<div class="content-bottom">
<p>
Licence renewal fees are generally non-refundable.
<br><br>
Refunds for <a href="https://www.bclaws.gov.bc.ca/civix/document/id/complete/statreg/241_2016#Schedule1" target="_blank">licence renewal fees</a> may be available if the:
</p>
<ul>
<li>The LCRB has made an error</li>
<li>Applicant has overpaid</li>
</ul>
<p>
Renewal fees must be paid in full for a licence to remain valid.
</p>
<p>
Payment may appear on a credit card statement as:<br>
"Liquor and Cannabis Re… Victoria BC" and other variations.
</p>
<p>
<strong>
The LCRB investigates all credit card chargeback requests for fees and will dispute chargeback requests. A note will also be made on your LCRB account and there may be consequences for fraudulent requests.
</strong>
</p>

<app-field [valid]="!showValidationMessages || form.get('readRefundPolicy').valid"
errorMessage="Please affirm that you have read and understand the refund policy." [showChevrons]="false">
<mat-checkbox formControlName="readRefundPolicy">
<span class="error-states">*</span>
<span class="ml-2">
I have read and understand the refund policy.
</span>
</mat-checkbox>
</app-field>
</div>

<h3 class="blue-header ngtest-declarations">
DECLARATIONS
</h3>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ const ValidationErrorMap = {
contactPersonPhone: "Please enter the business contact's 10-digit phone number",
authorizedToSubmit: "Please affirm that you are authorized to submit the application",
signatureAgreement: "Please affirm that all of the information provided for this application is true and complete",
readRefundPolicy: "Please affirm that you have read and understand the refund policy"
};


Expand Down Expand Up @@ -242,6 +243,7 @@ export class ApplicationRenewalComponent extends FormBase implements OnInit {

authorizedToSubmit: ["", [this.customRequiredCheckboxValidator()]],
signatureAgreement: ["", [this.customRequiredCheckboxValidator()]],
readRefundPolicy: ["", [this.customRequiredCheckboxValidator()]],

assignedLicence: this.fb.group({
id: [""],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1516,7 +1516,26 @@ <h3 class="blue-header">Discretion Request</h3>
</div>
</section>
</div>
</section>
<div *ngIf="application?.applicationType?.name === ApplicationTypeNames.DormancyReinstatement">
<section>
<div>
<h3 class="blue-header">Supporting Documents</h3>
<div class="content-bottom">
<p>
Proof of valid interest (lease or land title) is required - attach a copy when submitting the form.
</p>

<app-file-uploader *ngIf="applicationId" documentType="Supporting Document"
fileTypes="FILE MUST BE IN PDF FORMAT." [disableUploads]="isOpenedByLGForApproval || lGHasApproved()"
[enableFileDeletion]="!isOpenedByLGForApproval && !lGHasApproved()" [multipleFiles]="true"
entityName="application" [useDocumentTypeForName]="true"
(numberOfUploadedFiles)="proofOfValidInterestDocuments = $event" [entityId]="applicationId"
[uploadHeader]="'TO UPLOAD SUPPORTING DOCUMENTS'">
</app-file-uploader>
</div>
</div>
</section>
</div>

<!-- The label of the field will now be used to communicate the message of the alert -->
<!-- <app-error-alert *ngIf="application?.applicationType?.name === 'Ethyl Alcohol Permit' && form.get('hasSufficientRangeOfProducts').value == 845280000">
Expand All @@ -1534,45 +1553,44 @@ <h3 class="blue-header" *ngIf="this.isLP()">ESTABLISHMENT TYPE</h3>
<tr>
<td>
<ul>
<li>Aircraft</li>
<li>Airport Lounge</li>
<li>Aquarium</li>
<li>Art Gallery</li>
<li>B&B/Hotel</li>
<li>Bingo Hall</li>
<li>Brew Pub</li>
<li>Casino</li>
<li>Community Centre</li>
</ul>
</td>
<td>
<ul>
<li>Community Centre</li>
<li>Concert Hall</li>
<li>Convention Centre</li>
<li>Cooking School</li>
<li>Cultural Centre</li>
<li>Fishing Lodge</li>
<li>Golf Course</li>
<li>Hair Salon</li>
<li>Live Theatre</li>
</ul>


</td>
<td>
<ul>
<li>Live Theatre</li>
<li>Lounge</li>
<li>Military Mess</li>
<li>Movie Theatre</li>
<li>Museum</li>
<li>Night Club/Cabaret</li>
<li>Private Club</li>
<li>Public House (Pub)</li>
<li>Recreation Facility</li>
</ul>
</td>
<td>
<ul>
<li>Recreation Facility</li>
<li>Rental Hall</li>
<li>Resort</li>
<li>Retail Store</li>
Expand Down Expand Up @@ -1826,20 +1844,37 @@ <h3 class="blue-header" *ngIf="this.isLP()">ESTABLISHMENT TYPE</h3>
[uploadHeader]="'TO UPLOAD FLOOR PLANS, DRAG FILES HERE OR'">
</app-file-uploader>
</section>
</div>
<br>
<section *ngIf="application.applicationType.serviceAreas" > <p>Enter the total occupant load as indicated by your local government. This number can be either the total stamped on the floor plan or the sum of occupant loads across all service areas, as listed in the occupant load stamp. </p>

<app-field [required]="true" label="Total occupant load" [valid]="!showValidationMessages || form.get('totalOccupantLoad').valid" errorMessage="Total occupant load is required."> <input class="form-control" formControlName="totalOccupantLoad" id="totalOccupantLoad"
style="width: 250px;" type="number" min="1" placeholder="Total occupant load" (input)="validateInput($event)" /></app-field></section>
</div>

</section>

<!-- Service Area -->
<h3 class="blue-header" *ngIf="application.applicationType.serviceAreas">SERVICE AREAS</h3>
<section *ngIf="application.applicationType.serviceAreas" class="padded-section content-bottom">

<div *ngIf="htmlContent?.serviceAreas" [innerHTML]="htmlContent.serviceAreas"></div>
<div *ngIf="htmlContent?.serviceAreas" [innerHTML]="htmlContent.serviceAreas" ></div>

<app-field [valid]="!showValidationMessages || form.get('serviceAreas').valid" errorMessage="All fields are required."
[showChevrons]="false" [isFullWidth]="true">
<app-capacity-table formControlName="serviceAreas" [areaCategory]="getAreaCategoryNumber('Service')"
[enabled]="!isOpenedByLGForApproval && !lGHasApproved()">
</app-capacity-table>
<div *ngIf="!isOccupantLoadCorrect()">
<br>
<p class="error-text">The sum of occupant loads across all service areas does not match the total occupant load entered in the total occupant load field.</p>

</div>

<div *ngIf="!showOccupantLoadCheckBox">
<mat-checkbox formControlName="totalOccupantLoadExceed" > <span class="error-states">*</span>
I affirm that the combined service area capacity exceeds the total occupant load.
</mat-checkbox>
</div>
</app-field>

<mat-card class="mat-elevation-z0 mb-3" *ngIf="showHoldsOtherManufactureLicence()">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,15 @@
padding-left: 15px;
margin-bottom: 20px;
}
.text-red {
color: #ff0800;
}

.error-text {
color: #d8292f;
font-weight: 400;
line-height: 1.5;
}
.warning-state {
color: #ffc107;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ export class ApplicationComponent extends FormBase implements OnInit {
uploadedPartnershipAgreement: 0;
uploadedOtherDocuments: 0;
uploadedIndividualsWithLessThan10: 0;
proofofValidInterestDocuments: 0;
proofOfValidInterestDocuments: 0;
dynamicsForm: DynamicsForm;
autocompleteLocalGovernmemts: any[];
autocompletePoliceDurisdictions: any[];
Expand All @@ -107,7 +107,7 @@ export class ApplicationComponent extends FormBase implements OnInit {
uploadedCentralSecuritiesRegisterDocuments: number = 0;
tiedHouseExemptions: { jobNumber: string, displayName: string }[] = [];
licenseToRemove: RelatedLicence;

showOccupantLoadCheckBox: boolean = false;

isHasPatioBackingFld: boolean = true;

Expand Down Expand Up @@ -178,6 +178,8 @@ export class ApplicationComponent extends FormBase implements OnInit {
applyAsIndigenousNation: [false],
indigenousNationId: [{ value: null, disabled: true }, Validators.required],
federalProducerNames: ['', Validators.required],
totalOccupantLoad: ['', Validators.required],
totalOccupantLoadExceed: [false, Validators.required],
applicantType: ['', Validators.required],
description1: [''],
description2: [''],
Expand Down Expand Up @@ -617,6 +619,8 @@ export class ApplicationComponent extends FormBase implements OnInit {

if (!this.application.applicationType.serviceAreas) {
this.form.get('serviceAreas').disable();
this.form.get('totalOccupantLoad').disable();

}
if (!this.application.applicationType.outsideAreas) {
this.form.get('outsideAreas').disable();
Expand Down Expand Up @@ -1114,12 +1118,19 @@ export class ApplicationComponent extends FormBase implements OnInit {
}
}

const serviceArea = ('areas' in this.form.get('serviceAreas').value) ? this.form.get('serviceAreas').value['areas'] : this.form.get('serviceAreas').value;

const serviceArea = ('areas' in this.form.get('serviceAreas').value) ? this.form.get('serviceAreas').value['areas'] : this.form.get('serviceAreas').value;

//if (this.showServiceArea() && serviceArea.length === 0 && (this.isLP() || ApplicationTypeNames.SpecialEventAreaEndorsement || ApplicationTypeNames.LoungeAreaEndorsment) ) {
if (this.showServiceArea() && serviceArea.length === 0) {
valid = false;
this.validationMessages.push('At least one service area is required.');
}else{
if(!this.isOccupantLoadCorrect()){
valid = false;
this.validationMessages.push('The sum of occupant loads across all service areas does not match the total occupant load entered in the total occupant load field.');
}

}

// optional for this application type
Expand Down Expand Up @@ -1221,7 +1232,7 @@ export class ApplicationComponent extends FormBase implements OnInit {
}

}
if (this.application?.applicationType?.name === ApplicationTypeNames.DormancyReinstatement && (this.proofofValidInterestDocuments || 0) < 1) {
if (this.application?.applicationType?.name === ApplicationTypeNames.DormancyReinstatement && (this.proofOfValidInterestDocuments || 0) < 1) {
valid = false;
this.validationMessages.push('At least one proof of valid interest document is required.');
}
Expand Down Expand Up @@ -1489,6 +1500,7 @@ export class ApplicationComponent extends FormBase implements OnInit {
establishmentParcelId: 'Please enter the Parcel Identifier (format: 9 digits)',
establishmentopeningdate: 'Please enter the store opening date',
federalProducerNames: 'Please enter the name of federal producer',
totalOccupantLoad:'Please enter the total occupant load',
hasValidInterest: 'Please enter a value for valid interest',
indigenousNationId: 'Please select the Indigenous nation',
isAlr: 'Please indicate ALR status',
Expand Down Expand Up @@ -1771,4 +1783,25 @@ export class ApplicationComponent extends FormBase implements OnInit {
this.licenseToRemove = assignedLicence;
this.form.get("description1").patchValue(this.licenseToRemove.name);
}

validateInput(event:Event):void{
const input = event.target as HTMLInputElement;
input.value = input.value.replace(/-/g,'');
}

isOccupantLoadCorrect(): Boolean{
const serviceArea = ('areas' in this.form.get('serviceAreas').value) ? this.form.get('serviceAreas').value['areas'] : this.form.get('serviceAreas').value;
let totalCapacity = serviceArea.reduce((sum,item)=> Number(sum+(+item.capacity)),0);
let totalOccupantLoad = this.form.get('totalOccupantLoad').value | 0;
const isExceeded:boolean = totalOccupantLoad>=totalCapacity
if(isExceeded){
this.form.controls['totalOccupantLoadExceed'].enabled;
this.showOccupantLoadCheckBox = true;
}else{
this.form.controls['totalOccupantLoadExceed'].disabled;
this.showOccupantLoadCheckBox = false;

}
return this.form.get('totalOccupantLoadExceed').value === true || isExceeded;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -396,6 +396,41 @@ <h3 class="blue-header">RENEWAL CONTACT DETAILS</h3>
</address>
</div>

<h3 class="blue-header">REFUND POLICY</h3>
<div class="content-bottom">
<p>
Licence renewal fees are generally non-refundable.
<br><br>
Refunds for <a href="https://www.bclaws.gov.bc.ca/civix/document/id/complete/statreg/241_2016#Schedule1" target="_blank">licence renewal fees</a> may be available if the:
</p>
<ul>
<li>The LCRB has made an error</li>
<li>Applicant has overpaid</li>
</ul>
<p>
Renewal fees must be paid in full for a licence to remain valid.
</p>
<p>
Payment may appear on a credit card statement as:<br>
"Liquor and Cannabis Re… Victoria BC" and other variations.
</p>
<p>
<strong>
The LCRB investigates all credit card chargeback requests for fees and will dispute chargeback requests. A note will also be made on your LCRB account and there may be consequences for fraudulent requests.
</strong>
</p>

<app-field [valid]="!showValidationMessages || form.get('readRefundPolicy').valid"
errorMessage="Please affirm that you have read and understand the refund policy." [showChevrons]="false">
<mat-checkbox formControlName="readRefundPolicy">
<span class="error-states">*</span>
<span class="ml-2">
I have read and understand the refund policy.
</span>
</mat-checkbox>
</app-field>
</div>

<h3 class="blue-header ngtest-declarations">
DECLARATIONS
</h3>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ const ValidationErrorMap = {
contactPersonPhone: "Please enter the business contact's 10-digit phone number",
authorizedToSubmit: "Please affirm that you are authorized to submit the application",
signatureAgreement: "Please affirm that all of the information provided for this application is true and complete",
readRefundPolicy: "Please affirm that you have read and understand the refund policy",

ldbOrderTotals: "Please provide LDB Order Totals ($0 - $10,000,000)",
ldbOrderTotalsConfirm: "Please confirm LDB Order Totals matches",
Expand Down Expand Up @@ -142,7 +143,9 @@ export class LiquorRenewalComponent extends FormBase implements OnInit {

authorizedToSubmit: ["", [this.customRequiredCheckboxValidator()]],
signatureAgreement: ["", [this.customRequiredCheckboxValidator()]],
isManufacturedMinimum: ["", []]
isManufacturedMinimum: ["", []],

readRefundPolicy: ["", [this.customRequiredCheckboxValidator()]],
});

this.previousYear = (new Date().getFullYear() - 1).toString();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,13 +55,13 @@ <h3>Enter the number of each drink type appropriate for your event:</h3>

<mat-form-field appearance="outline" floatLabel="always">
<mat-label>No. Servings</mat-label>
<input matInput type="number" [formControlName]="item.group" class="average-price" placeholder="0">
<input matInput type="number" (input)="validateInput($event)" [formControlName]="item.group" class="average-price" placeholder="0" min="0" pattern="^[0-9]*$">
</mat-form-field>

<ng-container *ngIf="someFree">
<mat-form-field appearance="outline" floatLabel="always">
<mat-label>No. Free Servings</mat-label>
<input matInput type="number" [formControlName]="item.group_free" class="average-price" placeholder="0">
<input matInput type="number" (input)="validateInput($event)" [formControlName]="item.group_free" class="average-price" placeholder="0" min="0" pattern="^[0-9]*$">
</mat-form-field>
</ng-container>

Expand Down
Loading