From 6745b02ae947014d0e56e2f4235d7e61c9a85baa Mon Sep 17 00:00:00 2001 From: Ajay Sajwan Date: Wed, 12 Jun 2019 23:56:32 +0530 Subject: [PATCH 01/24] Initial Commit --- CHANGELOG.md | 11 +++ CONTRIBUTING.md | 1 + README.md | 141 +-------------------------------------- sonar-project.properties | 4 +- 4 files changed, 15 insertions(+), 142 deletions(-) create mode 100644 CHANGELOG.md create mode 100644 CONTRIBUTING.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..c8c33e6 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,11 @@ +#Changelog maintains details about all the releases of the application + + +# [1.0.0-alpha-1](https://github.com/ajaysajwan/FET_FEST/tree/master-parking-solution/1.0.0) (2019-06-12) + +## Initial Alpha Release +--- + +###Feature +* List here +* List here \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..22cf2df --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1 @@ +#Team contributing for the development \ No newline at end of file diff --git a/README.md b/README.md index 7e54f0c..726784d 100644 --- a/README.md +++ b/README.md @@ -1,141 +1,2 @@ -# WELCOME TO TECHTONIC FET FEST 2019 - -The TECHTONIC FET fest will begin on **May 27, 2019** and will conclude with a highly competitive hackathon on **June 15, 2019**. - -This event is a XXXXX hosted organization wide event and will be conducted in three locations; **Pune, Gandhinagar and Hyderabad** - -The last date for applying for the hackathon is **June 10, 2019** Registration must be completed through the event website. - -The participation in the event comes with a list of rules and regulations. Read the rules carefully to fully understand the code of conduct during the event. Any non-compliance in the rules will lead to direct disqualification from the event. - -## GENERAL RULES - -* Responsibility of the components and the materials used during the hackathon lies solely on the participating teams. -* Administrator reserves the right in their sole discretion to disqualify any individual it finds tampering with the entry process or the operation of the hackathon. -* Any act of violation of the official rules or anything inappropriate, unsportsmanlike, not in the best interests of this hackathon, or a violation of any applicable law or regulation will be dealt with strict actions. - - -## ENROLLMENT /PARTICIPATION - -* Only 10 teams in each location will be allowed to participate. -* The selection of the team will solely depend on the selection of the topic submitted -* A selection panel will scrutinize the topics sent for participation. Based on the selection criteria, the most distinctive topics will be selected for final participation. You will receive a mail once selected. -* Each team can have a mentor who must be grade 5 or above (4 + 1 team) -* The mentor will guide the team in ideation, planning, and perfecting the pitch -* The TechTonic team will try its best to accommodate employees who register as individuals in multi-member teams. - -**Pune** – Participants will form a team of five members. A team can register with a minimum of 3 members, however, organizers will add two members to make it a 5-member team. The team must have at least 2 FET or Full stack developers. - -**Gandhinagar and Hyderabad** - Employees in Gandhinagar and Hyderabad can form a team of no more than 3 members. The team must have at least 1 FET or Full stack developer. - - -## TECHNOLOGY - -### Team vs Individual technology -* If you register as a team, the following technology rules will apply. -* If you register as an individual, the technologies applicable to the individual will be considered while allocating to an existing team. - -### Technology Rules -The following technology criteria will be considered for participation: - -### Must use at least one of these technology pairings -* Typescript + Angular -* ES6+ ReactJS -* VueJS - - -### Good to use these technology pairings -* HTML5/CSS3 -* SCSS/SASS -* Bootstrap/RWD -* jQuery, JavaScript, OOJS - -### Optional to use these technologies -* NodeJS -* .NET -* JAVA -* PHP -* PERL - -### SDKs, APIs & Data -Applications may integrate third-party SDKs, APIs, and services, provided the maker is authorized to use them. - -## EQUIPMENT - -* The participants must bring their own equipment such as a laptop, data dongle, and any other equipment necessary to prepare and be able to participate in the Hackathon. -* No network connection will be provided inside the premise. -* All the equipment will have to go through security check. - -## CHALLENGE YOURSELF - -### The creation -The team must build a working software application that runs on frontend technology and can be paired with the above-mentioned backend technologies. Do not build on top of old projects. - -### Review/Testing: -* The team must make the application available without any restriction, for testing, evaluation and for use by the judges following the event until the judging period ends. -* The topics for the articles will be reviewed beforehand to avoid any duplication. -* The team must make their application available for testing by Including a link to the application code on GitHub or BitBucket. -* The code repository may be public or private: -* If the repository is private, access must be given in the testing instructions provided with your submission. - - -The code will be used only for application review and testing. Include all deployment files and testing instructions required for testing the application. - -## IP RULES - -### Intellectual Property Rights -All submissions remain the intellectual property of the individuals or team that developed them. - -### Protection of Intellectual Property -By submitting an entry or accepting any prize, you represent and warrant the following: - -you will not submit content that is copyrighted, protected by trade secret or otherwise. subject to third-party intellectual property rights or other proprietary rights, including privacy and publicity rights, unless you are the owner of such rights or have permission from their rightful owner to post the content; and the content submitted by you does not contain any viruses, Trojan horses, worms or other disabling devices or harmful code. - -### Copyright -The participant represents and warrants that they are the sole author and copyright owner of the submission and that the submission is an original work of the participant. - -If the submission is a work based on an existing application, then the participant has acquired sufficient rights to use and authorize others; and that the submission does not infringe upon any copyright or upon any other third-party rights of which the participant is aware. The submission should be free of malware. - -## WINNER SELECTION/JUDGING CRITERIA - -The judges will evaluate all eligible submissions on the following criteria: - -* **Creativity**: Creativity and originality of the idea -* **Technology**: How well FET technologies were leveraged by the developer -* **Impact**: Extent to which the solution can be useful -* **Scalability**: Potential growth of the application - -### Small little tit-bits -* Any disputes arising out of or in relation with the Hackathon shall be settled amicably -* Questions with respect to the Hackathon can be directed to the appropriate location contact: techtonic@XXXXX.com - - -# CODE SETUP - -## Fork this repository - -Team leader need to fork this repository, for more help please visit (**https://help.github.com/en/articles/fork-a-repo**) Rest of the team member can contribute to the forked repository. - -* **Don't commit any code in master repo, it will be not approved. Only commit the code in forked repository** -* **You can create multiple fork repository, and PULL request to common fork repository for review** -* **Only one repository will be considered for code review from the panel, multiple repository/branch will not be considered** - - -## Set up Sonar - -Open **sonar-project.properties** file and update these properties before staring off the project. - -```sonar.projectKey=my: ``` - -Where **** will be team name and theme without space, however you can use ```_```. - -```sonar.projectName= ``` - -Where **** will be short name of your project/theme. - - -### Disclaimer -XXXXX is just a facilitator of such events and will not hold any responsibility or accountability of any incident/accident/mis happening/IP or copyright infringement. - -**The attendance to the event will be at your own discretion.** +#SMART SYSTEM diff --git a/sonar-project.properties b/sonar-project.properties index 8b37ef1..dba2c8d 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -1,8 +1,8 @@ # must be unique in a given SonarQube instance -sonar.projectKey=my: +sonar.projectKey=my: # this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1. -sonar.projectName= +sonar.projectName= sonar.projectVersion=1.0 # Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows. From e3690f317af85666dbb21958ca78ebb6b813b97c Mon Sep 17 00:00:00 2001 From: Ajay Sajwan Date: Thu, 13 Jun 2019 00:02:16 +0530 Subject: [PATCH 02/24] Intial commit --- CHANGELOG.md | 6 +++--- CONTRIBUTING.md | 2 +- README.md | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c8c33e6..857b2a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,11 @@ -#Changelog maintains details about all the releases of the application +# Changelog maintains details about all the releases of the application -# [1.0.0-alpha-1](https://github.com/ajaysajwan/FET_FEST/tree/master-parking-solution/1.0.0) (2019-06-12) +# [1.0.0-alpha-1](https://github.com/ajaysajwan/FET_FEST/tree/master-parking-solution/1.0.0-alpha-1) (2019-06-15) ## Initial Alpha Release --- -###Feature +### Feature * List here * List here \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 22cf2df..29628d3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1 +1 @@ -#Team contributing for the development \ No newline at end of file +# Team contributing for the development \ No newline at end of file diff --git a/README.md b/README.md index 726784d..d832263 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ -#SMART SYSTEM +# SMART SYSTEM From c225394007be8d7a3b26ce09a20ed432f888af91 Mon Sep 17 00:00:00 2001 From: Ajay Sajwan Date: Thu, 13 Jun 2019 08:40:07 +0530 Subject: [PATCH 03/24] Added Basic Boilerplate --- .gitignore | 3 + angular.json | 139 +++++++++++++++++++++++++++ e2e/protractor.conf.js | 28 ++++++ e2e/src/app.e2e-spec.ts | 14 +++ e2e/src/app.po.ts | 11 +++ e2e/tsconfig.e2e.json | 13 +++ package.json | 56 +++++++++++ src/app/app-routing.module.ts | 10 ++ src/app/app.component.html | 11 +++ src/app/app.component.scss | 0 src/app/app.component.spec.ts | 35 +++++++ src/app/app.component.ts | 14 +++ src/app/app.module.ts | 33 +++++++ src/assets/.gitkeep | 0 src/assets/i18n/en-US.json | 3 + src/assets/i18n/hi-IN.json | 4 + src/browserslist | 11 +++ src/environments/environment.prod.ts | 3 + src/environments/environment.ts | 16 +++ src/favicon.ico | Bin 0 -> 5430 bytes src/index.html | 14 +++ src/karma.conf.js | 31 ++++++ src/main.ts | 12 +++ src/polyfills.ts | 85 ++++++++++++++++ src/styles.scss | 2 + src/test.ts | 20 ++++ src/tsconfig.app.json | 11 +++ src/tsconfig.spec.json | 18 ++++ src/tslint.json | 17 ++++ tsconfig.json | 22 +++++ tslint.json | 131 +++++++++++++++++++++++++ 31 files changed, 767 insertions(+) create mode 100644 .gitignore create mode 100644 angular.json create mode 100644 e2e/protractor.conf.js create mode 100644 e2e/src/app.e2e-spec.ts create mode 100644 e2e/src/app.po.ts create mode 100644 e2e/tsconfig.e2e.json create mode 100644 package.json create mode 100644 src/app/app-routing.module.ts create mode 100644 src/app/app.component.html create mode 100644 src/app/app.component.scss create mode 100644 src/app/app.component.spec.ts create mode 100644 src/app/app.component.ts create mode 100644 src/app/app.module.ts create mode 100644 src/assets/.gitkeep create mode 100644 src/assets/i18n/en-US.json create mode 100644 src/assets/i18n/hi-IN.json create mode 100644 src/browserslist create mode 100644 src/environments/environment.prod.ts create mode 100644 src/environments/environment.ts create mode 100644 src/favicon.ico create mode 100644 src/index.html create mode 100644 src/karma.conf.js create mode 100644 src/main.ts create mode 100644 src/polyfills.ts create mode 100644 src/styles.scss create mode 100644 src/test.ts create mode 100644 src/tsconfig.app.json create mode 100644 src/tsconfig.spec.json create mode 100644 src/tslint.json create mode 100644 tsconfig.json create mode 100644 tslint.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..897cb9f --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +node_modules +package-lock.json +dist \ No newline at end of file diff --git a/angular.json b/angular.json new file mode 100644 index 0000000..f4f3d2e --- /dev/null +++ b/angular.json @@ -0,0 +1,139 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "kisaan": { + "root": "", + "sourceRoot": "src", + "projectType": "application", + "prefix": "app", + "schematics": { + "@schematics/angular:component": { + "styleext": "scss" + } + }, + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/kisaan", + "index": "src/index.html", + "main": "src/main.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "src/tsconfig.app.json", + "assets": [ + "src/favicon.ico", + "src/assets" + ], + "styles": [ + "src/styles.scss" + ], + "scripts": [] + }, + "configurations": { + "production": { + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ], + "optimization": true, + "outputHashing": "all", + "sourceMap": false, + "extractCss": true, + "namedChunks": false, + "aot": true, + "extractLicenses": true, + "vendorChunk": false, + "buildOptimizer": true, + "budgets": [ + { + "type": "initial", + "maximumWarning": "2mb", + "maximumError": "5mb" + } + ] + } + } + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "options": { + "browserTarget": "kisaan:build" + }, + "configurations": { + "production": { + "browserTarget": "kisaan:build:production" + } + } + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "browserTarget": "kisaan:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "main": "src/test.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "src/tsconfig.spec.json", + "karmaConfig": "src/karma.conf.js", + "styles": [ + "src/styles.scss" + ], + "scripts": [], + "assets": [ + "src/favicon.ico", + "src/assets" + ] + } + }, + "lint": { + "builder": "@angular-devkit/build-angular:tslint", + "options": { + "tsConfig": [ + "src/tsconfig.app.json", + "src/tsconfig.spec.json" + ], + "exclude": [ + "**/node_modules/**" + ] + } + } + } + }, + "kisaan-e2e": { + "root": "e2e/", + "projectType": "application", + "prefix": "", + "architect": { + "e2e": { + "builder": "@angular-devkit/build-angular:protractor", + "options": { + "protractorConfig": "e2e/protractor.conf.js", + "devServerTarget": "kisaan:serve" + }, + "configurations": { + "production": { + "devServerTarget": "kisaan:serve:production" + } + } + }, + "lint": { + "builder": "@angular-devkit/build-angular:tslint", + "options": { + "tsConfig": "e2e/tsconfig.e2e.json", + "exclude": [ + "**/node_modules/**" + ] + } + } + } + } + }, + "defaultProject": "kisaan" +} \ No newline at end of file diff --git a/e2e/protractor.conf.js b/e2e/protractor.conf.js new file mode 100644 index 0000000..86776a3 --- /dev/null +++ b/e2e/protractor.conf.js @@ -0,0 +1,28 @@ +// Protractor configuration file, see link for more information +// https://github.com/angular/protractor/blob/master/lib/config.ts + +const { SpecReporter } = require('jasmine-spec-reporter'); + +exports.config = { + allScriptsTimeout: 11000, + specs: [ + './src/**/*.e2e-spec.ts' + ], + capabilities: { + 'browserName': 'chrome' + }, + directConnect: true, + baseUrl: 'http://localhost:4200/', + framework: 'jasmine', + jasmineNodeOpts: { + showColors: true, + defaultTimeoutInterval: 30000, + print: function() {} + }, + onPrepare() { + require('ts-node').register({ + project: require('path').join(__dirname, './tsconfig.e2e.json') + }); + jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); + } +}; \ No newline at end of file diff --git a/e2e/src/app.e2e-spec.ts b/e2e/src/app.e2e-spec.ts new file mode 100644 index 0000000..7f9a0d9 --- /dev/null +++ b/e2e/src/app.e2e-spec.ts @@ -0,0 +1,14 @@ +import { AppPage } from './app.po'; + +describe('workspace-project App', () => { + let page: AppPage; + + beforeEach(() => { + page = new AppPage(); + }); + + it('should display welcome message', () => { + page.navigateTo(); + expect(page.getTitleText()).toEqual('Welcome to kisaan!'); + }); +}); diff --git a/e2e/src/app.po.ts b/e2e/src/app.po.ts new file mode 100644 index 0000000..72e463a --- /dev/null +++ b/e2e/src/app.po.ts @@ -0,0 +1,11 @@ +import { browser, by, element } from 'protractor'; + +export class AppPage { + navigateTo() { + return browser.get('/'); + } + + getTitleText() { + return element(by.css('app-root h1')).getText(); + } +} diff --git a/e2e/tsconfig.e2e.json b/e2e/tsconfig.e2e.json new file mode 100644 index 0000000..a6dd622 --- /dev/null +++ b/e2e/tsconfig.e2e.json @@ -0,0 +1,13 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../out-tsc/app", + "module": "commonjs", + "target": "es5", + "types": [ + "jasmine", + "jasminewd2", + "node" + ] + } +} \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..b94fef2 --- /dev/null +++ b/package.json @@ -0,0 +1,56 @@ +{ + "name": "kisaan", + "version": "1.0.0", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "test": "ng test", + "lint": "ng lint", + "e2e": "ng e2e" + }, + "private": true, + "engines": { + "node": "10.16.0", + "npm": "6.9.0" + }, + "dependencies": { + "@angular/animations": "7.2.0", + "@angular/common": "7.2.0", + "@angular/compiler": "7.2.0", + "@angular/core": "7.2.0", + "@angular/forms": "7.2.0", + "@angular/platform-browser": "7.2.0", + "@angular/platform-browser-dynamic": "7.2.0", + "@angular/router": "7.2.0", + "@ng-bootstrap/ng-bootstrap": "4.0.0", + "@ngx-translate/core": "11.0.1", + "@ngx-translate/http-loader": "4.0.0", + "bootstrap": "4.0.0", + "core-js": "2.5.4", + "rxjs": "6.3.3", + "tslib": "1.9.0", + "zone.js": "0.8.26" + }, + "devDependencies": { + "@angular-devkit/build-angular": "0.12.0", + "@angular/cli": "7.2.0", + "@angular/compiler-cli": "7.2.0", + "@angular/language-service": "7.2.0", + "@types/node": "8.9.4", + "@types/jasmine": "2.8.8", + "@types/jasminewd2": "2.0.3", + "codelyzer": "4.5.0", + "jasmine-core": "2.99.1", + "jasmine-spec-reporter": "4.2.1", + "karma": "3.1.1", + "karma-chrome-launcher": "2.2.0", + "karma-coverage-istanbul-reporter": "2.0.1", + "karma-jasmine": "1.1.2", + "karma-jasmine-html-reporter": "0.2.2", + "protractor": "5.4.0", + "ts-node": "7.0.0", + "tslint": "5.11.0", + "typescript": "3.2.2" + } +} diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts new file mode 100644 index 0000000..d8f91db --- /dev/null +++ b/src/app/app-routing.module.ts @@ -0,0 +1,10 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +const routes: Routes = []; + +@NgModule({ + imports: [RouterModule.forRoot(routes)], + exports: [RouterModule] +}) +export class AppRoutingModule { } diff --git a/src/app/app.component.html b/src/app/app.component.html new file mode 100644 index 0000000..14ce205 --- /dev/null +++ b/src/app/app.component.html @@ -0,0 +1,11 @@ + +
+

+ {{ 'label_name' | translate }}! +

+ Angular Logo +
+ + + \ No newline at end of file diff --git a/src/app/app.component.scss b/src/app/app.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/app.component.spec.ts b/src/app/app.component.spec.ts new file mode 100644 index 0000000..cffbecc --- /dev/null +++ b/src/app/app.component.spec.ts @@ -0,0 +1,35 @@ +import { TestBed, async } from '@angular/core/testing'; +import { RouterTestingModule } from '@angular/router/testing'; +import { AppComponent } from './app.component'; + +describe('AppComponent', () => { + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [ + RouterTestingModule + ], + declarations: [ + AppComponent + ], + }).compileComponents(); + })); + + it('should create the app', () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.debugElement.componentInstance; + expect(app).toBeTruthy(); + }); + + it(`should have as title 'kisaan'`, () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.debugElement.componentInstance; + expect(app.title).toEqual('kisaan'); + }); + + it('should render title in a h1 tag', () => { + const fixture = TestBed.createComponent(AppComponent); + fixture.detectChanges(); + const compiled = fixture.debugElement.nativeElement; + expect(compiled.querySelector('h1').textContent).toContain('Welcome to kisaan!'); + }); +}); diff --git a/src/app/app.component.ts b/src/app/app.component.ts new file mode 100644 index 0000000..1601e9e --- /dev/null +++ b/src/app/app.component.ts @@ -0,0 +1,14 @@ +import { Component } from '@angular/core'; +import { TranslateService } from '@ngx-translate/core'; + +@Component({ + selector: 'app-root', + templateUrl: './app.component.html', + styleUrls: ['./app.component.scss'] +}) +export class AppComponent { + constructor(private translateService: TranslateService) { + this.translateService.setDefaultLang('en-US'); + this.translateService.use('en-US'); + } +} diff --git a/src/app/app.module.ts b/src/app/app.module.ts new file mode 100644 index 0000000..6b5ad5d --- /dev/null +++ b/src/app/app.module.ts @@ -0,0 +1,33 @@ +import { BrowserModule } from '@angular/platform-browser'; +import { NgModule } from '@angular/core'; +import { TranslateModule, TranslateLoader } from '@ngx-translate/core'; +import { TranslateHttpLoader } from '@ngx-translate/http-loader'; +import { HttpClient, HttpClientModule } from '@angular/common/http'; + +import { AppRoutingModule } from './app-routing.module'; +import { AppComponent } from './app.component'; + +export function createTranslateLoader(http: HttpClient) { + return new TranslateHttpLoader(http, './assets/i18n/', '.json'); +} + +@NgModule({ + declarations: [ + AppComponent + ], + imports: [ + BrowserModule, + AppRoutingModule, + HttpClientModule, + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useFactory: (createTranslateLoader), + deps: [HttpClient] + } + }) + ], + providers: [], + bootstrap: [AppComponent] +}) +export class AppModule { } diff --git a/src/assets/.gitkeep b/src/assets/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/assets/i18n/en-US.json b/src/assets/i18n/en-US.json new file mode 100644 index 0000000..3a6dad5 --- /dev/null +++ b/src/assets/i18n/en-US.json @@ -0,0 +1,3 @@ +{ + "label_name": "Smart Parking Assist System" +} \ No newline at end of file diff --git a/src/assets/i18n/hi-IN.json b/src/assets/i18n/hi-IN.json new file mode 100644 index 0000000..edb4f2b --- /dev/null +++ b/src/assets/i18n/hi-IN.json @@ -0,0 +1,4 @@ +{ + "label_name": "स्मार्ट पार्किंग असिस्ट सिस्टम" +} + diff --git a/src/browserslist b/src/browserslist new file mode 100644 index 0000000..37371cb --- /dev/null +++ b/src/browserslist @@ -0,0 +1,11 @@ +# This file is currently used by autoprefixer to adjust CSS to support the below specified browsers +# For additional information regarding the format and rule options, please see: +# https://github.com/browserslist/browserslist#queries +# +# For IE 9-11 support, please remove 'not' from the last line of the file and adjust as needed + +> 0.5% +last 2 versions +Firefox ESR +not dead +not IE 9-11 \ No newline at end of file diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts new file mode 100644 index 0000000..3612073 --- /dev/null +++ b/src/environments/environment.prod.ts @@ -0,0 +1,3 @@ +export const environment = { + production: true +}; diff --git a/src/environments/environment.ts b/src/environments/environment.ts new file mode 100644 index 0000000..7b4f817 --- /dev/null +++ b/src/environments/environment.ts @@ -0,0 +1,16 @@ +// This file can be replaced during build by using the `fileReplacements` array. +// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`. +// The list of file replacements can be found in `angular.json`. + +export const environment = { + production: false +}; + +/* + * For easier debugging in development mode, you can import the following file + * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. + * + * This import should be commented out in production mode because it will have a negative impact + * on performance if an error is thrown. + */ +// import 'zone.js/dist/zone-error'; // Included with Angular CLI. diff --git a/src/favicon.ico b/src/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..8081c7ceaf2be08bf59010158c586170d9d2d517 GIT binary patch literal 5430 zcmc(je{54#6vvCoAI3i*G5%$U7!sA3wtMZ$fH6V9C`=eXGJb@R1%(I_{vnZtpD{6n z5Pl{DmxzBDbrB>}`90e12m8T*36WoeDLA&SD_hw{H^wM!cl_RWcVA!I+x87ee975; z@4kD^=bYPn&pmG@(+JZ`rqQEKxW<}RzhW}I!|ulN=fmjVi@x{p$cC`)5$a!)X&U+blKNvN5tg=uLvuLnuqRM;Yc*swiexsoh#XPNu{9F#c`G zQLe{yWA(Y6(;>y|-efAy11k<09(@Oo1B2@0`PtZSkqK&${ zgEY}`W@t{%?9u5rF?}Y7OL{338l*JY#P!%MVQY@oqnItpZ}?s z!r?*kwuR{A@jg2Chlf0^{q*>8n5Ir~YWf*wmsh7B5&EpHfd5@xVaj&gqsdui^spyL zB|kUoblGoO7G(MuKTfa9?pGH0@QP^b#!lM1yHWLh*2iq#`C1TdrnO-d#?Oh@XV2HK zKA{`eo{--^K&MW66Lgsktfvn#cCAc*(}qsfhrvOjMGLE?`dHVipu1J3Kgr%g?cNa8 z)pkmC8DGH~fG+dlrp(5^-QBeEvkOvv#q7MBVLtm2oD^$lJZx--_=K&Ttd=-krx(Bb zcEoKJda@S!%%@`P-##$>*u%T*mh+QjV@)Qa=Mk1?#zLk+M4tIt%}wagT{5J%!tXAE;r{@=bb%nNVxvI+C+$t?!VJ@0d@HIyMJTI{vEw0Ul ze(ha!e&qANbTL1ZneNl45t=#Ot??C0MHjjgY8%*mGisN|S6%g3;Hlx#fMNcL<87MW zZ>6moo1YD?P!fJ#Jb(4)_cc50X5n0KoDYfdPoL^iV`k&o{LPyaoqMqk92wVM#_O0l z09$(A-D+gVIlq4TA&{1T@BsUH`Bm=r#l$Z51J-U&F32+hfUP-iLo=jg7Xmy+WLq6_tWv&`wDlz#`&)Jp~iQf zZP)tu>}pIIJKuw+$&t}GQuqMd%Z>0?t%&BM&Wo^4P^Y z)c6h^f2R>X8*}q|bblAF?@;%?2>$y+cMQbN{X$)^R>vtNq_5AB|0N5U*d^T?X9{xQnJYeU{ zoZL#obI;~Pp95f1`%X3D$Mh*4^?O?IT~7HqlWguezmg?Ybq|7>qQ(@pPHbE9V?f|( z+0xo!#m@Np9PljsyxBY-UA*{U*la#8Wz2sO|48_-5t8%_!n?S$zlGe+NA%?vmxjS- zHE5O3ZarU=X}$7>;Okp(UWXJxI%G_J-@IH;%5#Rt$(WUX?6*Ux!IRd$dLP6+SmPn= z8zjm4jGjN772R{FGkXwcNv8GBcZI#@Y2m{RNF_w8(Z%^A*!bS*!}s6sh*NnURytky humW;*g7R+&|Ledvc- + + + + SPAS + + + + + + + + + diff --git a/src/karma.conf.js b/src/karma.conf.js new file mode 100644 index 0000000..ee9caa1 --- /dev/null +++ b/src/karma.conf.js @@ -0,0 +1,31 @@ +// Karma configuration file, see link for more information +// https://karma-runner.github.io/1.0/config/configuration-file.html + +module.exports = function (config) { + config.set({ + basePath: '', + frameworks: ['jasmine', '@angular-devkit/build-angular'], + plugins: [ + require('karma-jasmine'), + require('karma-chrome-launcher'), + require('karma-jasmine-html-reporter'), + require('karma-coverage-istanbul-reporter'), + require('@angular-devkit/build-angular/plugins/karma') + ], + client: { + clearContext: false // leave Jasmine Spec Runner output visible in browser + }, + coverageIstanbulReporter: { + dir: require('path').join(__dirname, '../coverage'), + reports: ['html', 'lcovonly', 'text-summary'], + fixWebpackSourcePaths: true + }, + reporters: ['progress', 'kjhtml'], + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: true, + browsers: ['Chrome'], + singleRun: false + }); +}; \ No newline at end of file diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..c7b673c --- /dev/null +++ b/src/main.ts @@ -0,0 +1,12 @@ +import { enableProdMode } from '@angular/core'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; +import { environment } from './environments/environment'; + +if (environment.production) { + enableProdMode(); +} + +platformBrowserDynamic().bootstrapModule(AppModule) + .catch(err => console.error(err)); diff --git a/src/polyfills.ts b/src/polyfills.ts new file mode 100644 index 0000000..a6d34ea --- /dev/null +++ b/src/polyfills.ts @@ -0,0 +1,85 @@ +/** + * This file includes polyfills needed by Angular and is loaded before the app. + * You can add your own extra polyfills to this file. + * + * This file is divided into 2 sections: + * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. + * 2. Application imports. Files imported after ZoneJS that should be loaded before your main + * file. + * + * The current setup is for so-called "evergreen" browsers; the last versions of browsers that + * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), + * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. + * + * Learn more in https://angular.io/guide/browser-support + */ + +/*************************************************************************************************** + * BROWSER POLYFILLS + */ + +/** IE9, IE10, IE11, and Chrome <55 requires all of the following polyfills. + * This also includes Android Emulators with older versions of Chrome and Google Search/Googlebot + */ + +// import 'core-js/es6/symbol'; +// import 'core-js/es6/object'; +// import 'core-js/es6/function'; +// import 'core-js/es6/parse-int'; +// import 'core-js/es6/parse-float'; +// import 'core-js/es6/number'; +// import 'core-js/es6/math'; +// import 'core-js/es6/string'; +// import 'core-js/es6/date'; +// import 'core-js/es6/array'; +// import 'core-js/es6/regexp'; +// import 'core-js/es6/map'; +// import 'core-js/es6/weak-map'; +// import 'core-js/es6/set'; + +/** IE10 and IE11 requires the following for NgClass support on SVG elements */ +// import 'classlist.js'; // Run `npm install --save classlist.js`. + +/** IE10 and IE11 requires the following for the Reflect API. */ +// import 'core-js/es6/reflect'; + +/** + * Web Animations `@angular/platform-browser/animations` + * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari. + * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0). + */ +// import 'web-animations-js'; // Run `npm install --save web-animations-js`. + +/** + * By default, zone.js will patch all possible macroTask and DomEvents + * user can disable parts of macroTask/DomEvents patch by setting following flags + * because those flags need to be set before `zone.js` being loaded, and webpack + * will put import in the top of bundle, so user need to create a separate file + * in this directory (for example: zone-flags.ts), and put the following flags + * into that file, and then add the following code before importing zone.js. + * import './zone-flags.ts'; + * + * The flags allowed in zone-flags.ts are listed here. + * + * The following flags will work for all browsers. + * + * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame + * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick + * (window as any).__zone_symbol__BLACK_LISTED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames + * + * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js + * with the following flag, it will bypass `zone.js` patch for IE/Edge + * + * (window as any).__Zone_enable_cross_context_check = true; + * + */ + +/*************************************************************************************************** + * Zone JS is required by default for Angular itself. + */ +import 'zone.js/dist/zone'; // Included with Angular CLI. + + +/*************************************************************************************************** + * APPLICATION IMPORTS + */ diff --git a/src/styles.scss b/src/styles.scss new file mode 100644 index 0000000..7d46735 --- /dev/null +++ b/src/styles.scss @@ -0,0 +1,2 @@ +/* You can add global styles to this file, and also import other style files */ +@import '../node_modules/bootstrap/dist/css/bootstrap.min.css'; \ No newline at end of file diff --git a/src/test.ts b/src/test.ts new file mode 100644 index 0000000..1631789 --- /dev/null +++ b/src/test.ts @@ -0,0 +1,20 @@ +// This file is required by karma.conf.js and loads recursively all the .spec and framework files + +import 'zone.js/dist/zone-testing'; +import { getTestBed } from '@angular/core/testing'; +import { + BrowserDynamicTestingModule, + platformBrowserDynamicTesting +} from '@angular/platform-browser-dynamic/testing'; + +declare const require: any; + +// First, initialize the Angular testing environment. +getTestBed().initTestEnvironment( + BrowserDynamicTestingModule, + platformBrowserDynamicTesting() +); +// Then we find all the tests. +const context = require.context('./', true, /\.spec\.ts$/); +// And load the modules. +context.keys().map(context); diff --git a/src/tsconfig.app.json b/src/tsconfig.app.json new file mode 100644 index 0000000..190fd30 --- /dev/null +++ b/src/tsconfig.app.json @@ -0,0 +1,11 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../out-tsc/app", + "types": [] + }, + "exclude": [ + "test.ts", + "**/*.spec.ts" + ] +} diff --git a/src/tsconfig.spec.json b/src/tsconfig.spec.json new file mode 100644 index 0000000..de77336 --- /dev/null +++ b/src/tsconfig.spec.json @@ -0,0 +1,18 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../out-tsc/spec", + "types": [ + "jasmine", + "node" + ] + }, + "files": [ + "test.ts", + "polyfills.ts" + ], + "include": [ + "**/*.spec.ts", + "**/*.d.ts" + ] +} diff --git a/src/tslint.json b/src/tslint.json new file mode 100644 index 0000000..52e2c1a --- /dev/null +++ b/src/tslint.json @@ -0,0 +1,17 @@ +{ + "extends": "../tslint.json", + "rules": { + "directive-selector": [ + true, + "attribute", + "app", + "camelCase" + ], + "component-selector": [ + true, + "element", + "app", + "kebab-case" + ] + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..b271fd9 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compileOnSave": false, + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist/out-tsc", + "sourceMap": true, + "declaration": false, + "module": "es2015", + "moduleResolution": "node", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "importHelpers": true, + "target": "es5", + "typeRoots": [ + "node_modules/@types" + ], + "lib": [ + "es2018", + "dom" + ] + } +} diff --git a/tslint.json b/tslint.json new file mode 100644 index 0000000..c740a7b --- /dev/null +++ b/tslint.json @@ -0,0 +1,131 @@ +{ + "rulesDirectory": [ + "codelyzer" + ], + "rules": { + "arrow-return-shorthand": true, + "callable-types": true, + "class-name": true, + "comment-format": [ + true, + "check-space" + ], + "curly": true, + "deprecation": { + "severity": "warn" + }, + "eofline": true, + "forin": true, + "import-blacklist": [ + true, + "rxjs/Rx" + ], + "import-spacing": true, + "indent": [ + true, + "spaces" + ], + "interface-over-type-literal": true, + "label-position": true, + "max-line-length": [ + true, + 140 + ], + "member-access": false, + "member-ordering": [ + true, + { + "order": [ + "static-field", + "instance-field", + "static-method", + "instance-method" + ] + } + ], + "no-arg": true, + "no-bitwise": true, + "no-console": [ + true, + "debug", + "info", + "time", + "timeEnd", + "trace" + ], + "no-construct": true, + "no-debugger": true, + "no-duplicate-super": true, + "no-empty": false, + "no-empty-interface": true, + "no-eval": true, + "no-inferrable-types": [ + true, + "ignore-params" + ], + "no-misused-new": true, + "no-non-null-assertion": true, + "no-redundant-jsdoc": true, + "no-shadowed-variable": true, + "no-string-literal": false, + "no-string-throw": true, + "no-switch-case-fall-through": true, + "no-trailing-whitespace": true, + "no-unnecessary-initializer": true, + "no-unused-expression": true, + "no-use-before-declare": true, + "no-var-keyword": true, + "object-literal-sort-keys": false, + "one-line": [ + true, + "check-open-brace", + "check-catch", + "check-else", + "check-whitespace" + ], + "prefer-const": true, + "quotemark": [ + true, + "single" + ], + "radix": true, + "semicolon": [ + true, + "always" + ], + "triple-equals": [ + true, + "allow-null-check" + ], + "typedef-whitespace": [ + true, + { + "call-signature": "nospace", + "index-signature": "nospace", + "parameter": "nospace", + "property-declaration": "nospace", + "variable-declaration": "nospace" + } + ], + "unified-signatures": true, + "variable-name": false, + "whitespace": [ + true, + "check-branch", + "check-decl", + "check-operator", + "check-separator", + "check-type" + ], + "no-output-on-prefix": true, + "use-input-property-decorator": true, + "use-output-property-decorator": true, + "use-host-property-decorator": true, + "no-input-rename": true, + "no-output-rename": true, + "use-life-cycle-interface": true, + "use-pipe-transform-interface": true, + "component-class-suffix": true, + "directive-class-suffix": true + } +} From d42822e053a8419d16c7d85acc0d79b9778b3770 Mon Sep 17 00:00:00 2001 From: Ajay Sajwan Date: Thu, 13 Jun 2019 12:55:51 +0530 Subject: [PATCH 04/24] Set theme jekyll-theme-cayman --- _config.yml | 1 + 1 file changed, 1 insertion(+) create mode 100644 _config.yml diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000..c419263 --- /dev/null +++ b/_config.yml @@ -0,0 +1 @@ +theme: jekyll-theme-cayman \ No newline at end of file From 76bc157135d4c0dc6f5e20b5c2165bc3b79aa795 Mon Sep 17 00:00:00 2001 From: Ajay Sajwan Date: Thu, 13 Jun 2019 12:57:34 +0530 Subject: [PATCH 05/24] Set theme jekyll-theme-cayman From 7220821fb933f10bed42db4e9267542c474dec00 Mon Sep 17 00:00:00 2001 From: suryakant31 Date: Fri, 14 Jun 2019 00:27:15 +0530 Subject: [PATCH 06/24] Updated base set up for compodoc and firebase configuration --- package.json | 17 ++++++++++++----- src/app/app.module.ts | 12 +++++++++++- src/assets/scss/_variable.scss | 0 src/environments/environment.ts | 11 ++++++++++- 4 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 src/assets/scss/_variable.scss diff --git a/package.json b/package.json index b94fef2..55454f2 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,14 @@ { - "name": "kisaan", - "version": "1.0.0", + "name": "SPAS", + "version": "1.0.0-alpha", "scripts": { "ng": "ng", "start": "ng serve", "build": "ng build", "test": "ng test", "lint": "ng lint", - "e2e": "ng e2e" + "e2e": "ng e2e", + "compodoc": "./node_modules/.bin/compodoc -p tsconfig.jon" }, "private": true, "engines": { @@ -19,15 +20,21 @@ "@angular/common": "7.2.0", "@angular/compiler": "7.2.0", "@angular/core": "7.2.0", + "@angular/fire": "^5.2.1", "@angular/forms": "7.2.0", "@angular/platform-browser": "7.2.0", "@angular/platform-browser-dynamic": "7.2.0", "@angular/router": "7.2.0", + "@firebase/auth": "^0.11.3", + "@firebase/auth-types": "^0.7.0", + "@firebase/firestore": "^1.3.5", "@ng-bootstrap/ng-bootstrap": "4.0.0", "@ngx-translate/core": "11.0.1", "@ngx-translate/http-loader": "4.0.0", + "angularfire2": "^5.2.1", "bootstrap": "4.0.0", "core-js": "2.5.4", + "firebase": "^6.1.1", "rxjs": "6.3.3", "tslib": "1.9.0", "zone.js": "0.8.26" @@ -51,6 +58,6 @@ "protractor": "5.4.0", "ts-node": "7.0.0", "tslint": "5.11.0", - "typescript": "3.2.2" - } + "typescript": "3.2.2", + "@compodoc/compodoc": "1.0.5" } } diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 6b5ad5d..4994b15 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -4,6 +4,12 @@ import { TranslateModule, TranslateLoader } from '@ngx-translate/core'; import { TranslateHttpLoader } from '@ngx-translate/http-loader'; import { HttpClient, HttpClientModule } from '@angular/common/http'; +import { environment } from '../environments/environment'; +import { AngularFireModule } from '@angular/fire'; +import { AngularFirestoreModule, AngularFirestore } from '@angular/fire/firestore'; +import { AngularFireStorageModule } from '@angular/fire/storage'; +import { AngularFireAuthModule } from '@angular/fire/auth'; + import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; @@ -25,7 +31,11 @@ export function createTranslateLoader(http: HttpClient) { useFactory: (createTranslateLoader), deps: [HttpClient] } - }) + }), + AngularFireModule.initializeApp(environment.firebase, 'SPAS'), + AngularFirestoreModule, // imports firebase/firestore, only needed for database features + AngularFireAuthModule, // imports firebase/auth, only needed for auth features, + AngularFireStorageModule // imports firebase/storage only needed for storage features ], providers: [], bootstrap: [AppComponent] diff --git a/src/assets/scss/_variable.scss b/src/assets/scss/_variable.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/environments/environment.ts b/src/environments/environment.ts index 7b4f817..2eed6f0 100644 --- a/src/environments/environment.ts +++ b/src/environments/environment.ts @@ -3,7 +3,16 @@ // The list of file replacements can be found in `angular.json`. export const environment = { - production: false + production: false, + firebase: { + apiKey: 'AIzaSyCt587x8YjEAbc0c0WPSdhrFMwfzGJtDXU', + authDomain: 'spas-a7b7a.firebaseapp.com', + databaseURL: 'https://spas-a7b7a.firebaseio.com', + projectId: 'spas-a7b7a', + storageBucket: 'spas-a7b7a.appspot.com', + messagingSenderId: '85818314017', + appId: '1:85818314017:web:3e7c99047fad2866' + } }; /* From 3b66aea12cf564699f51153b24ca5c7b4d8bae10 Mon Sep 17 00:00:00 2001 From: Mahadev Mandole Date: Sat, 15 Jun 2019 10:01:38 +0530 Subject: [PATCH 07/24] adds git ignore changes and package json modification --- .gitignore | 1 + package.json | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 897cb9f..3ff7671 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ node_modules +documentation package-lock.json dist \ No newline at end of file diff --git a/package.json b/package.json index 55454f2..92d2880 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "test": "ng test", "lint": "ng lint", "e2e": "ng e2e", - "compodoc": "./node_modules/.bin/compodoc -p tsconfig.jon" + "compodoc": "./node_modules/.bin/compodoc -p tsconfig.json" }, "private": true, "engines": { @@ -59,5 +59,6 @@ "ts-node": "7.0.0", "tslint": "5.11.0", "typescript": "3.2.2", - "@compodoc/compodoc": "1.0.5" } + "@compodoc/compodoc": "1.0.5" + } } From 33b2a6c49438c2b076c269fe6c2ab0b879ee974a Mon Sep 17 00:00:00 2001 From: Sayali Bhutkar Date: Sat, 15 Jun 2019 10:36:39 +0530 Subject: [PATCH 08/24] Adds styling for landing screen --- src/app/app.component.html | 17 ++++++--- src/app/app.component.scss | 34 ++++++++++++++++++ src/assets/img/bg-1.png | Bin 0 -> 15734 bytes src/assets/img/bg.png | Bin 0 -> 17390 bytes src/assets/img/car.jpg | Bin 0 -> 22864 bytes src/assets/img/carred.png | Bin 0 -> 116208 bytes .../img/imgpsh_fullsize_anim (1) - Copy.png | Bin 0 -> 5637 bytes src/assets/img/imgpsh_fullsize_anim (1).png | Bin 0 -> 1818 bytes src/assets/img/imgpsh_fullsize_anim.jpg | Bin 0 -> 1267 bytes src/assets/scss/_variable.scss | 9 +++++ 10 files changed, 55 insertions(+), 5 deletions(-) create mode 100644 src/assets/img/bg-1.png create mode 100644 src/assets/img/bg.png create mode 100644 src/assets/img/car.jpg create mode 100644 src/assets/img/carred.png create mode 100644 src/assets/img/imgpsh_fullsize_anim (1) - Copy.png create mode 100644 src/assets/img/imgpsh_fullsize_anim (1).png create mode 100644 src/assets/img/imgpsh_fullsize_anim.jpg diff --git a/src/app/app.component.html b/src/app/app.component.html index 14ce205..5a34667 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -1,10 +1,17 @@ -
-

+
+ +
+ +
+ +
+ + +
+
diff --git a/src/app/app.component.scss b/src/app/app.component.scss index e69de29..40546a4 100644 --- a/src/app/app.component.scss +++ b/src/app/app.component.scss @@ -0,0 +1,34 @@ +@import "../assets/scss/variable.scss"; + +.root-container { + background-color: #FFC306; + height: 100vh; + img { + + } + .btn-grp { + position: fixed; + bottom: 50px; + width: calc(100% - 30px); + button { + height: 100px; + width: 100px; + flex: 0 0 44%; + max-width: 44%; + margin: 3%; + background: rgba(255,255,255,0.7) + } + } +} + +@media screen and (max-width:700px) { + img { + width: 100%; + height: 100%; + } +} +@media screen and (max-width:550px) { + img { + height: 600px; + } +} \ No newline at end of file diff --git a/src/assets/img/bg-1.png b/src/assets/img/bg-1.png new file mode 100644 index 0000000000000000000000000000000000000000..0c0523320a3ea898fb9ac44a7faeb7b962923626 GIT binary patch literal 15734 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 literal 0 HcmV?d00001 diff --git a/src/assets/img/bg.png b/src/assets/img/bg.png new file mode 100644 index 0000000000000000000000000000000000000000..bf8ac2ff68fc957ef28d3782c430770a8bf49afe GIT binary patch literal 17390 zcmeIaXH-*N7cPn-@B#u>kdD%%D^i3|rGubIlM+Ay=^zjix`1K<=}mg?5NZM>6a|sq zLJ1H8A~irl@9k{g@7#0mJwMMF_s<>Q$jHdp$yz&mKWnZzpZUz0e0i>?K}W+vLqQm1>dEg6~0do5LELmx{bo+|y;-cje4eZJS(O0$W8U~%wkrfM5$K|ZIi zk{zk-CKny0;NEPu!=vYFkUy zxE&|E&XEqnBCO_l`ft{$$$kr9*d@)+8IK&on`D${?${G7)l*6K^l^_UyF3DUh5G5P zkh#Z@ien20YM*0qtn>I7a_Ev$uTS$HVc{d0lCB0S?_-LD&iQW5>6!|x{xbM&)9L0D z0=6Gd5u6$U(TJ>;Qal~${gGvrg!iA0p)o-xo&J8(e^}*V{G0NU5}hh4?~TtY-LOR# zx({Drm|<@E%gU<|O-m+8Plz&<4oW@Um+?LDg4Oq=Pg@0fHeQt*1vdx^ucC^ICl z@8tq1NoR!3F;%3WWzx#EY;4VLkJ2>J{v9Ha%&#uqBU%$LOA;l^e~e)lu>S**A!xwC z>KSI;G3Vk7_nAHOS>t|w8?@~!5?}I4F&VJgo$*(SA`zy@VtO=T`AOca1^r=gaOpY( zClKWMj`^)p4(Jt%z5Jldx#m?Z>x)ueF&$BpYKoZczoR+Y?Y0E5dZek^g~FYD9ah*u zaKGt2hE~C6EhG{j7MarL^9yl_%We#{wrU2aHmpxOzt5@XLFD9F1P;Pu+zT;$GFPFXK){Y62p`O^jqOm;oR?W)&AglEI)a{*{TdvksDw4h&P% zZy&8nv5la)j|mICjV~&ZS67Lo%Str&@Ub^C*}3cG|4i|gn0F35MK1}%>cy`jo_s7S)4%{rLbN*F1K&A;^hiUAYS3S`?%_*P!O=2uFvPn5?Sg>tCCpw++$sEg? zBFFI}#_=w`7tb&`VZhP~EM7YhdmhN)i%4)#Y>Ma$Y6;H;6Icm2LK|-u%5E&W5Byo~Zvwj;3e_b&kwrJZ3<9z%*ev2&og+4kjHPP(S#Q_6ce@{Emxd#SJ zgJ^gkA9QY4GJw%9-!&TedA}u=7P(j4jQOC~G;o2)~3|#ih8Nu39c2aD5Ty%8NX;uQ9doQ>v0>nAv5=>8~XiX z@7=dfqTgJUR7G=V)m@aw2hyI3oJ z2iACCiWObmzPtUC2nTL57@~n7_GU69%Sju3-??Eub=!aQ}cZjQnJ3ZHlR5m|o8u#utLi5q)H!|*I}f|C70W?7cW`V}W*(yFgyOh;&X?<=5gb=h1pYMOMl|h+2KPRQnwf zerLL9nyQ7p$wVPevFZ0z2Sy7+EuEgC!MBuwDSe`In{{2L?=9xJ*s;=@4fw}TIa{V%qbjLWewY&t7f=qe}rNz*64j6`AXYOdhDPK*vc8BD{z}-Uzh$P?^>UnExq% zC2+koWTkfiykmI&LDxYed!V?2j&*z%VnR|o&KB59WF_w*8j>$9x1SYB_m-gE5BkGA zBO7k7S>*9(@riXmy`*%T8?R3nm(bYnRYv-~lZQsDPcON`_2YQrHHh?F-hiK@)Y4vf z!^<{g$*hnu$KoO43I02|aumf$R(kdCcSCxcoDGq@Wp=M)A?}uDv-i3es_i)bMVoGa z-6JwLv~=o$;x=cEW0`X&7?SIpz|+0Jn<79~{5l_0s_gdB`4*yd`@pi&!oKxrf0UKv zrmS*|R@aJqY8eMWA^6MvXAaBN2FsSzjVWppN}F_;nU`OK3|=p_Jbu*M>k558Hxc`{`)Ivv0V%d`VrY~yATNnL#a+_ zt0)3btJr2b5IUZn+}mBw@QmMw?F;?0=)ZH2eR(VrJ&?#;WB0d_f>M9NF?nF#lqQ}> z6l6wU0bsjCWd4aiUGZN$>dk<G^(-*Do?0*F}ZFG=2fn2HDnr zf+E*s2k!jGmrwlY>2*-NMcy`W1yMQvN7!vlWlx>5LR>&w+~6%TL*A%Tl|2WTeuGr& zVSH!nBSVgsF+^|igw2wMMeLn=U=xn4zYdZs{OWd`CnrCJxG6C}!_;i(jUA#0UML2v zeL!(QGMr_naeZ=aii&%#6TdfJ)*hmP){E17sTJ2pPi80&0Atgo&ufh8#rCXxfoI4< z;^HivrMiI)GX@xkyq?@N@(miKmH^T7mDCp3lI4~Kk;TYr0(fx?LLH97-Ltg~G41^B+LzaIFm`uPGHL6#W0*z-xj~?um=G@GVk5%0^B@1@?aYQP9 zQ#2zu-vTA(nn@;oiPq6`RD{d!(qr#C>}p~kTdzrX4`aJ);usP+M|Eb-^PI{5HN}3w ze`E2>QysG9wE^3oolUB3+!Dl=QP65&2f~X#XBCkLhj%3T8a~qPT)>8o1vDSS;NZkv z-FN^ksbP99N#MeR3eFX95gR=j(J1KHQ2mIsF8r&a5EYqG`>#3Wa3UL%cA9V3s zHKIF?T?zwaI)gA3ZtT+eaV|4_$roms?*I?hosrxP8}xJ~)06}PMd{;ty`xPXtf*Er zbbCldJi7>OKF9YoIc+1EIbs?g$M)`9(~&>m=WeN@xWgnA%#p;m#5jp!{(1`@Y&vhh z7e0oj+A~9L4>f)9B8AVIcpn%$`gd%f1HZ9}{}*AKCR4Ep~ZJZg~*Ke*BHKu_R3yyUO45 z68L9|W}+aYDG6_txR*7+4VllRIuI;H4T)qtc~)9KvbARS#y78lagDBrDd}gpJwEmGi zm{SvWXtQ)LrKKzGe8wIhbA=oJnb!|A@Rt0y%mD0@qD1YW;s8P?m-`x#tV!elyWB2~ zi_IJ>c}Z;gKQUPE!5^9@_EUGID_H6e(zj)x6#K*l+V>PVc9qE25rV4+=Utcc`gYY);w=u>JYzF zN_hgDV{~#Ov#L|RHm5H@uLd)X7t9;UHpo?vPWTaM^S<=?IisU*rn3fw1)@!6DCh*s zejx|qtJY)>GBZ*=8TA#1I_2O-k4`vJtrl{8NjW`vwE;)huu&_onI#7hmke(>!4CP< zoDMSEi53l^g^C7*<@b(e3{5`}y$+{&n4)-RlN(@qlmrcCFdbYc1Q{u4Nr=pK9d=8 zVc3hU$BY`v=8qfHC)vLn(335Ko_9=a(9arf1i?hY{4HW%UNiZ@anRu3V{p^Hpu2w= z4Yd=3Zk!x;md^29{+$*K`Q%B&t4Ft;9)$=LcKRf{74ahseWPZ{Mw$?i_SQ_PP**N|KJ5jspP z!8CyJ+|HY5%jh4V4i~-F1Ire#nq_a1={h5&N*F9pioB~0kQk#&m&NivH%{FpSe$Mo zFyTwey;mKACYwL!)Z^^7X$1F&KB!gCc0`N$-fsO$@(AP+!b^p(M84k+ejQ8N?7vim z<~z=aP9#X{g>%pv?*_j$62W>u3*1_pVKUsU3(f81XVgjF+^Doapo;k{vJ>n@0NaH_ z3n=VDbC+`*=k)5B%2sAzMvzNMTeU;Obw8-!MMSs=L4N#zp_p`urXBtfggK>pLc#VeuVNkzs) zwMsU!Yzs};cUvh)q&RAs88BoE&tx>K#+)UzBWVMr=}#}Vbj^=!vF!)|EhJ+js9S7t zZwnsyz)itwfMsFo{@B{Q;F5NoJzWCR2Go@-9Iy>~VLVesji1MsHca}4B1!(7dnHh| zSHobv&&M!?i4-?~Oln0bonk_${Z*!<>LX8$_F2(NkxHm`X`@ZrDz(aja2gF6dbX?k zX!1p-hIjhD+w~~QU~&MFMK63{2OEDhO%ZL1PTys!uMn!9xlH?o$$Ly0YP`d0{XcfT zhXB@JgQ*hetxU?fOt@SGqF^J#u;0Hab<2ba8b(G1tdq91x8*}7xN_of*kIy9h$k@P z#e#eF&FNnMMK41xh0EDZfPvmpaaY{T;?PhVjt=hUSDK6^DT!n8ol`L zi7SUl^H40hBj;~Oxg=FCq3;^G|9pEyc#EY3jP;YdlN$;<)PPz}Sv?}iVc0c8f%gO- z;2*J09R`B5vIgQ38U4$v)XHqPw6RghWet^e_oI5&BA;fm)S`n+`h z_~*yf%|MkK3+}NcUUoflCjruKh`afqm@5RptyrTNNZff0e@0iU4TP5@_cQ|6FAFr@ z-*ieBhuYPZLH4VY{>VnZKS701ah(%lNJ=;IK>_iy1dbx_Wyku&mIyQFgDuI;RUdNq z`^``+@6jK8hx^5SfEnMXjY^>s%qX0CcVYdhm$!)7bY3*)5mcKnQvS$Nf0#b|Ycb%y zZCv_fdSO zkp@1c^`DW2mq(hxk5Vj$m;H1z>_MgRccx9$qanmw(!2CH@vNVR8bs^R@Ud;VH6B2N z`M+=+OVU1+-1=l0%c;0D)qy%XWvNOwIDs@v}`2E+CR=P3w`R%b)0;<$hXp?P)?DuF+NAe*q}#_J{%V?R!hbq41O655WV66>9_ zn?#QaK-eZ86dU~^%_S6Du2tT!@ZhWqY){JD?aPKHid-uO`1*oE|B~_+u}vX(ppNK) zVya(oYewpyT;6Lyc726qj3W9g=o>HKH2xjDSLn|>EE@VTW&d_**wR+>V8RQ836Mkl zyIM_84>ZveVtE?x#(v*eoqx~NAGCY2J3I?8*MDb6b`mV(KHx90T-eFbb4^vVo6JLR z{!c^Qp?iAZ&iD63JO4)lcf$>lfcRsRTq0h-hSq{n0nn8KBxhM%)4C_$(}1NF+=c~x z-M&gv9(XA782J9u^PrvEzT07iP8V7IG&bVH%m-+$ecNHTsu^sNlO=oqir8@36;R0;WxvsGEkvd0VkU z*EGg1{cC2cS=T?&C<9hgWykUVE^MsBKDocJZ#_wBTSjw>x_);4H@;~-NB^%X2r#9k zB*%OSMvAKd+3rY9qI8k#F%>vF+`xoYGck?`vOO7?m<89^Bu6&c6s=ElqhAxjQxmT5 zU>mXWemLjIX8($ucLyJDtm@iMvXpp#9)l*BPS zWjQBlDWay1`(AI4>w!#fkt$eZ=Pzvka%NYM?ULT$}9 z)w{TJY|o*io6p^l6Q(h^vOKQoVlTk=i2TGO)fF`TmdxWXw%YiOmbV3cFL@p@b${*H zp0hPY{gMx7aqWu5R766YnND!y^lRiT-G4p57OLKX$CuT4b(nC!a-hOa^BrME4^WFU zi9}U}-)ZlGKp3>2KYbDBOzsg`+cuLC%8k;l-1l_Qkg02CrS}1n&q$_^+egCa$P;b8 z!B`5R>9<^smhAafFqzzl-8H^XFc0!eihsp+Ai4T7vRIq4J+7Kk`;+bp{mW+AT)Q)U z`GR-SXoTz1M{>zqgeVr99=VhUx_kpMOtao9!P=PnBW>sTL7uiS^cZ{*7(+pb8b$a= ze?5^+e;{(_ti)(l$=eb8bO59mMRKfvBjd*PAHf>1mT8Hj1)-xAofM^9?mgT5Zi@GI z)?zxxq7`^0uCW-BCN+>s9`NC2wQ8rYaqTU>>G`eT`RBUlQ!x;M{$G8kf7))F#N)f{ zb@W?DXflMQ!ZhkC$yqV!QA2%(EyG_$%7{oDT*MCo!7?31>5gz0?PTZU=Md#*d&AUE z@mGi}t%5{?yUvd4bs9c^epf1FEPM?~+U?wjsssxvq4I77D(IY_l*paZw1&}qi+Gk` zaNON}R^SU~y=-^`!+zU+w@BPCRPG3crsevPZ7IGBDD?@uq?M0kw}CoD$I$9&1@(3t z8fnh1G>P~7lKxPMl4F&0`F1FzQ`xk|c;*{dWh5egl8mj&>{FNSa<5G1wVmQS`5^kA zr;E^`6V~~K`O4{QWVdrwXphDPJkLG$+Y#R{asTz-{dY-LWMsc-|Nl{!{GZjM6j!|H zhHes8k-GI8d!MBs8me=$B%W>WGbtcmWinLN!b&_7YrF7&)HVB>*pB)jO&|Y8M)}%L zjtJ8l*`|vE>mQzzwI-|B#I!+%XcF^inGJ)81@k$<&fmfP4yz*ORXkpUg zj)iiM_|jW*zvp-6k1Ve4KZG z$>(U0zlKk7e?kF4AG7!4;!-9nou?F+7d>zfbyE+Oe{l7U5IXtss^Z_RU|jk+;+6# z?I?eZx5ki!IiN|>nc$#Zqm9SKO^Pz<2vvKLm2o~fq60J3WeCxKE+Ya|NqlXZnq4fZl-=6hrzM3#S` zije+5cS$4}?;pC%)`TVC7G$>LJMG$bpEz$eaDsX2Enf?X@2xm*dps*J2MyWm1+&^IX!&X-!WlBF%2!54zQe%=zL>*!W(@C3V3Z; z72vvSeOHEg4q;D$&16Tqu&tn5cN(Wp$^&Fo#95pe1RBoMs~p|3FP*meZx3`)D~&O*WII z+xl^#%FPf)$dB;-<|SdeEVkQChnc(u@e=dVd4AM_W*wev zJT*Kqc9_-MaN^YQ*EwijDSV{tRtU8UH5WtrVjm*nA8u2uQQj`_3Y??%T(-lMdSqWe zKW^AGc}5jsY^q@}yM|M7wR|HS7dzP7%ZVzwl~22~ZnLm#qHXNAc?y~%G9+`9mD=d| z{yy>aRE)4En&G!&SUHNg_6TJGRr)2 z&&CT7olegwQ(7Jz?lTihU*~XMy>SGC)PC;oYF2(=P_g5%ObDozu-p__dYNqFYD@Mf&4wThT(5Sl7?^E z_EVZRD~t*YM;v>%FGaQ;B0qiB+nJ)v8PL;e`NqqsM?b!VQ>O&yJWJv4-O1I^uJiu% zrYNb40;zMWD#&1Sc=YY@6MsqYfV1?}WqlcfF><`pKDM%YYgL1hxVn=0gPC0Iglm9=&5;Zf#M4|?*H9bAMph$ z>D>Z_w1o-b@mD~w?sPkGkdzkhFkx5^qf!~xp^nDDXZ+(A@&rN#8j_}D-&7C7cSqh` zMEu5UjZ+WRTcUpDg2yV0BJP!Ye-^g58{Ndh$Vzk?8Mj_fP(pu9s}B>}2~U~K-IYY> zP4h}{^rYrXO-1UM( zCs)GNPSirpEeA3q(D;znleXRfM;OB?O>L2vdn>hxi1nSJ0lDfuBNhFRs)s+izM%zbyRrwQ9=8byL^)=CSukzE~p3U)y z0)N~COH+6^L!Gu>8E3#j`KAfBAnu@v()L6_#lMYo{PooAt;~reAw<&6gT~h(- z46`5&5=yY??1fBIM4BBU(4@gXx}sd#gw-bTOo`0U5o{G2^L!I5H=` zpefXQZ%vxgm(`{bVLo2Y;4Nx6?-H3*6$Bps;NunW*bd&TbAUuvpAFGh3r{+jQy4=1 zhH5+}vRj&;%d)EuS&M zt9TbyUB!crGGc8lNNr)QX)yVyH@+VY6$5CV*c;qh(O9y`jJb4fooIS;y7s54l)|W$#BAPuaTTU*Q`x+x;+dok-WG=69m9 z+@4{1rHV}sheY;wTO(tc_R)b}OQK%1ru>9j(~$k3-FQq17&)E^m!~9RS54{ycg{vOd&}B- zpLvVHZ@wFNcv7V74znmFSoWBc=Yx7)b&BHDSSX-asnoY9j;m3M!jIjn;K8AkC(vz& z8!NIp&Lg~Kw26l-{=L|jGb?Ly7g1j`1aUMAu-;$Fcv&RJsKU?W9Y}@inE8d<9Ozv_ zG6_kSNnK}N!*Uoc3#2|V#YQ^b9k`~hjBd~x*mG&I?O|nGmtyreL6Q`k$Lybl*SI?p$pF!!? zTRqm8r#PlEipewSUJV8_&f@#Tkf`yJ~|vxnm2XcH8{o%_~`ZkSyji>1HlpR5TJp8KNozHy&))`?yIml zw^e^FWcYBpVXRPDv68;O{o`Ky*jhXF$R0N`M3%SpEc5iR=6CMR_ho}u|J+1M3qyER zm4(JBtopGo^mR3(^h2EtlS^AyaL^COw=tz=1be@|6wjlQT&tW~D#r_97yQqU&PmI* z6Hrt8R6SKcUg0J*%Db`mAB}FqMi{^BdpOj=9PaAAzSLwL z))z&5>NxoluE2db@ZA5HK)#TBvwgqc)dxQn0{xaMO(QDz>H<6OZ|^*T%M+B=5e3-+ zhvO0Nd-V{JY{wNRo>8tkSn8ocSewoE1d${_F)1MoBYqBwP{_FM0JGhrtiR@jrP(u2 zO)CkEIvaVrqw)YF@iiSEkU*B z1cnu6sJqRH9U{u&n$F5&k@Y3f`eQLb5O;bh=7JlgZ+!vCLOwzwzYPzN%4>x$&<)K^ zsBjB}!szW{r_3@TNbi&WmvkRdC-f(n+pwm=>-A3HJBl+Ej(WwuG3iT-ZANY?p?q#; z3SU( zKlhMcTp>ECcX%I~fmoNo)tq5Y#JQ8q&rnWNj`yc@ToDwnae{{GuA}N`uI3QRfT1eOs(XX9i{j!iXjf{Pw;_@nku z{g68AeT19I%Z=wcXR^pixsad$=j}yGn*LH#kD^9pe|q}`15&s?y;(_}lOW>tWJ$+t|3PmBLl~zXa&Ku6 zo{(7Co%C>_33E6jwXR$_$c=*$195Z1WKQKb*9NEsk}OG z+z6_keMU|Ub4co>`XvGuF<7REF#a&i7qSikA2KfZvbOJ~5p^XqK?qMYHP8Z4nwx?l zsU0B4lLfW2PCD2`l8FQ}A(-nLeU4_f&a*7|*ti4jO!P97sERE;nj2hJj8BNi8*KEar2&I1e31=0I;5zDFtV zsJ}Y%Gv5BS|9WC1xgv2^Q4AY-bvE@5X{x}xN%$;TK5*MWe0SxELCLHZ(OV5947rR# zcxOFPK6b_G^(DxR>$zWJ8|T$@e%@EU>N%1*UOM3!5g`R|A!%8ta&lu(;js*3{#+8F2d;hbKJbL8M1u^W4*+v76otj0A$T{$$JN3Dg?Bn@PQQL`S-TNHmMhuY1f46+~{v~4SzK)Poggv-fFVl6gu;oc5 zeU9;)se++ZnVh`ry7VzYUz2qnX*#5d0u85+K-1Bs#&+xlS2vEeutG`&5a%~L4)DWXvRfjauCmKw_00?{-%&lJ zVM`Xfmmf6bzl1`%Qt4jprm|q>izc^rxHA)QoJhKPZ8ZBQ*swRsJ9vB%H?!C^lK0-g zJ@F!N0Qm%4!OrpSrBB=SALn3T>B&%^syob8;Q*{q6NH2=7L4Alf9Gn!&%lqlI*(nkm71KXE=FEYHRedqQ}@r)iw zf9q+ve^^E?h(PZYBKL3;68v3Hb)LGN{pRaWQY#bo!%5Kj*VUe_vD!4}hVB+@OXHS! zU7bzlH{q`!b)SMvX3s5>enx?ZHZu2fYes10O_&OUTp_+r<`;Q{?a?qs`6~(Rgs5$q z+%mak}%P>A04D1bZ76&m_+Jy zJ0&h@@PY9U=ae$<9Ap1AsgGOp1V89MK%TyBVkI&~@jS*DwUcc6FuzdbDn|hC;o=3w zJ5E=s2trJujOW~zTdk||k+}=Hn6J($E>CEjYs&ih4R!+|yn~;FfxG|Xm4|XGex{rF zS&H~KlR;D>DpVYTVBAZX?bPXmQV$S<9#T+QQu1sT!SB&rd3HlYeXkM|5I84)G&b_L zw^d+gnl|(8OCJ|boLhO|b)wR(G!@h@?D1ocx?_?VQH@qn`jHD>!r|p0C49zutQAAy zxf(n7MdQP9G2?FDuWnGhOGA&|NYTVA2j?C9_~)y-2f`S%Q+d+6VT3voN9wBodJCHat`(! z>T{(wtI0&B*`x@)sx=zbJb^Re-CiiJ-Sfa|4`kh5PrS+muWFY`49ZJ=gR4$C-c$py_!24(sh5D%D zktax)hB^2bIN-$)+_&Lv0sE``)J5&~GlDQCYG$FYvQ<+wNwWFS0;diWFpqsjy)BS?_f#Uk1{j@}nYo;$vWe ze!fvqLIc2PA2`RdGc)1Ggu8L~S@SB+92sQ@bmf&X$s4HaEDylu<~4ljPmSuMma2*8 zLtibLdR(=}Gn10O9uGIkC^Rg+Lrl=+;@G26A{c7OJ;e;>fk^gCMPCXszIs@FvKpw) zTd|2|%C-8I$B@{1uKG)n?*M;?e)YCG>uTbDU)|tCXerJ)Pi(9bE$3VGG{Ay%(UP=% zeB09oj=R%z5*Bb+5ZUPMU*$BbMKhJ>bQ?sYOc>cSKj^C1p1cXPWqD$*Bh%#k9OlP= zzwiD5%3_+5&lir{S%*-%uEh;cHLqA65on1Y=v}e0JOE{7s%_u0`ZPuHG}|hOD6bl* z8z^ul_SQD~r+aA7ftl1~Ya~x@VA$B&ds7`3TlTxMI+y>}VeJaml>4c5Bkn(#l4fvw zEbVg={locyH0TrgD$vm68LJe9jxp|svbIUAh$kYZ#s+Z@Xr!y9niOcAV)$I=#x`Ez z3RBFuu1@u|#Qs-T2h6nibWY7Awv%AyGv)_NPrw*mEEKf~ef+>&{TPelpOf|QFiTNe zY{A@iHVbjiz3n`oWIbut%K&Q)26BK6I784Gm@qj*8ZdL&Vr)L-x1y59yXPFXQ`xP` zvA!5eJ$*aU@`(HsL+n;`PZw+Zes$SALA-mmbSw>>n>Aiy7N<_tli|~FdNQ+#r?OpX zdB2%lPA?Ijt8K;tu=C7*YsV_5Z^?{KIe9?fh|tB;rXVMl(>xBxpCgA1xa4tVM9wQnqkFXZJS7 zv(|L{>B!=uRqxt`GZW?K^(pQ(sj%Utf(CZ+t*u;e!Zx?TwXU1knB!6Q;m^AokR#2s!~b&FQz+ zzQC&T_X-fRArATu%$MzeKHu^>E;Jz;vncN9A8X-f(qJ7%EEz)#ZUw%ljjAPnr*Qo2 zH79mGwEt@G)jEzZe;CxgGZo1Ve($(~LLGNhL}G6`T!X({6TMbulx?h5;I?DYI($qsO!*N=zWC+d zptJUnON!$AcN_OzDm+BKNR|PiBUc2~O%NY8oM@`d##Xtc-h{f`jXYqNDWKThmh0t5 zc+?i6L1QhZ@H#gZ2fsanEq^Z|roegqO2>+Rz|{?3Kh))ph8t9L$aV&+s2={HT$+d#G#( zWghMEs)a;14Tkkf>QL(u+COi^t(LZ5J$j$SGb=lpL2n{_wj^wBLno42J3=J;9=cmQ z5}oG&tGItwNHDoKbuBj@pO+D6>zev8P_`3L;`NBx;M%h+HQNI>khmf1adVH$%axih zf7@E_mz|10eI+Y;$4(c2*gq0Bfrua-j1CtqOvn+gPOR+=)nzG8yQr}wc&3CPr1|tz zY_TGCPBF;QL~g9p7+!nB0^#hI7U7*bh9byL@yz16Z@=|7~8_VU(Kl3-|@l_t((j1vh6=9fmCEwlfUn(k*2G> z)5^`S5r>DaM(M3!Ls;U6zpr0q{TAod#7pEn@9W+P*;hu!x7QBgduQZqIz% zkCh{SA=z>J4nKeCACJe|n~UjoS~OeoO;&%{kJ-0|ykb1Pyz%;}eI*qhNN!Xy`Okj^iqg--YjNF%E~pVLkQ36n0%kVoqlL-*7YI|JJ;{k zUO0L3>HZl5!WT^(!ytq1XP8YUeOtNvw?iz!2)Zs_JZ!nT=<7-B%07CarKn5aEPmLD z7LANrVS&2Zlu7A~;jp_?ai|H4de`Lj#?wd+>30>{HN{R}l4}%Nd!KOSlkEef!0PbI;z6eS>>` zAm&HkO^$uz zKj}?ytbdB8xSo;0dVW8n^)}lDx$mlX#W_(#qA{9SdvWdTv))4J;#@lKK9t3W{~#Gq z@)<};5$|cA4Mkq4&uXT0P*xy~*LO9AIMFCN9o7#>>*T^xLbQn`{KG6yd9 zvq^`hdnoIT0AUC3kVxM{$?b_&Z>_1MOex(8ZoAmlf&I5@-}crf8R;`L&X5w(-oc|a zi0#_eD-~i1Uvn^Pxb5$~#@V>@_36zj(J++5@r$E0m*{AuO)MMG1Spm(0rU3NO9#|R zw65186;ngyiudx=^?>VvKtDWr|6xWKt`B&J2_IgsfQS9R`~*&B!Ydc zfT(T?y@FOx{gs)tq5q~VOo-SfZrtitHIGXiND$T1{bvkSLRkS$*CTjZqNemzM}w5= z5LW)y#8jN)Ec)Oji`vP$B+pcRRmhav2+#Tq^x~HE6G{M5i&-TgndXxe_WmOT`YrF>)wr`GX|oeS~A;^!fV`{Fnaru#YPC? zskwEpE>qAuPt?;)Iyg3oJyxKW%xnAM9i#0?N_3{%Jh1m*Xoo1flf z+zE_DS5i|Q36A!xzw_o(XO_%&l!YvlN;FN-4u12n1^VFwt3aWL@gcsp?c#(} z=HL#ifxqIGPA|b+<94f*p4`1dqW7G@*^R8s`0JLwW{34zU26P1`$QDB(BgvWlXzB8Z5H2=om2 z10vu-lJZX#dpmQ`t#56>NMi3YTB03L*dK&FNKZwo|1M4Ltzd&&j_<^#^pmRjT z#OFwe&z~nD0e;#a_&$h)=KPf#f^wu+HJ_8+bfy&wj7cMBfAIYm-P67u4&fIrZ!S<= zqrc9;$a#y4`!^oDXVB{>*(s~8yK3uw6L_Ywy||}bNBG{^7aXO z8ypfE_AdNG?8mtHgioIn(=#%&zGmm-<`tKemX%lhsI01QXl!b3X>Duo9~c}O9vK}Q zpPiduSX^3OSzX)R+dnuwI!2wKPvas25&t8szaslDanS&Aog*P3CLueGi|Cvua1qmx zoWCJRdPPo??78#Rn?ix)v=3s^zW=(wF8p+d?uAPq#WfC*SGxUWleA6Igd4>Q2o9*T^y2mxcy;+790!(VW zCno~e1n$ui4e5%9BNte}ICpUC5Nxv$f)9Y~HWNS;*?B#zh4yR%6J2ro63j)UF&oH{4I57(0v1#e2Wk``WC(`NH#-gq%`JMuubpl z<+?LfZ>inEQ2cpWu&&qq{76uZP>++9%lH&}cVYDTd+<>vCS!+Vq(_DaH9uEq>5VLr z=}B*3zlx70iFIAuG<7%6oH8L=Y+7s?g9oB~h7YqtH(&hvam(^Riht3#?EA-D>#3QT zZHr0KPnOr>?zyzol$tH!A1x#9mR)-ByUo|t7b*;;?H9>D%+-2O8zWKvr1sSYZ%Mew zy9bSV5i1$AYx{YYB~X%p{f(U(;?Qsc$R=-Muh=Y#0FwWTlHYwn0R7^uk)9h)bT~Jw zA}@TEee636Y*%S>P_Oq%8}m+!$Q6!nDrx->pS7>~Tvj6S9cia8k1;hW)uIgQJ!Uu`{U8x@SN-;6e_sgV74vH~C{{8Mv`h7QR0yZWL zUjb!1XHd+;m#SlRA>v$2Ov{~?pF9Gx#x-rzJ zC!GmxOjgBZVBq3RkcfNTK32n}kn&Oj=mbRowJ>41iJ6+9do(b7CH0cswTd!pj-jF} z{?dMIX)o>(1rHk^LM zo+4Z+%f-NPc&-5IU_$`y?-D@K;;1KNyt&ZU2kZDM^uN76g15SHCXOAj4> zzP$SWm6{SRA_v-o#LFP(Wm)3%27xSbCxDFMCya%-vTOpVrv-m+W>$03*27bGZ=ylK z#^Pz1*ta%z;$&x8=3r}-FJAsK6j;tx)xU3~E3(cTC9@})--@mF+OMo29(?wSn>eq) zi4NL&AA(+k#N>nje#jdC!$Xy2ZgMlFA%GH)C^CGP0Ri;)GZxMG?@#sheMVkMjGYDn z1czark@exAd7kbh;C#4fhF(K<>cX(>70~^D>P`YE_`dYDxqj`+_(zXl#jrp7@W|Ak zn>eRn`!WI4$~un+5%H#%f{}*@h9MU&7Pcw{Q6#~mb`E>%{$t}DCf8grsp)>z{G4Pslo5XhD`0M*B%Qc1<#HtmY zk!U^Xd3Z!B!;S?KtH$|xTi-8U^Sn*cn(!XX)r=3Tj%t~MFt-k4kj1619vMk`O2Y9~ z5NQ2tY2OwIy&LrS9CzEtM{AyMFre3c%atJgHgKh>vcpD|1liis+&;Z_)#yyj77IR ziTz+QKlqh|`_~aE46@H22@$xS9?lzvHabtMDO;aEW2oTk*xUUjcf~hoU6(sAGTEdr z#Z~}8rk-A7y0RK@#ZRqjM-@zgiq}nO7@<60*1?R6c?V9m8bH~tJdt~%6BqZ|!a{GzeH);N%f-O0wjeF>BrrISK;ovv{sna~@R)fR65c*mCO z$mDbhpxK*1nx?uEKr`%EyV4VviU{Q50G^BhDjtzEVOhp%)cZ$n2v~V0HM_1xqIH~5 zN_UaVnc&YrNdfikAh1CTzzbxbP>dB^RDIh!hY=mMih+IpRC!&>vn5OI?EaFyUUw5H z9gPIg4j4zG>+WQ{+P^lyG+`O_B7y1Q+cyG&EB-u?v-e*qojD;hB!EUZ@DB=fIefax z67Lke6P99o*d*Jm#9F$IdQ=EmP9}hkTY-87TKs>X3UX&sp?&w;-p>e*h2-O(o3bpN zu61{TwAMg@@g2I*vrpN!_P;*WCu9-|4$yiD;5?FM!}g#wWm$C29#BBZe4Btzf$VV+ zK!$-u7iSK%oEA?ApsGo*q^EQ0N1|?BSSWOXpA37E0Fo2UAb`kcZ~$spfZ%JrM;e{N z(DV&Pf!C`T%WG&izJ(H7dXXx&kxN%4f({GKw7>V2t|AVNe%#@kWy(ynBF~fgT4#c) zz{siP^RA|nDwdaB>dxkgVFylHzCqkfF5<@Sax}11<~4}z?)lXZA`&6PdLc=^t8IHn68D~$}7ZQfxkjpQJ|>=T{6o4elBXepe#HP9EpwR$2>`g|uo zKjL_KVgs>%f~)5VenJbX3ko;nMhIZEKj_LS(1r%a_6J5N=)~juAxP(I{^G=%P`goR z&rbrV&ahP5RyrL&Dbl~lT}0FmI|=kI$W=j|ZTD6H6cM3$KPRnytSdNs>1#d=@s zgI(JscY1iNY@T5qoHfJV-0uSYN2olW&LccW{mF-qo&t@txpTQHQ5Ie$!*~j;T9Q$J z?5}Cgxaf+Pa;2Ypu>KFf>}VX19MY{G?y=_E2znt(R~auUj=g=~9(w7$3xp93{XG)4 z8F16YBuL8q4Ud(gw6m&ZfUR7V0bTLe4HlS9cVSh65t5(>N%P_S*l7C+b`ftUT z0J^yY6ogm^mY4|&F@(%=5 z$hkUOqKCBnU-ZEcL(G5~g0A*c#lM3AyqwN-Vja-Vw(;(0QPH2VVd_XICb--`4 zts~IDq0u@lj^#ietP(&m5cJ?B*G=Tg*U4-+rtsH(g(t(REc2o@$`k)!=TFTwg#5k8 zegLWxKrf-$-gTaFSSF8U2*0VnHF4UXsw?xS>gEAw%m)H!ARGS>h)VMavAKI>g0#Ag znHrlJi1Yw}ugh8Bn{j55W+(KaSS$kp^!xh63A&d|Ucq(d?7e_>soC(oGEtD)<9O0o zuN2d&qd;QuPMWON!FD_#CS!Hvess3i(XdDB%Xk}RP`G4lIBI=vrtt)8;d%?6@oobv z7PZ&7e4L1jd-!7#%eZ`%{?L_bE zB_+%sG@f?);MDZ{OWP2i=x~!PGb{mdBV*(8R+pnmC?r#t*X%;+qNAui?zf_ALWA=y z9dz@z`nQMBQ26AN{sVmnL5|V*fJ$ky{xYNrH{x8O!BB$8RL}4?eM*^gA2LE=JopL< z?(`DLbNQxbM&r~okBFgeE>NDX!LnpwdGmdU_x-?wf?yb*=?hc&kz2KVGDJPox#=?e z5_4-_mMgPYK33I5U2~Du28d(nSKg=rL|J1e(qL<{IN^nXpkYJX*OqR{`vW>u$>}b z9Tod94r6eANxq7xc?Ww55v=faLB6KPRux3+Tl%*H7TH}JmjGvcAq;9eiAXL~)V65v z87uB=jyIRn%i1@AKTA*d{q)rR-GU~&+fzkb!>*>n?$M#Q6Ph*?ud==D8ug&mSaX{> zlY5dARvpL+`9Kk+oR-JYEyGD_ao6<6Smb#rFWdQvdOomyw6|Z7$MBV|FCGWB^bgKk z^Y9st%Um;bTa}I*RMgKjmA^eMcT|wLM?HpYRA$ZQ4|IPAZ#yX}&7KM(fYjLA&@ZVA z{jUP&^kFvk0FFn4XU#MiZf9|pKqwFoynH@nX&P#Jyg=#U<@%u`TG(Lw5eZM1appJU zeL8)ipB~pFr%Iale*rQvd>ilmivaS2@8${ddPU&nft&t>9?%#J4NR=|uJsmf{)*vD z*d}jnVfJJl;=;0*!}t54m=$O+$a)pIM^y$?Z)I$-evzq(?OeA~dHB7^SFw!oB*|2y z-bY`7rcA+;0FwF*oSYh{UeY@T1JDI_I|9f=?<9N$Im>d29by6OAdkIWY+XL=T-NEt zE5+8D7WRurNH}m)mdPDHM}0y(2?f@4Lm#;lV*&u}dywr|yeMaR#@#}J;>t(Ew_Sg< zyjLXkh1-ID6(T60t%@4x1!&?h0A~MMt-PmWBJG2v0oT^$4jC&p;vRdSC#1MDHCE>o z%2Wf(c?F%}!rFGhu^Pv?l7&6NiuQTQs%41-Am_u^fFC-uX6`T4u}B+@cl0uxyP`dz zZmXX~q=n3B1F2;C?%jLgucHC-MDX;vl_O*QJ{wuAL6Ms}?$(xNL;QtXZQ=rx%FJ0X z&W87mc&QNwE9O_@jqhwkkni5ZWl=u;I8nB1@)A^RqSe@{Gg52P4T|I zp;Tsj!LVh;?{=&zvAX`d!DV;R0VfmpADRku%WzZeTDyGZLU(B%`D@wP?G@MdsM0o26ppKWUJ$g@wCRbI3uK*xMzEDQ~?=ewSErR{8AM4Ts4dWRSuHoS8TMb<&y&2EeH_@)SZn5X~?yO7nHjHkB?+PSvKF zx7{RTV311nNd#I&pos)JMdYk3-62r=OrRrrK9(Y9Z|lifs!O7y3B zfDrtkhl5adeW1Aq>KJrB0#E0uoT{cfTX;x%^qI3nzeN2p|*&8f9e*FhE>1mn4s69D(e=<{atXQwVYs(PQ{KdIgZ5@9u~SqgmsW zW{m8clc$G*1IyQ)uwJ6Ny_Wk2IoJ2JX(6F>8#CqNp)q%)BoGr1^VmPAGPGWAeZ?Sr z04y}c3-b2s+}va;5f!p^gw#SKH3|bZ`Q?Rt{wdGN=4+jA3LPzwB>~N}ZJGM%-r(RT z%GpCKPV6d`>=@*5(MRvE8Iz06!)^lmc@^PKTT0?gBK>Vr*>{&ADjz1)S2gRd?=v17 zJS5NlAZ~4t;gCt!Y`gfiJn|Pm``!gS-y-z>us-8=<2Dm-=6eCRJJz+2gks+!oV<<9 zO!VgLb?z8muqeM`SgqtqeBqh{YXRq@>NUv1Qdz(5dhh{7yj)MEw z2GLH;4oYABcA)F@)a=)3t4iuSFW=3 z`I3#0J+dDF!9)P9Jg79Qn1=QY0*&6z&=ljGU5W~K5$6Z}B*_noeAMl}U}sqd(Xv^M z6Y@5I(ShyL_4$Vk;QgNwK*$#*QnC?NFA>)H#HE3%55+zRs0+z_B&smp{zspS<7L`B zhW}Y2aEFGYzE}K^ezDDoCG2Ro>&PhzrJMfyX5pYY8A+5MDq&U^X?2CPG6Y=qtND>v zG+w%uBtUehCv?lNP-W`Z3C9Wbe1F}XvDFe$LYmg3k6u%NSf5dYso>DT7jh$`kUb5Y zFqaD$vkZ-qDFTqxqfN*c0xvusHk6Z`rNqH0Vm`4LUmF0 z5i*nM&mQ=Ak;)!_`-#O1l8O8C`A2k}OU1ntxx`7UVOnODLXE!*D{ek~cTO>o)`K|Qoo-&IQN5(*Gg{H?df2YWpsK`$Zfyfd3dUm>^yJQhZ^mBg z-Hw352y~-fHKYeIZ8YFC{%iR5r?UK47uEsHPO&OS^3vs!3kT_ScDCWvKrij2+ew_> z?_kcW2Ie~zro&)iWU%nq13Tg{PmNjs8f0s2z8pt+2WNh%=PQ9kGSj^Im~gb!&j9v_ zrn)NwhhaOMablBf_zMZ4;7>ihBi-&RW+m`&vXB~2NN7>!-ocdXaXcpaoH1etb{q;e z){NJijy)k`UewcU(K3CC1F!f?{DaBFL(nvZ6!TI*mv!UaKE7KRzfyoc(&$oUOu)W% zM6TyUg>~|42D}FfUEznPfb7e;Q>B3VR4GuyM!kwN2e_2?!A19Q0EQ8irOQ`pKLGiF1P};c);l6O zw|(M900jcHe<@L)rm43ANFQ@)28-??fC9Swb}>&-j&{;o%DdEK3-9g@Y`A`SOD!n# zk^@tuG;8);@4_y!fw&1td6-1rD>|u(%Nw2NPz84i9)b|_vf%4pPv`v$;urQACS^h@ zc*A-fo9fbN-@gCg7fEe@P&8fVDUh|XHj@Fd_`LxgEs_8}#L5dK+|`Ft=Rf;rAcOZSR*kc9ytVsna^M zaU<^)o_l#%l~iJ+7QD6m2U4R<6#Q`3Qg`fHhQJ7mPl?`JhO>Gel@{wWhcXE}R$)ES zSWydvVf~VFFK4H9=80=wusizYOJByxzqf>!#>VCx9HoGT-VJoWVZv|1_A53xdclnt zH``L#{M zS9y|vKQ{)B5>~9jn8Im8w_$Pk^tuFGHul;y=MKAVyr$D&sl&*{z<94mjrjuuF7B^q9%j_@0k69LZz4t4UCNJ{H9=I#h5+Kej zFWx@=`be}+EVL}!y-F&Yp-Uz$QZwn8E8}pbt5$bfc{9jJQo-}$g=aBT49qU%qK7l} z@GxCdfgQEzEN7mUfQ+`9$lE8kH210P4_Sxyg6*(^yVrL-qpwLO+|ID$kQYn_TFu z{!{`4&fRQ@`&`e_-L!uIcQgSMr9V(mB!X$(La^^`&UY_OQfmhOEXpgX0jdt0FAPPE zf6EOzt2yWS6zr}I*I$yZ8Pf@hY5)B!avx^6#A{a%-=m4eSAv&HiOewcPyW$)K$}b5 zV5r!4&{C-D(!ABK6+_Qs^oabwkQAU8^pe8PET67fQqurhqsfA%I%4xHjAy&F`|`+J*dO8z<1tymAW zp&)Z6?c`$UPbOHFzq4_6Ba#Hhf_h;hb6zt~mT|7B2YaBI@)j+?jAkTFQeQdgc~nC` zYbe5#EtqrA`_U)o+3Ugvv}D0ZFu=kEm%wq27?3wmAVukg)ZlZ21D8M=lo z-WqSuM8mN7=h~tX!^IU^m#2iwFYBO}-CJhzc%YQd%d887zgKz6p87I5v&wieQ|3MO zi0$+1s^ zN8eWtKnegd(#PWm|Ed~i{|1O9J73$rRA!f`726@YCrNKV#;>%{gofPun5(T9p=-q& zTxa1vag(K>^ildl9f{DcVaVVo+c0;s-mN zsoow<$*fHE-R&AG8l&D$KQWt`&K@l2N4Gx$g9T1B(l+c;%YTUJy@SXYoV+9+7_Ryv z2MT(xC`UIxw<;xV>g7-cQJls43HuQ@j0`KgAVvFtLsKI?0EB&H;`u8-+ZJzbXDDlA z_gdg_*gfU@$1DEp1OFz0*v%Ev8zuaz<15*{R8?X`Jvs9bxz~U7*ZiP6BKLP9Q~{obVZxBW4Pr79-m|H0m}_x|dM<d~mlPpjWP=7(GEl85W=x)qr>SaU{Lx;b)Yn#Qw1ZE^%>t1QRtM zd9k{3j~~@g{~xCX_>a?~m*}j}rLzs03%I&r^*l(jW?C5j*s8y>eWiw-0OE)4P~#F` z0|tsST91hiEm04&UX=h+ho4*}fC^A?T+sm*6Nx zRP72+K**H!4nxBr3)Id85U{M?V31!dMg=8z=MaWc zb;~zrNx_6|&y(Gh=%FBh6j}V&d!$66%fF6n)GZ?YD)E4Jz=+<~9Vis_zq_qIn10n@ zO7TS;b=sCRx%4GJ*SRiI%r8^k9|Mlc`wpX0SLWZ%LEH%-*3jw7U2QtAdxtB&46Jri z2s*}&Ss&3U=+FDM%c4zVc>wJxeG{Bk*m0U6${8zDN@)jx-{gvXl2?(o>qWnrt<{oyyc zWNwE*2lP|~z?!fB>vc|u{NArkeC%`n_-uGxmMv3MM_S=6yB8?tW9V;hc5LcU-~q?@1M}->fw{ zvL9|5t=zH9c6++i%5ZSRc9nwz+ty=(Y_Cb|p1oW6!Mdlt{xj#)Rz&XTI$F|xuyl;1 z4}Fj23Hl9h=g$#0TVDx#0!Vlhh2V>}dZS;(*v_-wEe-9&7~!v&p#kvU3dh+(DrClh z4c8d}-Krq#o|?4Ea+YBnxg(|gMSqq0C! z^X+d0C@ZL_r{u6bwrJwLt3bQ*)()Ra0PO*6nrQ+?9K(*2?AotE{GOgx@r2oL#MeP8^ zcH9B`PTex>C3u^^(3>F|j5m{C3V8RcvfXC!M`#Ah35D1b@+*I1aA&a_)h(0p{i}vh zeG-i0fVHe-j_IkU;~ZGZPdR$sxSVlsIhqXdrKnTX!Z0ym+HcD}LG@0P3QTPzt#Gzh zw#BWtEs!}ICOb5&$M{^6J|51Www<`@7J)1`Pm~GrKx6%xd}?jtk|!3Voyfn-92whnxg~yZF>CUYM&z^5hFzL)CnKdRq(_WduP=I ztl1+!{$rIUNaQN)uEjdcOw)uF=6zHxhs3!-0cbD*RFGUi;&o_R3*yq2@AL0+>udR?xsw5PJg0Ew2HZHfr z=m6%9e^mLK#Zw;zEgD0Gcid#Fm#lVC=XjkePyM`ATEV}}A-C>3het6vzU%(h469tT z_-$sm3TjUJzQ3vdLC3w$1o7;)DA^va$|Dx#O*3OJN5N}ZR#)CXRQ?7|r!o5d{R)Eq zHhbIL{Zt@+cT}YLXF~vt4-yC>mpqEJ<)QxG;hH78bDTI13X;o zIe5it>SST$|E{qVc~pS`>GGd`!Y>ygJJI9N9%X=QOvBUacF__w{|DZi_tsgK5abSE zW#}Kv*(P4p=t*(KK*2&)39LO;%E3OqS)H0>KCLjZdzTs;xCQwQL0|qt<%zL7g{y!$ z3R+*ZD%_SgDO&fX-a1Y^Fsddfa>0D~o88~&miydv-mz|Z`)br&Z%Pi%EM0EZ`nr5vpj-lpDB_K(mEpSY|Y1?83E>i3xSuG~ydTTm4Qs5qYZ{N+(2iZudylDzR3p)D>&wl&yd6rkPOnR=n zK0GabiYfm_4gN^@drPeu;&U#Ux;lRvCYqX#(u8~@yELvooIB_Kzr)bm7k+Z=kZH+^ zJ2ZV&6M1#R+n6VCx)^czW3JO9qYG*_OBcnT;)dB;;PaQ%^QRyZJ+(ll7PBw5vtS4(9`E-?T7C)}X!v^*XWY0x{ZhufLl3+%MZ+rV+D}cpj zH#0=qy0(3-HZTH&_&Cy%RCn9liwp;B0I>c`~rgmm1wYxD$ARI?ixtG%z9_sBa8Eo*!IY` zl|^zXHTWXwXkW%YE)8^W=%=-`kbAAaFyK`9VXt4G6I1j9A`^36{}M<=OF%d zZ^fI2WPP|uo{%u$K>Mgj`VsT&Vnj=A&20b*GCCs(x||*e)lqc9MDo(7StKHZzs`u1Hi#qM2LoP|0^XQS8-Ool4ahW z*oG{xK`|&hyN0*Z7X!Tl`br#U#Ftu3Kcn>|Ou&G2wT>skSrae9#+_zIcaZP&O#8n~ zWULkWH7T4t`_aNadJkt8w6h7+!_AspD$6kQwc05Eo_QzAQB*?%J^EHoWkpqF(QhGh zr&;H%OMb+8Hshghr8K?2u4!)8e*4%Y6ipo6DgD`-w9?s)&c|cD_t*<69e)`}h$!YimmWeG(>u7zbpicWD zKAbma=k&-RaijVn&4YiJb6wwXO1vF9REgJ7{LFKK4Ee;4XVBbGs#tPwvbo5_L@yJk z=RUe&UEoixxi4Gx15#&JrLh}6ibyF`(a!2%KQgWs$olj|XQdYW8$j0$Rjx_b%DL3SBw;9Y(HHUs||yu>THAr9SNhu|=x*|VtW?!$#@#W%tXPx_<2Bu5JcguK2VzU*g0 z0NsV}KydNpbyGF~1@#0v^Gkmk(AL#3kWm7tU(9i8(GTMqX$6*-W#06r-=zC3pX+5K zWuE=Oa9hLa7K)#9b4Or#irUQf$n4uG=>zn4#~Z`L375Y2ZP}MuyfaTOt`Yw2^Z+Eq z+L8!DiPw*enp?5I1Sbk(n@o1k7p)9$31V97P~gT=_!TTKf1sa}cb38pUu`Fu=4Y-| z*C5PH+i92rKELCnWTIAez;zxoFS6R2MER58FjcTmdgIJ zqS8$SD!_?n&FDpd0ofsiuATul!e_C1P&(`XHnOF#qn17Cqw|83`!Zr40qwWEz-Z?d(`hzVGWX zo+1I641i-WzK1qGIEi0D*U_}ph}{{8J${*j)2$F+i_fgMEM1=QwK78U`+GH#h!M5} zyq`|vvo!`EMy=i;Q&FDikAn&F2L+B-;-81a0je86%F-YF8%{IfRZ)Lr*p+i}`R-Uo z4?0(A#SQ1IoB3C90y>MK`88&T$0@aE z`a2`Dzp|phi3a)=2j76MGKo9x)%jO83&Ya#CDc8_zyFnH+{D#+=mcy~5pq2iu&wDJ z&rB@vNJgo5uT2|ySzhAH(j`<#5|vA>h@gKasj3FHM}0%~$F zElQz?FMTH8CMi3J__H})JqXziDt?wCY6mr*=A=?PlNE;X| zMTx((8>{NX+9j^t)o5FLBR0PY?wDSZucj09wkqWlrNd*Yo7cmA0V3p4+sK_uO^DBz zfu>gogV6=?@)^55H$u}LPuPd-e>Oh>&-4x}W;h)2&gJ93nthgrIh#6CI3}lD*eaKq zdH1b!*Ue^W)G0*S>;Re}Cc+RoZtsgffU*bBd3fuRn<`0aDyqHk@_AaJCjg#1Cx^4` zd8c3W`E|g4FhpgpP#%{ZTP>4xw~Mh&m&^Ns*hwK}Qpb9fTo_3cnFWi+aC)?;++MW5 z8V`s@_8<%4LOZVp7_h+cbIv;7-B}F#9e}LjiGBs7)_-eFrF0WQ*=8(Wbzz+X0V=)r zrLiCdouWZEh;GPcm;kaU4!^r5aV)(aB#_^x##t>>@>al1zp3hj>4x6i0U+9zJL-&I z+w3nKQf=a1=fR6wicJTG%A2a`bbcJsI*=lnx~+OqdcNXI2SACv5L6HBJ<3N?*O>e6 zEE`~?8$TGMUL46f-jw>3g!kdkpjJOLO|PnmUYnZzEYI$IQ26Ro?vsR=ThJRh%6rx5STLm5Dp zR)jR(ZH`K_(PNA+|9s#CbJA&%{L&=zmbkb}Zz%mtXh^S;nRSNz?PtX)W0(P2cA zq>*w_c|!E)<@++ByNxct2+K=e9agH1{cWpsF`|RVF{$Eo9EkX1WU=_ca>FF=4rOqv~jQvdY~% zO$Pw48hBRj`|~x)tg;B}{asZHTXbCWQ2S4$H!|z-QW~p`y+dfjVB?^+4R2d~DU-ab zi(?kJO5+E$s|kx3cRzRhy`MUouXz~0T5r*KjoK}*YscTp>cfy4yvd4vZhpb>IKb)P zmOE9jhP+OJalVM!pbO8GRu!xED$nt{rs}jh?UrA4<6PyJt~J^U+hv=blq2_W|$G9Fv=(%i(!e>Yb6 zH+D*A&FdR88?b|Ialow~~*%{tfW(Zd&(^0Xp2=T3!L_0@MmlAdB zDg1Rj3_|Ng2_OyV2{i$P0OW~3Lk2GJ~^20k9IN6RgZh zY!TvK!Gv~A-d&evb=VbGO)y0H&Rx9ta>ki6*K1@bCg`>FUV5Em@xvcKf?3+x-(NKU zg6Qp=t*25L>%qAKq|-<@lum}Ea=54n3zp*Po_-mB6@EuP)%7Zry0_nUt+ncDq-7ST zTk2E~UwI#2+CuY7Cj%-w1)3)g3KV3|1dY&E^*v$K*Hz&g5l`;TIJ+*1K{iuuw_!4u zy)qh1$>EK63g!ID*NVFw>>RaTDsA60Z~M705+Ox;Gvjy>1^+sWD&hL2Wu})tu#uiH zy`9_IMeF*tEylz(Ss;5vVzyR!+N1nO3>+$0!o0s~!t&|`cY9*j{+8io z2mV7oIF*13~lpGBZn9rMXKP9px^CkZ2uq~|Q@J+D;vfz} z%d5rxh6sQ{4_o6-uY&z$_Z_v^?B8ETAmJ z#jD|Qo@3zrh006JMf8SUTL67mOpzNwln9WX-84U4L1 zE?ncO%jRjYtCAh%1F?U<1%Ejf${G@@8M=8*xMeU-(s@mS&RIp&{;0A?*9Gy~B@{q- zqkKt%4$^wz-wn#Iz65%*2A&{8?H4yX1lk2zCnynB1K2nDrp6{VC5EZOG3*dL9#sCkbyOmHBALE;;6ELpCk7-ck0yI zA~l17T+1B{SU3pK$hd#3;5EiN?5s?L63{Aq*WP*vb#j1SkECl@nQaZ z>ja_XsmJW#DN{9bDTVt`TA1pEkMqv3W09o&vV`f4aB3kgKO9d}5!}vq^1p(xU7y_mWr?tKfd?{v#@>HIhh}Gjx zuc_?T@{FxK*7pQkQ@NKANa8c00!LexgnX>dMBOFFTQE_zt}vhv~r*a zLdW!N&(=JZ6O=L_8_We78*4BU-ZALqk;b^KNFawBGkZOE7+ zturisR{0SBUB{bmyycsCN!+!h6>b9ejCO2L;)iOsuu*r0i!WM!N% zHsQyC|4RY*2ea8ue%0eW+lot0IRc5CYQN2$*ybg!AAX_aS@C24mug@7pNLgp08P)Ywab0C5|qjf~&m`>V^!0fEJ z;z+#4tL2&%HMmm0zP_I~EBe>a0Wbjn*9?I!uI{syyA$nxLzRK{qmAp4AB21uK?_7| z3+@|sOYm{kpU|B!)acqZLHoYL5Sxr~ftzsDz*kbAK(m*?K8LB}xh(IbQ3Ew+cGaF3B%8~FNZsw!)!d8yl>?Jj&sNh5sTbuUK@4%C;&U=dE|V`X z8n$lg+Q|ZK-SxAKi8|JSdp;-MH)JyQHK~j3#l=pBgPX;UzX!L;Vy`O3zkPQ3)uR@l zjbKq-o=uKwxMX-!4{=!T#%jBxvVns8glR{oh#0+3A+8q_x(I#@*fD}_3|NXEg_c3o zOH`S3LWGlDj0VvI>?cm60P;q!g8=@%tLwT?*Dlfu+_oaA1NE>#a?*hw zC9p~xeN=rTQLWLSgPs02WqY8~0`-D5!t+w7^VhhZwvw9Z6#JKX97Fw3AEmysGww0o z63nG+EczGV_HB~)wR5_Z()eBO%A=SPULKGfaZuv6jCQTTG~hCMFWrJAJ7sU$asPqy z2ethz%mZx3h8TQ*oeYPe`#eWtB+2QkpwE&?VR)l7=8bdA!Iw)_f3c3M`e()x{wER@ zw9K1-X4<^(@0Gja*!5dp^#|+_)nQ{(3$VXDTh;?o)zQ?S9$m%^U_*D#IL!DOA(SQ zwmlO7Q2K{Japoz4{MdK98%MEEhn0<$+!v>AY{-8h0j#VlGf{fI9Qz_kuE}xdHGbQT zL+!y7ux~4=w~AjA5hwAcM_~Db7-W70f_3SB2V4Qh9!%^tFm`}|A(-8xxSn=6Ngtst zOn1S*bfgE`yR!DNeR$vd-LZyYwVFFsmcCw)x*yC0HnjW6$%)!i`Ht2;`RM%+(~q%= z#YIdAbDf)(+^=J`&7hzttPl`>&a0HWzuY_#f!$g znhDGc>#@5v(iS;Xn$KI@T;Ub4BqV45ED==pm&vL9JRt|L#M>YdIJ2>g>Q zIVTxYMaDYB5@E^g!8EPB`$}yD>@!<^ zD+E)lRxlQoQ5Zh7{G6%(?6LoeSul7Ityin~p+R#1I*3gYY98z^0efTKt&S-;;x{$Y zWI(IP7rlp=1iD$ZV~oa`^R3BmD;qjDiVHbLLy> zYIH;DQZbrR%ohJ&Eoc4@WxL1m=}|bPkjPF{WRx-{vNTZ$F^?=GYb9hETP9=~iL7PI znrPEt8XjdSL_&nIkBO{f$=J8Cj_F+0d1^Z6d7X29IOiXj*L~0Hx~}_seU`V)b5x@B z9V)f8|C?Yq0|Y~?q~!r7@!o_#@qZu5M?oo-YwX%!Rfa9X?^vNi!5Wn+1h56jD6|la zRP^A(pj)=d-WBRm@pYTlfZDUL!)6=co4BX_>=jIw{p=M$+%e<#P#M3o=?_2HPOhoo zCKX1}Sa;yPH9S@fw_jy@akr&J_urucKkTwka4xJK5b5Ojo9akG^b%AAZM-<9f0 z2ys|UAO)>g_gko6V~|qGIop`!kM0QNbx`k__Idz2*Rk}`w7-MRVF}*J#Hj+Y;ZK0$F~Pa93Kgocp;kI*CogLO!7|kOz}}JDWN&3V^ur&Rbjh2hyePSQ zfuge;ZffezF7C;WC%tpBS>OWS-MoA{5po^-!*R%i{dg?%H@kzB%Ak7T`G-f6{&rp= z?m}v85JYl+8r3cHT;~M^x4!T>&Uqss}see!>)KzS)lV(lnMKq-=F5;s*$+C>a_-B02_zXbUqhOZWog|$b z+nb0^a1U@AaC2(*>J`P=3-Ka(gsKDaxj<)pNZpR}6)McFe>!4IMM>jvifmrjF3+{q zbS!&bKV#a;o}6Ju1NFWb&IwUzQnEq220mI~<^Tn1$5_l@GQ8%A)~Y`{-!EmWo_IDYk=Z%{^Bmcsva?)HKw^ z|DE_w3s{qag7Lvvv3xVhA=CFw$X3eee9XccoM^GpnY8*Z5ct>K&eUl5 z3uslT;Ey?PGbu;`%Ve`bp{Bw5=0j2)WMYKTC70l4`6ha7Iq zP`d7pS@hDR62WahcXMj*L!RjP8#gWB%v#1Nk-bbWaLJOIoUFLJg+qlB*A)IKs9s8Z zFzrL$qCR*5O#Y@PazvUXk%_987slk$6*@PMv*f?(oSGqwmfXJB-jKzGz7(&;rbPLp zlF9okz7I~D?*J~8_bK7Lzpw(`2ZUAGp3pVgyFMddM}Dd?&DAWQismz!-4iClneRlC z;{q@ICzWehnuU^LS25S0QVVNDpXQ!DPev(D&{CO@Z$~SB&H&w!?2taCgm%yV}Dh9`FLCMk%UU{3JOKi`ios za9JdMm}*IKpMN&3Qa7(wUa5$W#vXXem!W<99?vM9QX&aY=--INiyZ`d*b#j8;81$g^SjuT!{b1nYPOrhtAp;HU+Z@Ap z#)LV7N@A+Rs%(*Y;p~w{)QZ>IM@mOi+6+|htbOU56bkez*9X~5O|fQ>_!wYy%`on) z5SOUBSgE+|a-OvXmo`b>BvIbnud?3Ssw&`Q+d36|Zg{0cUSv@Z97b4~k08w$eB@i2 zG2fZu0-yWR>;w9>VJWF z%=^VMv#M+4{Q~*9be*-&ehr8vZ)k(6|8XpzNBU9=!3*BJTE?(K3}QD9Lx9P{gxNE+ zwA-_#2w+R52k1+;77;@RF`BOm6OY)%^9b)h`*DB#-b`H}4QKs?{Is(Em$i$U|4;3L z{zJeCf-(`dOv?ThR^~?jHg4B_8@HVxK=%rX>|pq|0J=)dd@f4atF-X_a`zLntoLpE z#G^TGi0M}4byS0>J6j33g=5FHf{tOCTtoUlD(;+w)nS4Jy@m;8Jqr2@MFf7AuCB<1g&NZeU19wp8DhEurqh> zsh)aQXZZb-l5d2h>D1#~mhOOC6Yd~*Bi0MUzBU$l~(Yxk0fw(bJwZhzkS z<)9{;(*auBRP~=#W@bM2kfPey`)D()0aZzC0}fafYgt|;eCPS|ZPR+xNk=4)#jOfn zZnBtp!N9D@)#lUUu;gQOqJJ1=c6IY1cjHU8p{F5Yp4+^vMLS25xLpb?tsBb4iz2cv zt10p354zFj8HgrwPX;?U)Rj%)*;+3~Q>k{Zi~NgmMb%fA$tEje64VNw`K0F?E_4{i z<$-FSX6PScCT?kEEu3^g7;i#tzj(5%Ct4vTm~&&D&PbdV%%lhQV#!(z`a^Z${=8Cqu@@rW2X4i>12EvL*!a?^$#I2v2_Je*C_Tndb-1eH?`N(*1YAQjm!N literal 0 HcmV?d00001 diff --git a/src/assets/img/carred.png b/src/assets/img/carred.png new file mode 100644 index 0000000000000000000000000000000000000000..4a0591b8207e7c6ef55d3fd0944d98dfc49c1000 GIT binary patch literal 116208 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�<*uqcqcAyC8y(^i; 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

G4+Mtil+e;cu*73pf^1?;sqsvDI{j7ad3> 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

J5unV@xL*g&MA z#>m3h>`*S9WtCtMav5AoUMl-|u%~5Z9rglaA&@Aq{&CF2pHGA5d4vbz$DWmsD`U^J z8k++AwO8wnVB#<{;mhDz4C*Jt=BJM{XY|p(HhmhTbL`${16~w`p1P6qu9aK^$soF| zZ(9F!tq4d=oK0MHvbzBSIo%_LF)MRH8Q~WF5+Gr%h?4ALU9eNGE=m)j9gc5~5 z?Pg7~?3iKhPu}ORsw|qF^y!HQxfHr>#XDdwXyf6;jK0j!u?Y#!#t{w=_vd)Nn;lFc zK@{$4+`Id+(#5eqxtyq7TAqGlB&7#DU@m^}GS~AzqbQWF_bFE|(J9kl)G=Wojbxf} zfN(@vGO9vIy~%U0-|21M>s7X$FEH++larI@S(tV@Ul=iJR{N(7VwQ5#WvD@E{|b#7 zU=~hGk8p0QBH^fpH)V)`9in{s{KsHr@qs4*@8cK$wVf!j5g$)M09q%*0ZIg&}Ot#|3nvvAok z_H*9geO~CTSE#Rmn8OA*JJj(zST$^{$5i~v(u+132QR{fp>rX7t#5LeKlyA}U_C75CmcFmjRIGf+ucPkvn$&ze02MKkwHYaIrGw~J zbAO3`F3rk%A<@j7GB*|pl*0E=(6_-H*@@bO>uz@o0p zcpUczj2<;UW_oMTW197+9vpsbBd~$>DqoKnGOjmSPPz6Jm{!Sm%^2_VryZ7?<4Mg_Z z%XFO9&e_(|b*$~@#4kM;+@0Q8xSK-il>w|#Uw-jM3=A~2{MD_S`Iol*JlK5uRj$)W zru z<)7Yq=u^t!HUIJc3goM`c`vPj@VBX&yCjvydC51*N*7JdPWaWXJWZ8W?MT_#Y;5C@ zYjqAAJ54@)E@P|s{UWM3WZ^aw6ZD3#TP`r#7Qs8PlpX+gxx2d?8$)0K`X=-FK3$cl zP9~P^It!-@F5RAi=^ANE-XdJo+JvOmS0CvBs)}6Rx;nz|v6yVb?*8Dc+*!-_kGP}KSf(0EbqFuFS5+1XrpdN~ zh%RM5w1Jg+rh)YguEBCxy1T10c|7n{T6t`+a(O@6T1Y1FLt_btS35ILI2Gv!{GESW z3xf|(sr+rr;e;)``Y|N=4Z-^276f_I#yifoC8*c}~d3Lu?yq7RIFbdTglAx9}0%#hI8ZaG4vkm_h=VCNwU ztiaw6yg=tn$|Y{Y@$Fll4}LkcT@UE_xI1ii5cVUr!^vwt(AzmH&HZ%GL#eQYl2 zKbt-J1=cX|n9(q!L?!n|>?^kd`>hbAAFVQfaVqOTHK%ZeKA$H800jwAp?=DdPasG{ zeDt`nVym}#EVpDe!zPR(9%mNMH&gn#sQqNYUOU;Kjr|5vor7rLGR_(B6cOMF1Zs@7 z#>CUQM%(<2(qy0aR)&+Qf7f{43{(I1d(d)ZvxIE|CqwR{Y(!K-O02ilxErM@{m2U> z#8QQo8Aa=G-l~c*gFz7~3;bKJ(l}c1Ez%@keY3^wG+WRIFa&&4B>)(L#R$#xZ$CmH z(MBaQ>(i1miJa9XGB`N5zEAX| Oz+>(SB?pnc;BXvcKBKfsJ?C$ptueG*Gu|KB z0PBO7{07RxDjUKDZFqU_ou22$N2pW*#EXxRrfTe4!O?HIEK%;r(ow=If_^SFl586% zXF9-)p2x3GJM4;!0bKjNi)J4ol|5(}q#vgHakVpS;A14@M)yzc^3+0!JqbhErcl~D z7>}5GN)QoJ{v?oT>_7(HZe@xbsd?QSwvIMlE>@=aFj}mkzc3{R*OW{<)lCp$h@?zG zFyOxyvr(UvJ)CTgjLbl#w~b|7kkZtIv=NzZJyCgHcBzG)hbMgx*pF;>ngXm(2K5dR zD^}JoxzCGFHNa!*s-2PJW8XTYJMz|CjLL0%aJ@(ViFN){7M@XYJ_g-Vp4b{K_NUw( z?SuFD=BgB!o*`-h#LMrda=+&27As^0uR!F8HhXMTfQaCXOj!?RdSVtbVnzO7WZ6&E zT!6c#0R{USgb@TTg)c|Lr=Rf;{wGcBN1jil<j3M=PWo>Gj$=_7}8MHIcX^)94{>N?PfTzmO zm&$zsY|pmqw>@Tv4G-~YU~#+u^y2J#TE2dZ&?)~kb3dq_p4Pm@hZ@=Tg6_P=?{orC zF>JvykR7~{b%~qSxs%qMDe*4RpCWCyD<{@f9WOte!_8-#9vG;~x`1rCg62>PauUcBYzWQ~lki&5j`Ma#;?gK(I0dG@A$AvJ5f7HT6E^%D z`GG31G(f!oLH)tLJ~13;<`Ra(5EGI85%-y%%BNsjP%wn`4N)bQZ6werW723-3@njv z6JIar!Frg#wgb8#Mz(0*?iJw=M) zE6o}z^O(3RsQ6X@JjMen0@ML5g; z=~CwZI+x<$Nu|Qng0|A}1vA`0Zf26^{%tA!Ec~wiv3>Kkz4O7Qv%zMONtcY7MO>e$ zU*C}YxjooY9rTDE!^giG2aAysq@znA)UgW*J&@(hSppdcXKY#P3&)ZBYWiO)tQ%jD zMu4c+<_V7U%YDECo3rI&CG0=LP*G8`Sc0tSLPp1cd$T%SC~pcCAnCXc@O}wy0+FJV z3nfWQN*51mW$B(t{f>&zgIh5u6vUjw#}epYk|RkYdGNh>^&r5TbHB#n&_bGv2}6LgzQKU9|oi(am3v`|wl zM_8@1tS<)t67K-_KiIGlE{+M2@0AEHb8cEaEBU*n1J0Z$+br2BZj5LFpSIv-%VdF; zfs0U_rPtKo#Cd76eH_+~=gQ2t(5MTFF<C_D11(3zkHVgB$tcyuP<#K+O$G;c z_dA+*ns2m&NB{thGRG|^+T#Z>qv)lc8c}o`oJRegyF7sJ+4**z5a0{YeMu$B=T?*c z0gaCn*HQT9MU8jrJgl;TFnnuo`k&6J@6gF#xY^K5DBQi2hXEOb=V3*EXQ1{mTI=U4 zT#xe7*&9<>noAqYA_h!oG4v*Ms1`+stpVJ==VA~r_fc_!qh2^W`rHeI+=`}X2* zY^`2SG2W>G9Ox((z={6@LgT;~tlixo0LLH{QmF*in0=>3M^7yQy}d;o$?@;d{$U=# z1u8CDqc$2jsbE_!0B5OMpa#*HSTk%C^v}^+gFXXhk3^~>ov!^KKD&Qpq%8&x^Q7hw zX;*eKr+kfk$#(|$v@c9Cl_;t9xchekmzjVjPrpSkiL$RY=$v&uAdn7-W~t?0nuWz_ zNUG&BL#uN92eIUWt16Qu@)Fx%?OQswn2;j4yn8P?^`^Z$b9TVP5-Y2`eB#X8d}ZL6c<3o1USBOlBMzq09qfjRia_^F#kJ)h@_)6y%ET1lRqI4Z%*rhdRxU^ zY%4QWf0VD+vMDF@oclh-C-oM;;-LL5V`^&^={?vGOvXd-1GUTl!P5!x@gwNH*0jKw z(xvKU%N_)~x+nmwnqfUtC@GeolWcmdH@7)Bbm-1sj9d z&ENGHDdeJ_s7)mAr_I~f=pGZ@_#df;eAA2q>`(T3kO+Y9pz~^41|NHt~Y@Yyr zd(C;2k@$6K5CEQoQICV=`=~%qxXf#?zo`w4la_+urNBle_+41?>3B=F4SQCnX3DBVW-xm_U z2LS0eJ{}qaZjyh${WImnAKSzo7cHmO^>{;AmdRHIs?8FoL$|LTo3|nQTfIowuZf8$ z!EU>8+#R3qm!D&Rejy-lN0f%<2`sz{%l|Gsh%1W8TfDddpfThPyU;EB=ZnGT>0|q) zU#0Ip{ovr>JBw2GgWqQMP?w+@+>W~>zpn53Hehc7g&Dl7+J8OL|0%Ln0sibsD<8oA zns$ZUGwC)}EpTf^huI%}U$Z&~%mAud+o>?-Wi;?7v^p-cX&{AkQBe_*_fc*LG;+sP z4?Gb4I0FKHukTDVIVlzh3E|L;t=5-cSZX!a{T2ZlzY&N6lEA zzw2VtZ@A4cbQexG00!qjE<~y4Vkq5)Szyx)2WS=>)v0@{3~hRC78lC>OO6UT*1fl% zt81OU!wPk5vjNCPOjD_|KIQ-XkDBrBb&|Q!LVeK@YS~aP8y6Q<{J*EZ0d7PL9NPg) z`chToX;*N=`L%|cg)aR~0ZCNqmX-}fGF`?>Gp1{s%$+r+cV8o_ho9k}IZ$gG&5!o* z6K=Zzf>S`w<$ICZjxnaz|6K9EmQiHqhl?cO`7QDei7t>y8tF|xhZRP9c>Ocq8m2(V a<5LLChzkm(sYw9@_(+Q@h*gLh2LC@OHByQI literal 0 HcmV?d00001 diff --git a/src/assets/img/imgpsh_fullsize_anim (1) - Copy.png b/src/assets/img/imgpsh_fullsize_anim (1) - Copy.png new file mode 100644 index 0000000000000000000000000000000000000000..b0c1bcc8a6cc0ef3b570e748ec22f1ec0914f6f3 GIT binary patch literal 5637 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 literal 0 HcmV?d00001 diff --git a/src/assets/scss/_variable.scss b/src/assets/scss/_variable.scss index e69de29..6f0ca0a 100644 --- a/src/assets/scss/_variable.scss +++ b/src/assets/scss/_variable.scss @@ -0,0 +1,9 @@ +$light-green: #C2E77B; +$blue: #0088FF; +$grey: #E6ECEC; +$dark-green: #00D800; +$green: #0AD90C; +$yellow: #FFBA00; +$white: #ffffff; +$black: #000000; +$red: #FF0B0B; From afe87e792c04b2d2ffadbe2187685d12c851b7a4 Mon Sep 17 00:00:00 2001 From: omkarpadwale Date: Sat, 15 Jun 2019 10:46:41 +0530 Subject: [PATCH 09/24] created basic module setup --- src/app/app-routing.module.ts | 10 ------ src/app/app.component.html | 10 ------ src/app/app.module.ts | 4 +-- src/app/app.routing.ts | 10 ++++++ .../parking-module/spas.component.html | 6 ++++ .../parking-module/spas.component.scss | 0 src/modules/parking-module/spas.component.ts | 18 ++++++++++ src/modules/parking-module/spas.module.ts | 33 +++++++++++++++++++ src/modules/parking-module/spas.routing.ts | 9 +++++ 9 files changed, 78 insertions(+), 22 deletions(-) delete mode 100644 src/app/app-routing.module.ts create mode 100644 src/app/app.routing.ts create mode 100644 src/modules/parking-module/spas.component.html create mode 100644 src/modules/parking-module/spas.component.scss create mode 100644 src/modules/parking-module/spas.component.ts create mode 100644 src/modules/parking-module/spas.module.ts create mode 100644 src/modules/parking-module/spas.routing.ts diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts deleted file mode 100644 index d8f91db..0000000 --- a/src/app/app-routing.module.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { NgModule } from '@angular/core'; -import { Routes, RouterModule } from '@angular/router'; - -const routes: Routes = []; - -@NgModule({ - imports: [RouterModule.forRoot(routes)], - exports: [RouterModule] -}) -export class AppRoutingModule { } diff --git a/src/app/app.component.html b/src/app/app.component.html index 14ce205..90c6b64 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -1,11 +1 @@ - -

-

- {{ 'label_name' | translate }}! -

- Angular Logo -
- - \ No newline at end of file diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 4994b15..845b6dd 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -10,8 +10,8 @@ import { AngularFirestoreModule, AngularFirestore } from '@angular/fire/firestor import { AngularFireStorageModule } from '@angular/fire/storage'; import { AngularFireAuthModule } from '@angular/fire/auth'; -import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; +import { routing } from 'src/app/app.routing'; export function createTranslateLoader(http: HttpClient) { return new TranslateHttpLoader(http, './assets/i18n/', '.json'); @@ -23,8 +23,8 @@ export function createTranslateLoader(http: HttpClient) { ], imports: [ BrowserModule, - AppRoutingModule, HttpClientModule, + routing, TranslateModule.forRoot({ loader: { provide: TranslateLoader, diff --git a/src/app/app.routing.ts b/src/app/app.routing.ts new file mode 100644 index 0000000..437f36c --- /dev/null +++ b/src/app/app.routing.ts @@ -0,0 +1,10 @@ +import { Routes, RouterModule } from '@angular/router'; +import { ModuleWithProviders } from '@angular/compiler/src/core'; + +const routes: Routes = [ + { path: '', redirectTo: 'spas', pathMatch: 'full' }, + { path: 'spas', loadChildren: '../modules/parking-module/spas.module#SpasModule' } +]; + +export const routing: ModuleWithProviders = RouterModule.forRoot(routes); + diff --git a/src/modules/parking-module/spas.component.html b/src/modules/parking-module/spas.component.html new file mode 100644 index 0000000..efc4bf8 --- /dev/null +++ b/src/modules/parking-module/spas.component.html @@ -0,0 +1,6 @@ + +
+

+ {{ 'label_name' | translate }} +

+
\ No newline at end of file diff --git a/src/modules/parking-module/spas.component.scss b/src/modules/parking-module/spas.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/modules/parking-module/spas.component.ts b/src/modules/parking-module/spas.component.ts new file mode 100644 index 0000000..11c4655 --- /dev/null +++ b/src/modules/parking-module/spas.component.ts @@ -0,0 +1,18 @@ +import { Component, OnInit } from '@angular/core'; +import { TranslateService } from '@ngx-translate/core'; + +@Component({ + selector: 'spas-app', + templateUrl: './spas.component.html', + styleUrls: ['./spas.component.scss'] +}) +export class SpasComponent { + + label_name = 'Smart Parking assit system'; + + constructor(private translateService: TranslateService) { + this.translateService.setDefaultLang('en-US'); + this.translateService.use('en-US'); + } + +} diff --git a/src/modules/parking-module/spas.module.ts b/src/modules/parking-module/spas.module.ts new file mode 100644 index 0000000..ea7bde7 --- /dev/null +++ b/src/modules/parking-module/spas.module.ts @@ -0,0 +1,33 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { SpasComponent } from './spas.component'; +import { SpasRouting } from './spas.routing'; +import { TranslateModule, TranslateLoader } from '@ngx-translate/core'; +import { TranslateHttpLoader } from '@ngx-translate/http-loader'; +import { HttpClient } from '@angular/common/http'; +import { FormsModule } from '@angular/forms'; +import { createTranslateLoader } from 'src/app/app.module'; + +@NgModule({ + declarations: [ + SpasComponent + ], + imports: [ + CommonModule, + FormsModule, + SpasRouting, + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useFactory: (createTranslateLoader), + deps: [HttpClient] + } + }) + ], + exports: [ + SpasComponent + ], + providers: [], + bootstrap: [SpasComponent] +}) +export class SpasModule { } diff --git a/src/modules/parking-module/spas.routing.ts b/src/modules/parking-module/spas.routing.ts new file mode 100644 index 0000000..d9400fc --- /dev/null +++ b/src/modules/parking-module/spas.routing.ts @@ -0,0 +1,9 @@ +import { Routes, RouterModule } from "@angular/router"; +import { SpasComponent } from './spas.component'; +import { ModuleWithProviders } from '@angular/compiler/src/core'; + +const routes: Routes = [ + { path: '', component: SpasComponent } +]; + +export const SpasRouting: ModuleWithProviders = RouterModule.forChild(routes); \ No newline at end of file From 30d08810127d5ab424ed0b1995745ce45eebdea9 Mon Sep 17 00:00:00 2001 From: Sayali Bhutkar Date: Sat, 15 Jun 2019 10:53:49 +0530 Subject: [PATCH 10/24] Adds favicon for SPAS --- src/app/app.component.scss | 4 +--- src/favicon.ico | Bin 5430 -> 1150 bytes src/index.html | 4 ++-- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/app/app.component.scss b/src/app/app.component.scss index 40546a4..8d26cd7 100644 --- a/src/app/app.component.scss +++ b/src/app/app.component.scss @@ -3,9 +3,7 @@ .root-container { background-color: #FFC306; height: 100vh; - img { - - } + .btn-grp { position: fixed; bottom: 50px; diff --git a/src/favicon.ico b/src/favicon.ico index 8081c7ceaf2be08bf59010158c586170d9d2d517..382a6d1aee222cd24f194305453ef92b5f91c779 100644 GIT binary patch literal 1150 zcmZQzU<5(|0R|wcz>vYhz#zuJz@P!dKp~(AL>x#lFaYI*xFHzK2NJVNvo_C54){GU z!T0aHL_gv%NG(v$?6T~w^O6I9PO(+`55tqK<^NBzlKVf|MiDLslS8M0X8Z!$`3Ed+ zr}Te@tM>o(`O*J3mnQvR7;5)_GRRyzW$YLz2X!-8KghmC;ST>lK70KC-`~Ig5BAsp zp9FLZUi}dNqUitp>iK^VI5e?|BK-&Z8~#r)mj;_L*+u~p7RY`9xgU@HS2wTtzok3{ z92Tq60{_qQ(1(O6%nSnh!JYsT|Ni~`|MTmY{|`?b{J$*D17QXM{r8XV{eNs`_y22K zSO5R{CdfA8?_|4U+AafTl#olSSq{J%2A@Bf<25Fifz zzd9rM|Ejcr|4U=sfN5I?;%?;l1Lvc_A5(#03CkOx{DX->=?61Ef$|S9|89ikBT!x< N8bkDMhLr>4(f|nnY*PRL literal 5430 zcmc(je{54#6vvCoAI3i*G5%$U7!sA3wtMZ$fH6V9C`=eXGJb@R1%(I_{vnZtpD{6n z5Pl{DmxzBDbrB>}`90e12m8T*36WoeDLA&SD_hw{H^wM!cl_RWcVA!I+x87ee975; z@4kD^=bYPn&pmG@(+JZ`rqQEKxW<}RzhW}I!|ulN=fmjVi@x{p$cC`)5$a!)X&U+blKNvN5tg=uLvuLnuqRM;Yc*swiexsoh#XPNu{9F#c`G zQLe{yWA(Y6(;>y|-efAy11k<09(@Oo1B2@0`PtZSkqK&${ zgEY}`W@t{%?9u5rF?}Y7OL{338l*JY#P!%MVQY@oqnItpZ}?s z!r?*kwuR{A@jg2Chlf0^{q*>8n5Ir~YWf*wmsh7B5&EpHfd5@xVaj&gqsdui^spyL zB|kUoblGoO7G(MuKTfa9?pGH0@QP^b#!lM1yHWLh*2iq#`C1TdrnO-d#?Oh@XV2HK zKA{`eo{--^K&MW66Lgsktfvn#cCAc*(}qsfhrvOjMGLE?`dHVipu1J3Kgr%g?cNa8 z)pkmC8DGH~fG+dlrp(5^-QBeEvkOvv#q7MBVLtm2oD^$lJZx--_=K&Ttd=-krx(Bb zcEoKJda@S!%%@`P-##$>*u%T*mh+QjV@)Qa=Mk1?#zLk+M4tIt%}wagT{5J%!tXAE;r{@=bb%nNVxvI+C+$t?!VJ@0d@HIyMJTI{vEw0Ul ze(ha!e&qANbTL1ZneNl45t=#Ot??C0MHjjgY8%*mGisN|S6%g3;Hlx#fMNcL<87MW zZ>6moo1YD?P!fJ#Jb(4)_cc50X5n0KoDYfdPoL^iV`k&o{LPyaoqMqk92wVM#_O0l z09$(A-D+gVIlq4TA&{1T@BsUH`Bm=r#l$Z51J-U&F32+hfUP-iLo=jg7Xmy+WLq6_tWv&`wDlz#`&)Jp~iQf zZP)tu>}pIIJKuw+$&t}GQuqMd%Z>0?t%&BM&Wo^4P^Y z)c6h^f2R>X8*}q|bblAF?@;%?2>$y+cMQbN{X$)^R>vtNq_5AB|0N5U*d^T?X9{xQnJYeU{ zoZL#obI;~Pp95f1`%X3D$Mh*4^?O?IT~7HqlWguezmg?Ybq|7>qQ(@pPHbE9V?f|( z+0xo!#m@Np9PljsyxBY-UA*{U*la#8Wz2sO|48_-5t8%_!n?S$zlGe+NA%?vmxjS- zHE5O3ZarU=X}$7>;Okp(UWXJxI%G_J-@IH;%5#Rt$(WUX?6*Ux!IRd$dLP6+SmPn= z8zjm4jGjN772R{FGkXwcNv8GBcZI#@Y2m{RNF_w8(Z%^A*!bS*!}s6sh*NnURytky humW;*g7R+&|Ledvc- - SPAS + Smart Parking Assistant - + From d1ca04ac2c1bca38ecc1c49c307bb5ecab3020ee Mon Sep 17 00:00:00 2001 From: Sayali Bhutkar Date: Sat, 15 Jun 2019 11:01:59 +0530 Subject: [PATCH 11/24] Restructured root component view --- src/app/app.component.html | 15 --------- src/app/app.component.scss | 33 ------------------- .../parking-module/spas.component.html | 20 ++++++++--- .../parking-module/spas.component.scss | 33 +++++++++++++++++++ 4 files changed, 48 insertions(+), 53 deletions(-) diff --git a/src/app/app.component.html b/src/app/app.component.html index 5a34667..9af5c1a 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -1,18 +1,3 @@ - -
- -
- -
- -
- - -
- -
\ No newline at end of file diff --git a/src/app/app.component.scss b/src/app/app.component.scss index 2b75b16..e69de29 100644 --- a/src/app/app.component.scss +++ b/src/app/app.component.scss @@ -1,33 +0,0 @@ -@import "../assets/scss/variable.scss"; - -.root-container { - background-color: #FFC306; - height: 100vh; - - .btn-grp { - position: fixed; - bottom: 50px; - font-size: 24px; - width: calc(100% - 30px); - button { - height: 100px; - width: 100px; - flex: 0 0 44%; - max-width: 44%; - margin: 3%; - background: rgba(255,255,255,0.7) - } - } -} - -@media screen and (max-width:700px) { - img { - width: 100%; - height: 100%; - } -} -@media screen and (max-width:550px) { - img { - height: 600px; - } -} \ No newline at end of file diff --git a/src/modules/parking-module/spas.component.html b/src/modules/parking-module/spas.component.html index efc4bf8..0e63bf9 100644 --- a/src/modules/parking-module/spas.component.html +++ b/src/modules/parking-module/spas.component.html @@ -1,6 +1,16 @@ -
-

- {{ 'label_name' | translate }} -

-
\ No newline at end of file +
+ +
+ +
+ +
+ + +
+ +
+ \ No newline at end of file diff --git a/src/modules/parking-module/spas.component.scss b/src/modules/parking-module/spas.component.scss index e69de29..95a53f0 100644 --- a/src/modules/parking-module/spas.component.scss +++ b/src/modules/parking-module/spas.component.scss @@ -0,0 +1,33 @@ +@import "../../assets/scss/variable.scss"; + +.root-container { + background-color: #FFC306; + height: 100vh; + + .btn-grp { + position: fixed; + bottom: 50px; + font-size: 24px; + width: calc(100% - 30px); + button { + height: 100px; + width: 100px; + flex: 0 0 44%; + max-width: 44%; + margin: 3%; + background: rgba(255,255,255,0.7) + } + } +} + +@media screen and (max-width:700px) { + img { + width: 100%; + height: 100%; + } +} +@media screen and (max-width:550px) { + img { + height: 600px; + } +} \ No newline at end of file From 53da43604f27f2c9019cc52965cad74c40bb3023 Mon Sep 17 00:00:00 2001 From: omkarpadwale Date: Sat, 15 Jun 2019 11:17:15 +0530 Subject: [PATCH 12/24] added basic component structure --- .../spas-booking/spas-booking.component.html | 3 +++ .../spas-booking/spas-booking.component.scss | 0 .../spas-booking.component.spec.ts | 25 +++++++++++++++++++ .../spas-booking/spas-booking.component.ts | 15 +++++++++++ .../models/spas-booking-data.ts | 0 .../services/spas-data.service.ts | 6 +++++ src/modules/parking-module/spas.module.ts | 9 +++++-- 7 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 src/modules/parking-module/components/spas-booking/spas-booking.component.html create mode 100644 src/modules/parking-module/components/spas-booking/spas-booking.component.scss create mode 100644 src/modules/parking-module/components/spas-booking/spas-booking.component.spec.ts create mode 100644 src/modules/parking-module/components/spas-booking/spas-booking.component.ts create mode 100644 src/modules/parking-module/models/spas-booking-data.ts create mode 100644 src/modules/parking-module/services/spas-data.service.ts diff --git a/src/modules/parking-module/components/spas-booking/spas-booking.component.html b/src/modules/parking-module/components/spas-booking/spas-booking.component.html new file mode 100644 index 0000000..59dde5b --- /dev/null +++ b/src/modules/parking-module/components/spas-booking/spas-booking.component.html @@ -0,0 +1,3 @@ +

+ spas-booking works! +

diff --git a/src/modules/parking-module/components/spas-booking/spas-booking.component.scss b/src/modules/parking-module/components/spas-booking/spas-booking.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/modules/parking-module/components/spas-booking/spas-booking.component.spec.ts b/src/modules/parking-module/components/spas-booking/spas-booking.component.spec.ts new file mode 100644 index 0000000..ec7c7d9 --- /dev/null +++ b/src/modules/parking-module/components/spas-booking/spas-booking.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SpasBookingComponent } from './spas-booking.component'; + +describe('SpasBookingComponent', () => { + let component: SpasBookingComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ SpasBookingComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(SpasBookingComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/modules/parking-module/components/spas-booking/spas-booking.component.ts b/src/modules/parking-module/components/spas-booking/spas-booking.component.ts new file mode 100644 index 0000000..4bc089c --- /dev/null +++ b/src/modules/parking-module/components/spas-booking/spas-booking.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-spas-booking', + templateUrl: './spas-booking.component.html', + styleUrls: ['./spas-booking.component.scss'] +}) +export class SpasBookingComponent implements OnInit { + + constructor() { } + + ngOnInit() { + } + +} diff --git a/src/modules/parking-module/models/spas-booking-data.ts b/src/modules/parking-module/models/spas-booking-data.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/modules/parking-module/services/spas-data.service.ts b/src/modules/parking-module/services/spas-data.service.ts new file mode 100644 index 0000000..1f98884 --- /dev/null +++ b/src/modules/parking-module/services/spas-data.service.ts @@ -0,0 +1,6 @@ +import { Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root', +}) +export class SpasDataService { } \ No newline at end of file diff --git a/src/modules/parking-module/spas.module.ts b/src/modules/parking-module/spas.module.ts index ea7bde7..7b893a4 100644 --- a/src/modules/parking-module/spas.module.ts +++ b/src/modules/parking-module/spas.module.ts @@ -7,10 +7,13 @@ import { TranslateHttpLoader } from '@ngx-translate/http-loader'; import { HttpClient } from '@angular/common/http'; import { FormsModule } from '@angular/forms'; import { createTranslateLoader } from 'src/app/app.module'; +import { SpasBookingComponent } from './components/spas-booking/spas-booking.component'; +import { SpasDataService } from 'src/modules/parking-module/services/spas-data.service'; @NgModule({ declarations: [ - SpasComponent + SpasComponent, + SpasBookingComponent ], imports: [ CommonModule, @@ -27,7 +30,9 @@ import { createTranslateLoader } from 'src/app/app.module'; exports: [ SpasComponent ], - providers: [], + providers: [ + SpasDataService + ], bootstrap: [SpasComponent] }) export class SpasModule { } From b806286b3a1f95cbd00ce522f2ecb72a90c44566 Mon Sep 17 00:00:00 2001 From: Satish Date: Sat, 15 Jun 2019 12:13:34 +0530 Subject: [PATCH 13/24] Firebase CRUD operations implementation --- .../models/spas-booking-data.ts | 13 ++ .../services/parking.service.ts | 117 ++++++++++++++++++ 2 files changed, 130 insertions(+) create mode 100644 src/modules/parking-module/services/parking.service.ts diff --git a/src/modules/parking-module/models/spas-booking-data.ts b/src/modules/parking-module/models/spas-booking-data.ts index e69de29..9e811d7 100644 --- a/src/modules/parking-module/models/spas-booking-data.ts +++ b/src/modules/parking-module/models/spas-booking-data.ts @@ -0,0 +1,13 @@ +interface BookingDetails { + parkingId: string; + userId: string; + row: string; + column: string; + startTime: string; + endTime: string; + userContact: string; + status: string; + paymentStatus: string; + amount: string; + vehicleNo: string; +}; \ No newline at end of file diff --git a/src/modules/parking-module/services/parking.service.ts b/src/modules/parking-module/services/parking.service.ts new file mode 100644 index 0000000..6908b6e --- /dev/null +++ b/src/modules/parking-module/services/parking.service.ts @@ -0,0 +1,117 @@ +import { Injectable } from '@angular/core'; +import { AngularFirestore } from '@angular/fire/firestore'; +import { Observable, of } from 'rxjs'; + +@Injectable({ + providedIn: 'root' +}) +export class ParkingService { + parkings: any; + bookings: any; + users: any; + constructor(private fireStore: AngularFirestore) { + this.parkings = this.fireStore.collection('parkings').get(); + this.bookings = this.fireStore.collection('bookings').get(); + this.users = this.fireStore.collection('users').get(); + } + + /** + * Gets a collection of parking locations from database + */ + getParkingLocations() { + return this.parkings; + } + + /** + * Gets a collection of bookngs from database + */ + getBookings() { + return this.bookings; + } + + /** + * Gets a collection of users from database + */ + getUsers() { + return this.users; + } + + /** + * Books a parking slot + * @param bookingDetail + */ + bookParkingSlot(bookingDetail: BookingDetails) { + const slotDetail = { + parkingId: bookingDetail.parkingId, + userId: bookingDetail.userId, + contact: bookingDetail.userContact, + row: bookingDetail.row, + column: bookingDetail.column, + startTIme: bookingDetail.startTime, + endTime: bookingDetail.endTime, + status: bookingDetail.status, + paymentStatus: 'P', + amount: bookingDetail.amount, + vehicleNo: bookingDetail.vehicleNo + }; + this.bookings + .doc(`${bookingDetail.parkingId}${slotDetail.row}${slotDetail.column}`) + .set(slotDetail) + .then(() => { + this.parkings + .doc(bookingDetail.parkingId) + .get() + .subscribe(data => { + const detail = data.data(); + const available = parseInt(detail.available, 10); + this.parkings + .doc(bookingDetail.parkingId) + .set({ + available: available - 1 + }, { merge: true }). + then(() => { + console.log('Booked successfully'); + }); + }); + }); + } + + /** + * Gets a slot details + * @param parkingId + * @param row + * @param column + */ + getSlotDetails(parkingId, row, column) { + return this.bookings.doc(`${parkingId}${row}${column}`).get(); + } + + /** + * Checks out from the parking and frees the slot + * @param parkingId + * @param row + * @param column + */ + checkOut(parkingId, row, column) { + this.bookings + .doc(`${parkingId}${row}${column}`) + .delete() + .then(() => { + this.parkings + .doc(parkingId) + .get() + .subscribe(data => { + const detail = data.data(); + const available = parseInt(detail.available, 10); + this.parkings + .doc(parkingId) + .set({ + available: available + 1 + }, { merge: true }). + then(() => { + console.log("Checked out Successfully"); + }); + }); + }); + } +} From e66147393a40163be7da86bc932a4285e1c901d0 Mon Sep 17 00:00:00 2001 From: Mahadev Mandole Date: Sat, 15 Jun 2019 12:33:10 +0530 Subject: [PATCH 14/24] added location search,location list ui --- src/app/app.module.ts | 2 +- src/assets/img/circled-left-arrow.png | Bin 0 -> 998 bytes src/assets/img/hourglass-sand-bottom.png | Bin 0 -> 695 bytes src/assets/img/marker.png | Bin 0 -> 846 bytes src/assets/img/time-machine.png | Bin 0 -> 1186 bytes .../location-list.component.html | 18 ++++ .../location-list.component.scss | 41 ++++++++++ .../location-list.component.spec.ts | 25 ++++++ .../location-list/location-list.component.ts | 15 ++++ .../location-slots.component.html | 3 + .../location-slots.component.scss | 0 .../location-slots.component.spec.ts | 25 ++++++ .../location-slots.component.ts | 15 ++++ .../search-location.component.html | 30 +++++++ .../search-location.component.scss | 77 ++++++++++++++++++ .../search-location.component.spec.ts | 25 ++++++ .../search-location.component.ts | 27 ++++++ .../parking-module/spas.component.html | 4 +- src/modules/parking-module/spas.component.ts | 8 +- src/modules/parking-module/spas.module.ts | 20 ++++- src/modules/parking-module/spas.routing.ts | 14 +++- 21 files changed, 341 insertions(+), 8 deletions(-) create mode 100644 src/assets/img/circled-left-arrow.png create mode 100644 src/assets/img/hourglass-sand-bottom.png create mode 100644 src/assets/img/marker.png create mode 100644 src/assets/img/time-machine.png create mode 100644 src/modules/parking-module/components/location-list/location-list.component.html create mode 100644 src/modules/parking-module/components/location-list/location-list.component.scss create mode 100644 src/modules/parking-module/components/location-list/location-list.component.spec.ts create mode 100644 src/modules/parking-module/components/location-list/location-list.component.ts create mode 100644 src/modules/parking-module/components/location-slots/location-slots.component.html create mode 100644 src/modules/parking-module/components/location-slots/location-slots.component.scss create mode 100644 src/modules/parking-module/components/location-slots/location-slots.component.spec.ts create mode 100644 src/modules/parking-module/components/location-slots/location-slots.component.ts create mode 100644 src/modules/parking-module/components/search-location/search-location.component.html create mode 100644 src/modules/parking-module/components/search-location/search-location.component.scss create mode 100644 src/modules/parking-module/components/search-location/search-location.component.spec.ts create mode 100644 src/modules/parking-module/components/search-location/search-location.component.ts diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 845b6dd..5d0d4ff 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -19,7 +19,7 @@ export function createTranslateLoader(http: HttpClient) { @NgModule({ declarations: [ - AppComponent + AppComponent, ], imports: [ BrowserModule, diff --git a/src/assets/img/circled-left-arrow.png b/src/assets/img/circled-left-arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..f0b79d741eb13efe1ea5c23ec8219efad1b9d8b1 GIT binary patch literal 998 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1A9qCK~!i%?U*}n z6G0HiEkG1hJPTf5fEED(#di@A6;Zqw?0}#`0*QtW0f8b7Bq@PNfWkKj#3c6KIRz07 zh}w`KfhaJBCQrINcwA=e39*y8^WMW}3jd{_V&!&c{(CpOx3{sTnrbSzQmNssx?#0w zhIvOf%n{v?Q}B0Q7jmTp{MLk=)C~DT7iLder#uns?cGA%8>e_;{4f|A0E0gO+Y2zD zA`G}627ZXbMJK%@vls5>5SU-)%y|N0K&;0Ylfu_mT9Zc#L38uKP!RQ`!J(B6E@tP#baim7SlOE15@eZGsRN+2dr>S+pf)1GsVR=39Guc9E=? z#kC8BkhjUEv!MRdY-bm+-j`SYknMGGZG!;sgy&?_S&#JE@0_?kL4djWfowVp z8qRO*$g#2BIeq%_(-T~tO7O)>Hl3xi{&V#nhPYf+fH$(~ER_L_<_eTDTyeRoP#S<@ z2|XB^w155nOR2*Vm!}e?62ghXb>_H!_nkezute!M>*|d+p5Ss+Bj1xvXF@Z4fjgdy8y33lFHc&MIu27hIbl zXohu+Y`UnlnUh5>fC`oKg1hb;VHT86^I*33vq2PDn-|7pxI@{-i|VhxGsQQQvx2?jl>>6z?+6vq2-IEn%J`JN^W7 zp>d}Z!hA?J{0k3SAqQ^PwH?t_hz+6e|;KCLe`%=Q+WS zFa@jA43|6*u-d@;CrN4QtCr;WZd{vzCDx1w@Fj(JT~EB+N#Uat9{0f@`k-bDoH@~07*qoM6N<$f;HaHV*mgE literal 0 HcmV?d00001 diff --git a/src/assets/img/hourglass-sand-bottom.png b/src/assets/img/hourglass-sand-bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..da49c4fbab543299adef944aa2e5aca51646f70d GIT binary patch literal 695 zcmV;o0!aOdP)P000>X1^@s6#OZ}&00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0!&FnK~zXfV?YNU zU8miAd(RY5gnLdVK#ju=f+n8Z-?Z!fe@bxJ)C&)x#$g8m{bzUOE`RW(WZl!ZGtT_| zPYSNx_WCPGZ_tEu_n^jM2d>>m#hlwuDFshD`x%=n@!^Q67yp3tx^x_tgBph)#LYN= zd*j)c|4G3qb1r>=Y9|h4%)NN(KZ&4f<+Z0!?Zko1c^8jB^%4!rmtT7T)lM8pnRR~c z*B^hN+KB@|hh2wiCk}*8Ivca+@~f{<{RF|wk3aq=%{;#hs+~AcU;m#e3+S@nfBr#@ z!4KLu-g@TVep~^nop=yB;fzho`kPM)S+nWv^N(@U&s9RTkq#24p9?8lcJ==A4?mzr zBEYwwfByGwz4JVI_JuB}a`J&k>j|xZzLTHN+HqH{p{cWZFf-d{)hkmfB6Nm z2$Z^9yH6-WwG#(G`DE{v*Iz+CI0;N&=oY~6-uwUle+LF1D4!(Hys#3goj8y>`@%X< zjt9jxHp7uI$d@2Ma*hX;U4MakK`zB+FgpJ9^Z)-cQp+w-Dg62yVPC-T&A0zZFNHz% z$%3OV|99+sK@^^L@CEVp30-PNP#vGKMgIng7gMVIEO!O=+auD de!Gi-0RYLPk68UW`+NWZ002ovPDHLkV1hszQ&j)} literal 0 HcmV?d00001 diff --git a/src/assets/img/marker.png b/src/assets/img/marker.png new file mode 100644 index 0000000000000000000000000000000000000000..a81c54da3cd5fa41f3784a72db5ca9f6a5ee4415 GIT binary patch literal 846 zcmV-U1F`&xP)P000>X1^@s6#OZ}&00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0^>j#0nUS zl4x7UwoD(P7+S3Xpk%t1pbuK+rI?O;T`b$o3?mg%G?o8(1IcdpqQe`=qp|lBv zwT=s!HP%c#ht$pyHaJ8woyT>lB`{fG`m%VZKZ@{pu_Z8(uk+Bkb@p5+O&tNzyH7&U zPp@=MMD_Mx$lzSr6nLGOf) zq6YfvbyIkb%aAY1pH0t-31aO9xi`NJ&?Z-o6|cR==DbbyAJ{ zIau){)3`ba+t0YL?)4nfn#aL55v_TQ$SdW1fKMDofecs@Ezfp_>-)?zN1eJGBpqsrBq<3uo3!H26jU;^`Wg2%|1M4Zb z3tTTH-A1t3o{TDMda?0ih|7#GikbtVOqJy@SR_Zj&fQPGUF0-m2R@B5()9wQ$s??J zcciG@%6$#;L21)7&6x4wNtv9$;Kgrj6 zf+rM%`$6(|2A!=N(F_ccg-_mO50}P000>X1^@s6#OZ}&00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1UE@UK~zXfotFJi zTU8jxYt(P4p>G#TN82daj=qJ7G}G>2pp&%C9ucCfCf`XcvYgKB2HdC(VEn>R?eHA~Lxm-A8#pc|Q2PF-;WXYve@l zoKHIzaNLijOsnhJdx>>ENZVQTwFbZIRNuT0^DzHCjl+lCGqc6O$*F!%taUiFD%JVY znkk-~84f?_H-FmqH!rlC;Q62>Vr#h?SnlR>B6;*F)Orw81TZflM-X&hd$-26NFf*lzCex(;l9k+cE(!ew>Igeh(ocsoV&)5|{#ZEw@lP&t?$_Yfbxb=;ejYFF zh|lNA7XvQg!u=+{n8G&2L`o1tjhuUpxe$pgo`>OZB2D(Xb{g2pRdYz#1$MI&oYBdC zw;!r&RM|!Z2d`?Up6s6CY7g04P!~Wt zhptcb&ikp(_kO)S7!cCitnbY>;`6fn}hAv7n-zAFS01I zDb1=DwzeYhVyCZo!dQP){`7lS&0dVsos9bGYoW-6&C19V=?wIHh}e@AM& z_9@4xYkB9#lGMIYmMjx)e~tb1EIeUOEc A0{{R3 literal 0 HcmV?d00001 diff --git a/src/modules/parking-module/components/location-list/location-list.component.html b/src/modules/parking-module/components/location-list/location-list.component.html new file mode 100644 index 0000000..e191a4a --- /dev/null +++ b/src/modules/parking-module/components/location-list/location-list.component.html @@ -0,0 +1,18 @@ +
+
+
+ +
Available Locations
+
+
+
+
+
+ + + + +
+ +
+
\ No newline at end of file diff --git a/src/modules/parking-module/components/location-list/location-list.component.scss b/src/modules/parking-module/components/location-list/location-list.component.scss new file mode 100644 index 0000000..52e6eb9 --- /dev/null +++ b/src/modules/parking-module/components/location-list/location-list.component.scss @@ -0,0 +1,41 @@ +.available-locations-container { + background-color: #ffc306; + height: 100vh; + .available-locations-header { + height: 40px; + img { + height: 50px; + width: 50px; + } + h5 { + color: #3f51b5; + display: inline-block; + vertical-align: -webkit-baseline-middle; + } + } + .available-locations-body { + .btn-grp { + font-size: 24px; + button { + height: 100px; + width: 100px; + flex: 0 0 44%; + max-width: 44%; + margin: 3%; + background: rgba(255, 255, 255, 0.7); + } + } + + .select-location-btn { + background-color: #3f51b5; + color: #fff; + font-weight: 500; + position: absolute; + margin: 0 auto; + right: 0; + left: 0; + width: fit-content; + margin-bottom: 30px; + } + } + } \ No newline at end of file diff --git a/src/modules/parking-module/components/location-list/location-list.component.spec.ts b/src/modules/parking-module/components/location-list/location-list.component.spec.ts new file mode 100644 index 0000000..1457d93 --- /dev/null +++ b/src/modules/parking-module/components/location-list/location-list.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LocationListComponent } from './location-list.component'; + +describe('LocationListComponent', () => { + let component: LocationListComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ LocationListComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(LocationListComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/modules/parking-module/components/location-list/location-list.component.ts b/src/modules/parking-module/components/location-list/location-list.component.ts new file mode 100644 index 0000000..15343f7 --- /dev/null +++ b/src/modules/parking-module/components/location-list/location-list.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-location-list', + templateUrl: './location-list.component.html', + styleUrls: ['./location-list.component.scss'] +}) +export class LocationListComponent implements OnInit { + + constructor() { } + + ngOnInit() { + } + +} diff --git a/src/modules/parking-module/components/location-slots/location-slots.component.html b/src/modules/parking-module/components/location-slots/location-slots.component.html new file mode 100644 index 0000000..eded84f --- /dev/null +++ b/src/modules/parking-module/components/location-slots/location-slots.component.html @@ -0,0 +1,3 @@ +

+ location-slots works! +

diff --git a/src/modules/parking-module/components/location-slots/location-slots.component.scss b/src/modules/parking-module/components/location-slots/location-slots.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/modules/parking-module/components/location-slots/location-slots.component.spec.ts b/src/modules/parking-module/components/location-slots/location-slots.component.spec.ts new file mode 100644 index 0000000..dee412e --- /dev/null +++ b/src/modules/parking-module/components/location-slots/location-slots.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LocationSlotsComponent } from './location-slots.component'; + +describe('LocationSlotsComponent', () => { + let component: LocationSlotsComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ LocationSlotsComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(LocationSlotsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/modules/parking-module/components/location-slots/location-slots.component.ts b/src/modules/parking-module/components/location-slots/location-slots.component.ts new file mode 100644 index 0000000..f0df7e8 --- /dev/null +++ b/src/modules/parking-module/components/location-slots/location-slots.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-location-slots', + templateUrl: './location-slots.component.html', + styleUrls: ['./location-slots.component.scss'] +}) +export class LocationSlotsComponent implements OnInit { + + constructor() { } + + ngOnInit() { + } + +} diff --git a/src/modules/parking-module/components/search-location/search-location.component.html b/src/modules/parking-module/components/search-location/search-location.component.html new file mode 100644 index 0000000..c380317 --- /dev/null +++ b/src/modules/parking-module/components/search-location/search-location.component.html @@ -0,0 +1,30 @@ +
+
+ +
+ +
Enter Location
+
+
+
+ +
\ No newline at end of file diff --git a/src/modules/parking-module/components/search-location/search-location.component.scss b/src/modules/parking-module/components/search-location/search-location.component.scss new file mode 100644 index 0000000..d34eaa9 --- /dev/null +++ b/src/modules/parking-module/components/search-location/search-location.component.scss @@ -0,0 +1,77 @@ +@import "../../../../assets/scss/variable.scss"; + +.where-to-container { + background-color: #ffc306; + height: 100vh; + .where-to-header { + height: 40px; + .my-bookings-btn { + background-color: rgba(215, 40, 40, 0.7); + background: rgba(215, 40, 40, 0.7); + color: #fff; + font-weight: 500; + position: absolute; + right: 15px; + } + img { + height: 50px; + width: 50px; + } + h5 { + color: #3f51b5; + display: inline-block; + vertical-align: -webkit-baseline-middle; + } + } + .where-to-body { + label { + position: relative; + width: 100%; + } + + label.location:before { + content: ""; + position: absolute; + left: 10px; + top: 24px; + bottom: 0; + width: 20px; + background: url("../../../../assets/img/marker.png") 50% 50% no-repeat; + } + label.start-time:before { + content: ""; + position: absolute; + left: 10px; + top: 24px; + bottom: 0; + width: 30px; + background: url("../../../../assets/img/time-machine.png") 50% 50% no-repeat; + } + + label.duration:before { + content: ""; + position: absolute; + left: 10px; + top: 24px; + bottom: 0; + width: 30px; + background: url("../../../../assets/img/hourglass-sand-bottom.png") 50% 50% no-repeat; + } + + input { + padding: 10px 40px; + } + + .my-bookings-btn { + background-color: #3F51B5; + color: #fff; + font-weight: 500; + position: absolute; + margin: 0 auto; + right:0; + left: 0; + width: fit-content; + margin-bottom: 30px; + } + } + } \ No newline at end of file diff --git a/src/modules/parking-module/components/search-location/search-location.component.spec.ts b/src/modules/parking-module/components/search-location/search-location.component.spec.ts new file mode 100644 index 0000000..9c2bdd3 --- /dev/null +++ b/src/modules/parking-module/components/search-location/search-location.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SearchLocationComponent } from './search-location.component'; + +describe('SearchLocationComponent', () => { + let component: SearchLocationComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ SearchLocationComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(SearchLocationComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/modules/parking-module/components/search-location/search-location.component.ts b/src/modules/parking-module/components/search-location/search-location.component.ts new file mode 100644 index 0000000..5261f71 --- /dev/null +++ b/src/modules/parking-module/components/search-location/search-location.component.ts @@ -0,0 +1,27 @@ +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; + +@Component({ + selector: 'app-search-location', + templateUrl: './search-location.component.html', + styleUrls: ['./search-location.component.scss'] +}) +export class SearchLocationComponent implements OnInit { + + searchForm: FormGroup; + + constructor( private formBuilder: FormBuilder) { } + + ngOnInit() { + this.searchForm = this.formBuilder.group({ + location: ['', Validators.required], + time: ['', Validators.required], + duration: ['', Validators.required] + }); + } + + searchLocation() { + + } + +} diff --git a/src/modules/parking-module/spas.component.html b/src/modules/parking-module/spas.component.html index 0e63bf9..0a5d2ad 100644 --- a/src/modules/parking-module/spas.component.html +++ b/src/modules/parking-module/spas.component.html @@ -8,8 +8,8 @@

- - + +
diff --git a/src/modules/parking-module/spas.component.ts b/src/modules/parking-module/spas.component.ts index 11c4655..83059a7 100644 --- a/src/modules/parking-module/spas.component.ts +++ b/src/modules/parking-module/spas.component.ts @@ -1,5 +1,6 @@ import { Component, OnInit } from '@angular/core'; import { TranslateService } from '@ngx-translate/core'; +import { Router } from '@angular/router'; @Component({ selector: 'spas-app', @@ -9,10 +10,15 @@ import { TranslateService } from '@ngx-translate/core'; export class SpasComponent { label_name = 'Smart Parking assit system'; + routeName: string; - constructor(private translateService: TranslateService) { + constructor( + private translateService: TranslateService, + private router: Router + ) { this.translateService.setDefaultLang('en-US'); this.translateService.use('en-US'); + this.routeName = router.url; } } diff --git a/src/modules/parking-module/spas.module.ts b/src/modules/parking-module/spas.module.ts index 7b893a4..2f9fe2a 100644 --- a/src/modules/parking-module/spas.module.ts +++ b/src/modules/parking-module/spas.module.ts @@ -1,3 +1,6 @@ +/** + * Angular Imports + */ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { SpasComponent } from './spas.component'; @@ -5,19 +8,30 @@ import { SpasRouting } from './spas.routing'; import { TranslateModule, TranslateLoader } from '@ngx-translate/core'; import { TranslateHttpLoader } from '@ngx-translate/http-loader'; import { HttpClient } from '@angular/common/http'; -import { FormsModule } from '@angular/forms'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; + +/** + * Module Imports + */ import { createTranslateLoader } from 'src/app/app.module'; import { SpasBookingComponent } from './components/spas-booking/spas-booking.component'; -import { SpasDataService } from 'src/modules/parking-module/services/spas-data.service'; +import { SpasDataService } from './services/spas-data.service'; +import { SearchLocationComponent } from './components/search-location/search-location.component'; +import { LocationListComponent } from './components/location-list/location-list.component'; +import { LocationSlotsComponent } from './components/location-slots/location-slots.component'; @NgModule({ declarations: [ SpasComponent, - SpasBookingComponent + SpasBookingComponent, + SearchLocationComponent, + LocationListComponent, + LocationSlotsComponent ], imports: [ CommonModule, FormsModule, + ReactiveFormsModule, SpasRouting, TranslateModule.forRoot({ loader: { diff --git a/src/modules/parking-module/spas.routing.ts b/src/modules/parking-module/spas.routing.ts index d9400fc..13f572b 100644 --- a/src/modules/parking-module/spas.routing.ts +++ b/src/modules/parking-module/spas.routing.ts @@ -1,9 +1,21 @@ +/** + * Angular imports + */ import { Routes, RouterModule } from "@angular/router"; import { SpasComponent } from './spas.component'; import { ModuleWithProviders } from '@angular/compiler/src/core'; +/** + * Module Imports + */ +import { SearchLocationComponent } from './components/search-location/search-location.component'; +import { LocationListComponent } from './components/location-list/location-list.component'; + const routes: Routes = [ - { path: '', component: SpasComponent } + { path: '', component: SpasComponent }, + { path: 'user/search-location', component: SearchLocationComponent }, + { path: 'operator/search-location', component: SearchLocationComponent }, + { path: 'locations', component: LocationListComponent } ]; export const SpasRouting: ModuleWithProviders = RouterModule.forChild(routes); \ No newline at end of file From 7b4fa3a0d1ab9381200744923952d045446bd18b Mon Sep 17 00:00:00 2001 From: omkarpadwale Date: Sat, 15 Jun 2019 13:18:03 +0530 Subject: [PATCH 15/24] created user booking component --- .../spas-booking/spas-booking.component.html | 53 +++++++++++++++++-- .../spas-booking/spas-booking.component.ts | 44 ++++++++++++++- .../models/spas-booking-data.ts | 53 ++++++++++++++++++- .../services/spas-data.service.ts | 15 +++++- .../parking-module/spas.component.html | 1 + 5 files changed, 158 insertions(+), 8 deletions(-) diff --git a/src/modules/parking-module/components/spas-booking/spas-booking.component.html b/src/modules/parking-module/components/spas-booking/spas-booking.component.html index 59dde5b..1286725 100644 --- a/src/modules/parking-module/components/spas-booking/spas-booking.component.html +++ b/src/modules/parking-module/components/spas-booking/spas-booking.component.html @@ -1,3 +1,50 @@ -

- spas-booking works! -

+ +

Enter Booking Details

+
+
+
NearBy Area:
+ +
+
+
Parking Location:
+ +
+
+
user name:
+ +
+
+
contact number:
+ +
+
+
vehicle number:
+ +
+
+
Start Time:
+ +
+
+
End Time:
+ +
+
+
Slot Booked:
+ +
+
+
Charged Amount:
+ +
+ +
+
+ +
+
+ +
+
+ +
\ No newline at end of file diff --git a/src/modules/parking-module/components/spas-booking/spas-booking.component.ts b/src/modules/parking-module/components/spas-booking/spas-booking.component.ts index 4bc089c..ca04ad1 100644 --- a/src/modules/parking-module/components/spas-booking/spas-booking.component.ts +++ b/src/modules/parking-module/components/spas-booking/spas-booking.component.ts @@ -1,15 +1,55 @@ import { Component, OnInit } from '@angular/core'; +import { BookingData } from 'src/modules/parking-module/models/spas-booking-data'; +import { SpasDataService } from 'src/modules/parking-module/services/spas-data.service'; @Component({ - selector: 'app-spas-booking', + selector: 'spas-booking', templateUrl: './spas-booking.component.html', styleUrls: ['./spas-booking.component.scss'] }) export class SpasBookingComponent implements OnInit { - constructor() { } + bookingData: BookingData; + + constructor( + private spasDataService: SpasDataService + ) { + + // should be input - user selection + this.bookingData = new BookingData({ + area: 'kalyani nagar', + parkingName: 'dmart parking 1', + parkingId: '1', + startTime: '10.00', + endTime: '12.00', + row: '2', + column: '2' + }); + } ngOnInit() { } + /** + * Saves user booking details and accepts payment and books slot for user + * API call for booking data + */ + payNProceed() { + console.log(this.bookingData); + // fire Update request. + const updateBookingDetails = { + parkingId: this.bookingData.parkingId, + userId: this.bookingData.userId, + row: this.bookingData.row, + column: this.bookingData.column, + startTime: this.bookingData.startTime, + endTime: this.bookingData.endTime, + userContact: this.bookingData.userContact, + status: this.bookingData.status, + paymentStatus: this.bookingData.paymentStatus, + amount: this.bookingData.amount, + vehicleNo: this.bookingData.vehicleNo + } + this.spasDataService.storeCurrentBookingData(this.bookingData); + } } diff --git a/src/modules/parking-module/models/spas-booking-data.ts b/src/modules/parking-module/models/spas-booking-data.ts index 9e811d7..a0fcaa8 100644 --- a/src/modules/parking-module/models/spas-booking-data.ts +++ b/src/modules/parking-module/models/spas-booking-data.ts @@ -1,4 +1,47 @@ -interface BookingDetails { +/** + * Holds user booking details + */ +export class BookingData { + area?: string; + parkingId?: string; + parkingName?: string; + username?: string; + userId?: string; + userContact?: string; + vehicleNo?: string; + startTime?: string; + endTime?: string; + row?: string; + column?: string; + amount?: string; + paymentStatus?: string; + status?: string; + slotNumber?: string; + + constructor(data?: BookingData) { + this.area = data.area ? data.area : ''; + this.parkingName = data.parkingName ? data.parkingName : ''; + this.username = data.username ? data.username : ''; + this.userContact = data.userContact ? data.userContact : undefined; + this.vehicleNo = data.vehicleNo ? data.vehicleNo : ''; + this.startTime = data.startTime ? data.startTime : ''; + this.endTime = data.endTime ? data.endTime : ''; + this.row = data.row ? data.row : undefined; + this.column = data.column ? data.column : undefined; + this.slotNumber = data.row && data.column ? alphabets[data.row] + '-' + data.column : undefined; + this.amount = data.amount ? data.amount : undefined; + this.status = data.status ? data.status : undefined; + this.paymentStatus = data.paymentStatus ? data.paymentStatus : undefined; + this.userId = data.userId ? data.userId : undefined; + this.parkingId = data.parkingId ? data.parkingId : undefined; + + } +} + +/** + * Booking to be sent to API + */ +export interface BookingDetails { parkingId: string; userId: string; row: string; @@ -10,4 +53,10 @@ interface BookingDetails { paymentStatus: string; amount: string; vehicleNo: string; -}; \ No newline at end of file +} + +/** + * Holds Alphabets to have numbering for slots. + */ +export const alphabets = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', + 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']; diff --git a/src/modules/parking-module/services/spas-data.service.ts b/src/modules/parking-module/services/spas-data.service.ts index 1f98884..f4afb52 100644 --- a/src/modules/parking-module/services/spas-data.service.ts +++ b/src/modules/parking-module/services/spas-data.service.ts @@ -1,6 +1,19 @@ import { Injectable } from '@angular/core'; +import { BookingData } from 'src/modules/parking-module/models/spas-booking-data'; @Injectable({ providedIn: 'root', }) -export class SpasDataService { } \ No newline at end of file +export class SpasDataService { + + bookingDetails: BookingData; + + /** + * Stores the current booking inforamation of user + * @param bookingData: Holds booking details + * @memberOf SpasDataService + */ + storeCurrentBookingData(bookingData: BookingData) { + this.bookingDetails = bookingData; + } +} \ No newline at end of file diff --git a/src/modules/parking-module/spas.component.html b/src/modules/parking-module/spas.component.html index 0e63bf9..ca40482 100644 --- a/src/modules/parking-module/spas.component.html +++ b/src/modules/parking-module/spas.component.html @@ -12,5 +12,6 @@ + \ No newline at end of file From 9f9e82b6e9f29105140d7c302d5ebaedb1ff6d81 Mon Sep 17 00:00:00 2001 From: Sayali Bhutkar Date: Sat, 15 Jun 2019 14:26:03 +0530 Subject: [PATCH 16/24] Adding icons --- src/assets/img/circled-left-arrow.png | Bin 0 -> 998 bytes src/assets/img/hourglass-sand-bottom.png | Bin 0 -> 695 bytes src/assets/img/marker.png | Bin 0 -> 846 bytes src/assets/img/time-machine.png | Bin 0 -> 1186 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/assets/img/circled-left-arrow.png create mode 100644 src/assets/img/hourglass-sand-bottom.png create mode 100644 src/assets/img/marker.png create mode 100644 src/assets/img/time-machine.png diff --git a/src/assets/img/circled-left-arrow.png b/src/assets/img/circled-left-arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..f0b79d741eb13efe1ea5c23ec8219efad1b9d8b1 GIT binary patch literal 998 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1A9qCK~!i%?U*}n z6G0HiEkG1hJPTf5fEED(#di@A6;Zqw?0}#`0*QtW0f8b7Bq@PNfWkKj#3c6KIRz07 zh}w`KfhaJBCQrINcwA=e39*y8^WMW}3jd{_V&!&c{(CpOx3{sTnrbSzQmNssx?#0w zhIvOf%n{v?Q}B0Q7jmTp{MLk=)C~DT7iLder#uns?cGA%8>e_;{4f|A0E0gO+Y2zD zA`G}627ZXbMJK%@vls5>5SU-)%y|N0K&;0Ylfu_mT9Zc#L38uKP!RQ`!J(B6E@tP#baim7SlOE15@eZGsRN+2dr>S+pf)1GsVR=39Guc9E=? z#kC8BkhjUEv!MRdY-bm+-j`SYknMGGZG!;sgy&?_S&#JE@0_?kL4djWfowVp z8qRO*$g#2BIeq%_(-T~tO7O)>Hl3xi{&V#nhPYf+fH$(~ER_L_<_eTDTyeRoP#S<@ z2|XB^w155nOR2*Vm!}e?62ghXb>_H!_nkezute!M>*|d+p5Ss+Bj1xvXF@Z4fjgdy8y33lFHc&MIu27hIbl zXohu+Y`UnlnUh5>fC`oKg1hb;VHT86^I*33vq2PDn-|7pxI@{-i|VhxGsQQQvx2?jl>>6z?+6vq2-IEn%J`JN^W7 zp>d}Z!hA?J{0k3SAqQ^PwH?t_hz+6e|;KCLe`%=Q+WS zFa@jA43|6*u-d@;CrN4QtCr;WZd{vzCDx1w@Fj(JT~EB+N#Uat9{0f@`k-bDoH@~07*qoM6N<$f;HaHV*mgE literal 0 HcmV?d00001 diff --git a/src/assets/img/hourglass-sand-bottom.png b/src/assets/img/hourglass-sand-bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..da49c4fbab543299adef944aa2e5aca51646f70d GIT binary patch literal 695 zcmV;o0!aOdP)P000>X1^@s6#OZ}&00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0!&FnK~zXfV?YNU zU8miAd(RY5gnLdVK#ju=f+n8Z-?Z!fe@bxJ)C&)x#$g8m{bzUOE`RW(WZl!ZGtT_| zPYSNx_WCPGZ_tEu_n^jM2d>>m#hlwuDFshD`x%=n@!^Q67yp3tx^x_tgBph)#LYN= zd*j)c|4G3qb1r>=Y9|h4%)NN(KZ&4f<+Z0!?Zko1c^8jB^%4!rmtT7T)lM8pnRR~c z*B^hN+KB@|hh2wiCk}*8Ivca+@~f{<{RF|wk3aq=%{;#hs+~AcU;m#e3+S@nfBr#@ z!4KLu-g@TVep~^nop=yB;fzho`kPM)S+nWv^N(@U&s9RTkq#24p9?8lcJ==A4?mzr zBEYwwfByGwz4JVI_JuB}a`J&k>j|xZzLTHN+HqH{p{cWZFf-d{)hkmfB6Nm z2$Z^9yH6-WwG#(G`DE{v*Iz+CI0;N&=oY~6-uwUle+LF1D4!(Hys#3goj8y>`@%X< zjt9jxHp7uI$d@2Ma*hX;U4MakK`zB+FgpJ9^Z)-cQp+w-Dg62yVPC-T&A0zZFNHz% z$%3OV|99+sK@^^L@CEVp30-PNP#vGKMgIng7gMVIEO!O=+auD de!Gi-0RYLPk68UW`+NWZ002ovPDHLkV1hszQ&j)} literal 0 HcmV?d00001 diff --git a/src/assets/img/marker.png b/src/assets/img/marker.png new file mode 100644 index 0000000000000000000000000000000000000000..a81c54da3cd5fa41f3784a72db5ca9f6a5ee4415 GIT binary patch literal 846 zcmV-U1F`&xP)P000>X1^@s6#OZ}&00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0^>j#0nUS zl4x7UwoD(P7+S3Xpk%t1pbuK+rI?O;T`b$o3?mg%G?o8(1IcdpqQe`=qp|lBv zwT=s!HP%c#ht$pyHaJ8woyT>lB`{fG`m%VZKZ@{pu_Z8(uk+Bkb@p5+O&tNzyH7&U zPp@=MMD_Mx$lzSr6nLGOf) zq6YfvbyIkb%aAY1pH0t-31aO9xi`NJ&?Z-o6|cR==DbbyAJ{ zIau){)3`ba+t0YL?)4nfn#aL55v_TQ$SdW1fKMDofecs@Ezfp_>-)?zN1eJGBpqsrBq<3uo3!H26jU;^`Wg2%|1M4Zb z3tTTH-A1t3o{TDMda?0ih|7#GikbtVOqJy@SR_Zj&fQPGUF0-m2R@B5()9wQ$s??J zcciG@%6$#;L21)7&6x4wNtv9$;Kgrj6 zf+rM%`$6(|2A!=N(F_ccg-_mO50}P000>X1^@s6#OZ}&00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1UE@UK~zXfotFJi zTU8jxYt(P4p>G#TN82daj=qJ7G}G>2pp&%C9ucCfCf`XcvYgKB2HdC(VEn>R?eHA~Lxm-A8#pc|Q2PF-;WXYve@l zoKHIzaNLijOsnhJdx>>ENZVQTwFbZIRNuT0^DzHCjl+lCGqc6O$*F!%taUiFD%JVY znkk-~84f?_H-FmqH!rlC;Q62>Vr#h?SnlR>B6;*F)Orw81TZflM-X&hd$-26NFf*lzCex(;l9k+cE(!ew>Igeh(ocsoV&)5|{#ZEw@lP&t?$_Yfbxb=;ejYFF zh|lNA7XvQg!u=+{n8G&2L`o1tjhuUpxe$pgo`>OZB2D(Xb{g2pRdYz#1$MI&oYBdC zw;!r&RM|!Z2d`?Up6s6CY7g04P!~Wt zhptcb&ikp(_kO)S7!cCitnbY>;`6fn}hAv7n-zAFS01I zDb1=DwzeYhVyCZo!dQP){`7lS&0dVsos9bGYoW-6&C19V=?wIHh}e@AM& z_9@4xYkB9#lGMIYmMjx)e~tb1EIeUOEc A0{{R3 literal 0 HcmV?d00001 From 90551053a2ff5dd0fb8be6889ec293ef217f4714 Mon Sep 17 00:00:00 2001 From: Satish Date: Sat, 15 Jun 2019 14:30:56 +0530 Subject: [PATCH 17/24] Changes in firebase service --- .../models/spas-booking-data.ts | 2 +- .../services/parking.service.ts | 50 +++++++++++++++++-- src/modules/parking-module/spas.module.ts | 14 +++--- 3 files changed, 54 insertions(+), 12 deletions(-) diff --git a/src/modules/parking-module/models/spas-booking-data.ts b/src/modules/parking-module/models/spas-booking-data.ts index 9e811d7..2b9b01e 100644 --- a/src/modules/parking-module/models/spas-booking-data.ts +++ b/src/modules/parking-module/models/spas-booking-data.ts @@ -10,4 +10,4 @@ interface BookingDetails { paymentStatus: string; amount: string; vehicleNo: string; -}; \ No newline at end of file +} diff --git a/src/modules/parking-module/services/parking.service.ts b/src/modules/parking-module/services/parking.service.ts index 6908b6e..0651687 100644 --- a/src/modules/parking-module/services/parking.service.ts +++ b/src/modules/parking-module/services/parking.service.ts @@ -1,6 +1,5 @@ import { Injectable } from '@angular/core'; import { AngularFirestore } from '@angular/fire/firestore'; -import { Observable, of } from 'rxjs'; @Injectable({ providedIn: 'root' @@ -47,9 +46,9 @@ export class ParkingService { contact: bookingDetail.userContact, row: bookingDetail.row, column: bookingDetail.column, - startTIme: bookingDetail.startTime, + startTime: bookingDetail.startTime, endTime: bookingDetail.endTime, - status: bookingDetail.status, + status: 'B', paymentStatus: 'P', amount: bookingDetail.amount, vehicleNo: bookingDetail.vehicleNo @@ -67,12 +66,25 @@ export class ParkingService { this.parkings .doc(bookingDetail.parkingId) .set({ - available: available - 1 + available: available - 1, + booked: [`${bookingDetail.row}${bookingDetail.column}`] }, { merge: true }). then(() => { + // this.parkings.doc(bookingDetail.parkingId) + // .collection('booked') + // .doc(`${bookingDetail.parkingId}${slotDetail.row}${slotDetail.column}`) + // .set({ + // 'booked': true + // }); console.log('Booked successfully'); }); }); + + this.users.doc(bookingDetail.userId) + .set({ + userId: bookingDetail.userId, + bookedSlot: `${bookingDetail.parkingId}${slotDetail.row}${slotDetail.column}` + }); }); } @@ -92,7 +104,7 @@ export class ParkingService { * @param row * @param column */ - checkOut(parkingId, row, column) { + checkOut(parkingId, userId, row, column) { this.bookings .doc(`${parkingId}${row}${column}`) .delete() @@ -109,9 +121,37 @@ export class ParkingService { available: available + 1 }, { merge: true }). then(() => { + // this.parkings.doc(parkingId) + // .collection('booked') + // .doc(`${parkingId}${row}${column}`) + // .delete(); console.log("Checked out Successfully"); }); }); + this.users.doc(userId).delete(); }); } + + /** + * Books a parking slot + * @param bookingDetail + */ + checkInParkingSlot(parkingId, row, column) { + this.bookings + .doc(`${parkingId}${row}${column}`) + .set({ + status: 'P' + }, { merge: true }) + .then(() => { + console.log('Checked In successfully'); + }); + } + + // getBookedSlots(parkingId) { + // this.fireStore.collection('booked').get().subscribe((data) => { + // data.map(d => { + // console.log('d', d); + // }); + // }); + // } } diff --git a/src/modules/parking-module/spas.module.ts b/src/modules/parking-module/spas.module.ts index 7b893a4..6c094c2 100644 --- a/src/modules/parking-module/spas.module.ts +++ b/src/modules/parking-module/spas.module.ts @@ -9,6 +9,7 @@ import { FormsModule } from '@angular/forms'; import { createTranslateLoader } from 'src/app/app.module'; import { SpasBookingComponent } from './components/spas-booking/spas-booking.component'; import { SpasDataService } from 'src/modules/parking-module/services/spas-data.service'; +import { AngularFirestore } from '@angular/fire/firestore'; @NgModule({ declarations: [ @@ -20,18 +21,19 @@ import { SpasDataService } from 'src/modules/parking-module/services/spas-data.s FormsModule, SpasRouting, TranslateModule.forRoot({ - loader: { - provide: TranslateLoader, - useFactory: (createTranslateLoader), - deps: [HttpClient] - } + loader: { + provide: TranslateLoader, + useFactory: (createTranslateLoader), + deps: [HttpClient] + } }) ], exports: [ SpasComponent ], providers: [ - SpasDataService + SpasDataService, + AngularFirestore ], bootstrap: [SpasComponent] }) From 9b4c684a63042e5167a5da3cdab3f67b1855672b Mon Sep 17 00:00:00 2001 From: Mahadev Mandole Date: Sat, 15 Jun 2019 14:40:44 +0530 Subject: [PATCH 18/24] added static flow for ook slot --- .../location-list.component.html | 11 ++- .../location-list/location-list.component.ts | 10 +- .../location-slots.component.html | 97 ++++++++++++++++++- .../location-slots.component.scss | 87 +++++++++++++++++ .../search-location.component.html | 14 +-- .../search-location.component.scss | 6 ++ .../search-location.component.ts | 17 +++- .../parking-module/spas.component.html | 8 +- src/modules/parking-module/spas.routing.ts | 4 +- 9 files changed, 228 insertions(+), 26 deletions(-) diff --git a/src/modules/parking-module/components/location-list/location-list.component.html b/src/modules/parking-module/components/location-list/location-list.component.html index e191a4a..3d1ddab 100644 --- a/src/modules/parking-module/components/location-list/location-list.component.html +++ b/src/modules/parking-module/components/location-list/location-list.component.html @@ -8,11 +8,12 @@
Available Locations

- - - - + + + +
-
\ No newline at end of file diff --git a/src/modules/parking-module/components/location-list/location-list.component.ts b/src/modules/parking-module/components/location-list/location-list.component.ts index 15343f7..c58d43f 100644 --- a/src/modules/parking-module/components/location-list/location-list.component.ts +++ b/src/modules/parking-module/components/location-list/location-list.component.ts @@ -1,4 +1,5 @@ import { Component, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; @Component({ selector: 'app-location-list', @@ -7,9 +8,14 @@ import { Component, OnInit } from '@angular/core'; }) export class LocationListComponent implements OnInit { - constructor() { } - + constructor(private router: Router) { } + locationList = [{name:'Parking 1'},{name:'Parking 3'},{name:'Parking 4'}] ngOnInit() { } + viewLocationSlots(location){ + console.log(location); + this.router.navigate(['spas/user/location-slots']); + } + } diff --git a/src/modules/parking-module/components/location-slots/location-slots.component.html b/src/modules/parking-module/components/location-slots/location-slots.component.html index eded84f..f7e4dc9 100644 --- a/src/modules/parking-module/components/location-slots/location-slots.component.html +++ b/src/modules/parking-module/components/location-slots/location-slots.component.html @@ -1,3 +1,94 @@ -

- location-slots works! -

+
+
+
+ +
Select Parking Slot
+
+ +
+
 
+

Parked

+
+
+
 
+

Available

+
+
+
 
+

Selected

+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + +
+
+
+
+
+
+
+
+
+
+ +
+
\ No newline at end of file diff --git a/src/modules/parking-module/components/location-slots/location-slots.component.scss b/src/modules/parking-module/components/location-slots/location-slots.component.scss index e69de29..121c4cd 100644 --- a/src/modules/parking-module/components/location-slots/location-slots.component.scss +++ b/src/modules/parking-module/components/location-slots/location-slots.component.scss @@ -0,0 +1,87 @@ +@import "../../../../assets/scss/variable.scss"; +.select-slot-container { + background-color: $white; + height: 100vh; + .select-slot-header { + height: 80px; + margin-bottom: 15px !important; + .page-title { + width: 100%; + margin-bottom: 10px; + } + + img { + height: 50px; + width: 50px; + } + h5 { + color: #3f51b5; + display: inline-block; + vertical-align: -webkit-baseline-middle; + } + + .circle-blue { + border-radius: 15px; + height: 15px; + width: 15px; + background: $blue; + display: inline-block; + } + .circle-red { + border-radius: 15px; + height: 15px; + width: 15px; + background: $red; + display: inline-block; + } + .circle-green { + border-radius: 15px; + height: 15px; + width: 15px; + background: $green; + display: inline-block; + } + p { + display: inline-block; + vertical-align: middle; + padding-left: 10px; + } + } + .select-slot-body { + .parking-block { + background: dimgray; + padding: 30px; + .slot { + background: rgba(152, 214, 245, 0.73); + border: 1px dashed rgba(86, 61, 124, 0.2); + min-height: 50px; + transform: skew(0deg); + padding: 0; + div { + background: rgba(152, 214, 245, 0.73); + min-height: 50px; + width: 100%; + border: 2px dashed white; + border-left: 0; + border-right: 0; + border-top: 0; + box-sizing: border-box; + &:first-child { + border-top:2px dashed white; + } + } + } + } + .select-location-btn { + background-color: rgba(215, 40, 40, 0.7); + color: #fff; + font-weight: 500; + position: absolute; + margin: 30px auto; + right: 0; + left: 0; + width: fit-content; + margin-bottom: 30px; + } + } + } \ No newline at end of file diff --git a/src/modules/parking-module/components/search-location/search-location.component.html b/src/modules/parking-module/components/search-location/search-location.component.html index c380317..eba70fa 100644 --- a/src/modules/parking-module/components/search-location/search-location.component.html +++ b/src/modules/parking-module/components/search-location/search-location.component.html @@ -1,4 +1,4 @@ -
+
@@ -11,20 +11,20 @@
Enter Location
-
- +
-
\ No newline at end of file +
diff --git a/src/modules/parking-module/components/search-location/search-location.component.scss b/src/modules/parking-module/components/search-location/search-location.component.scss index d34eaa9..0354ade 100644 --- a/src/modules/parking-module/components/search-location/search-location.component.scss +++ b/src/modules/parking-module/components/search-location/search-location.component.scss @@ -74,4 +74,10 @@ margin-bottom: 30px; } } + } + + .form-control { + &.has-error { + border: 1px solid red; + } } \ No newline at end of file diff --git a/src/modules/parking-module/components/search-location/search-location.component.ts b/src/modules/parking-module/components/search-location/search-location.component.ts index 5261f71..2ef08a3 100644 --- a/src/modules/parking-module/components/search-location/search-location.component.ts +++ b/src/modules/parking-module/components/search-location/search-location.component.ts @@ -1,5 +1,6 @@ import { Component, OnInit } from '@angular/core'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { Router } from '@angular/router'; @Component({ selector: 'app-search-location', @@ -10,18 +11,28 @@ export class SearchLocationComponent implements OnInit { searchForm: FormGroup; - constructor( private formBuilder: FormBuilder) { } + isSubmitted = false; + + constructor( private formBuilder: FormBuilder, private router: Router ) { } ngOnInit() { this.searchForm = this.formBuilder.group({ location: ['', Validators.required], time: ['', Validators.required], - duration: ['', Validators.required] + endTime: ['', Validators.required] }); } + get formControls() { return this.searchForm.controls; } + searchLocation() { - + this.isSubmitted = true; + console.log(this.searchForm.value); + if(this.searchForm.invalid){ + return; + } + //this.parkingService.searchLocation(this.searchForm.value); + this.router.navigate(['spas/user/location-list']); } } diff --git a/src/modules/parking-module/spas.component.html b/src/modules/parking-module/spas.component.html index 4add93a..26b930d 100644 --- a/src/modules/parking-module/spas.component.html +++ b/src/modules/parking-module/spas.component.html @@ -8,10 +8,8 @@
- - + +
- -
- \ No newline at end of file + \ No newline at end of file diff --git a/src/modules/parking-module/spas.routing.ts b/src/modules/parking-module/spas.routing.ts index 13f572b..0d2579d 100644 --- a/src/modules/parking-module/spas.routing.ts +++ b/src/modules/parking-module/spas.routing.ts @@ -10,12 +10,14 @@ import { ModuleWithProviders } from '@angular/compiler/src/core'; */ import { SearchLocationComponent } from './components/search-location/search-location.component'; import { LocationListComponent } from './components/location-list/location-list.component'; +import { LocationSlotsComponent } from './components/location-slots/location-slots.component'; const routes: Routes = [ { path: '', component: SpasComponent }, { path: 'user/search-location', component: SearchLocationComponent }, { path: 'operator/search-location', component: SearchLocationComponent }, - { path: 'locations', component: LocationListComponent } + { path: 'user/location-list', component: LocationListComponent }, + { path: 'user/location-slots', component: LocationSlotsComponent } ]; export const SpasRouting: ModuleWithProviders = RouterModule.forChild(routes); \ No newline at end of file From f5028cb74a5f7c844bda915e2f3655abf2c0a734 Mon Sep 17 00:00:00 2001 From: Satish Date: Sat, 15 Jun 2019 15:14:41 +0530 Subject: [PATCH 19/24] CSS classes added for parking slot styles --- .../location-slots.component.html | 24 +++++++++---------- .../location-slots.component.scss | 13 ++++++++-- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/modules/parking-module/components/location-slots/location-slots.component.html b/src/modules/parking-module/components/location-slots/location-slots.component.html index f7e4dc9..b385059 100644 --- a/src/modules/parking-module/components/location-slots/location-slots.component.html +++ b/src/modules/parking-module/components/location-slots/location-slots.component.html @@ -10,22 +10,22 @@
Select Parking Slot

Parked

-
 
+
 

Available

-
 
+
 

Selected

+
-
-
+
@@ -50,14 +50,14 @@
Select Parking Slot
-
-
-
+
+
+
-
-
+
+
@@ -82,11 +82,11 @@
Select Parking Slot
+
+
-
-
-
+
diff --git a/src/modules/parking-module/components/location-slots/location-slots.component.scss b/src/modules/parking-module/components/location-slots/location-slots.component.scss index 121c4cd..a7ded4a 100644 --- a/src/modules/parking-module/components/location-slots/location-slots.component.scss +++ b/src/modules/parking-module/components/location-slots/location-slots.component.scss @@ -52,13 +52,13 @@ background: dimgray; padding: 30px; .slot { - background: rgba(152, 214, 245, 0.73); + background: $blue; border: 1px dashed rgba(86, 61, 124, 0.2); min-height: 50px; transform: skew(0deg); padding: 0; div { - background: rgba(152, 214, 245, 0.73); + background: $blue; min-height: 50px; width: 100%; border: 2px dashed white; @@ -71,6 +71,15 @@ } } } + .parked { + background: $red !important; + } + .available { + background: $blue !important; + } + .selected { + background: $green !important; + } } .select-location-btn { background-color: rgba(215, 40, 40, 0.7); From 01e76cd26864bfc831e1011db72b4ff094514fee Mon Sep 17 00:00:00 2001 From: omkarpadwale Date: Sat, 15 Jun 2019 15:15:09 +0530 Subject: [PATCH 20/24] added booking summary --- .../location-slots.component.html | 2 +- .../location-slots.component.ts | 7 ++- .../spas-booking-summary.component.html | 58 +++++++++++++++++++ .../spas-booking-summary.component.scss | 0 .../spas-booking-summary.component.spec.ts | 25 ++++++++ .../spas-booking-summary.component.ts | 15 +++++ .../spas-booking/spas-booking.component.ts | 8 ++- .../models/spas-booking-data.ts | 2 +- .../parking-module/spas.component.html | 2 +- src/modules/parking-module/spas.module.ts | 4 +- src/modules/parking-module/spas.routing.ts | 6 +- 11 files changed, 121 insertions(+), 8 deletions(-) create mode 100644 src/modules/parking-module/components/spas-booking-summary/spas-booking-summary.component.html create mode 100644 src/modules/parking-module/components/spas-booking-summary/spas-booking-summary.component.scss create mode 100644 src/modules/parking-module/components/spas-booking-summary/spas-booking-summary.component.spec.ts create mode 100644 src/modules/parking-module/components/spas-booking-summary/spas-booking-summary.component.ts diff --git a/src/modules/parking-module/components/location-slots/location-slots.component.html b/src/modules/parking-module/components/location-slots/location-slots.component.html index f7e4dc9..d6a704f 100644 --- a/src/modules/parking-module/components/location-slots/location-slots.component.html +++ b/src/modules/parking-module/components/location-slots/location-slots.component.html @@ -89,6 +89,6 @@
Select Parking Slot
- + \ No newline at end of file diff --git a/src/modules/parking-module/components/location-slots/location-slots.component.ts b/src/modules/parking-module/components/location-slots/location-slots.component.ts index f0df7e8..db5ddcf 100644 --- a/src/modules/parking-module/components/location-slots/location-slots.component.ts +++ b/src/modules/parking-module/components/location-slots/location-slots.component.ts @@ -1,4 +1,5 @@ import { Component, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; @Component({ selector: 'app-location-slots', @@ -7,9 +8,13 @@ import { Component, OnInit } from '@angular/core'; }) export class LocationSlotsComponent implements OnInit { - constructor() { } + constructor(private router: Router) { } ngOnInit() { } + onSlotConfirmation() { + this.router.navigate(['spas/slotConfirmation']); + } + } diff --git a/src/modules/parking-module/components/spas-booking-summary/spas-booking-summary.component.html b/src/modules/parking-module/components/spas-booking-summary/spas-booking-summary.component.html new file mode 100644 index 0000000..b4530fa --- /dev/null +++ b/src/modules/parking-module/components/spas-booking-summary/spas-booking-summary.component.html @@ -0,0 +1,58 @@ +

Confirmation Summary

+
+ +
+
+
+ User Name: +
+
+ username +
+
+ +
+
+ Slot details: +
+
+ username +
+
+ +
+
+ Vehicle Number: +
+
+ username +
+
+ +
+
+ In Time: +
+
+ username +
+
+ +
+
+ Out Time: +
+
+ username +
+
+ +
+
+ Booking Status: +
+
+ username +
+
+
\ No newline at end of file diff --git a/src/modules/parking-module/components/spas-booking-summary/spas-booking-summary.component.scss b/src/modules/parking-module/components/spas-booking-summary/spas-booking-summary.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/modules/parking-module/components/spas-booking-summary/spas-booking-summary.component.spec.ts b/src/modules/parking-module/components/spas-booking-summary/spas-booking-summary.component.spec.ts new file mode 100644 index 0000000..b5f55f9 --- /dev/null +++ b/src/modules/parking-module/components/spas-booking-summary/spas-booking-summary.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SpasBookingSummaryComponent } from './spas-booking-summary.component'; + +describe('SpasBookingSummaryComponent', () => { + let component: SpasBookingSummaryComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ SpasBookingSummaryComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(SpasBookingSummaryComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/modules/parking-module/components/spas-booking-summary/spas-booking-summary.component.ts b/src/modules/parking-module/components/spas-booking-summary/spas-booking-summary.component.ts new file mode 100644 index 0000000..cf63f93 --- /dev/null +++ b/src/modules/parking-module/components/spas-booking-summary/spas-booking-summary.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'spas-booking-summary', + templateUrl: './spas-booking-summary.component.html', + styleUrls: ['./spas-booking-summary.component.scss'] +}) +export class SpasBookingSummaryComponent implements OnInit { + + constructor() { } + + ngOnInit() { + } + +} diff --git a/src/modules/parking-module/components/spas-booking/spas-booking.component.ts b/src/modules/parking-module/components/spas-booking/spas-booking.component.ts index ca04ad1..cba3945 100644 --- a/src/modules/parking-module/components/spas-booking/spas-booking.component.ts +++ b/src/modules/parking-module/components/spas-booking/spas-booking.component.ts @@ -1,6 +1,7 @@ import { Component, OnInit } from '@angular/core'; -import { BookingData } from 'src/modules/parking-module/models/spas-booking-data'; import { SpasDataService } from 'src/modules/parking-module/services/spas-data.service'; +import { Router } from '@angular/router'; +import { BookingData } from 'src/modules/parking-module/models/spas-booking-data'; @Component({ selector: 'spas-booking', @@ -12,7 +13,8 @@ export class SpasBookingComponent implements OnInit { bookingData: BookingData; constructor( - private spasDataService: SpasDataService + private spasDataService: SpasDataService, + private router: Router ) { // should be input - user selection @@ -51,5 +53,7 @@ export class SpasBookingComponent implements OnInit { vehicleNo: this.bookingData.vehicleNo } this.spasDataService.storeCurrentBookingData(this.bookingData); + + this.router.navigate(['spas/bookingConfirmation']); } } diff --git a/src/modules/parking-module/models/spas-booking-data.ts b/src/modules/parking-module/models/spas-booking-data.ts index a0fcaa8..16a7c18 100644 --- a/src/modules/parking-module/models/spas-booking-data.ts +++ b/src/modules/parking-module/models/spas-booking-data.ts @@ -18,7 +18,7 @@ export class BookingData { status?: string; slotNumber?: string; - constructor(data?: BookingData) { + constructor(data?: any) { this.area = data.area ? data.area : ''; this.parkingName = data.parkingName ? data.parkingName : ''; this.username = data.username ? data.username : ''; diff --git a/src/modules/parking-module/spas.component.html b/src/modules/parking-module/spas.component.html index 26b930d..06aaff0 100644 --- a/src/modules/parking-module/spas.component.html +++ b/src/modules/parking-module/spas.component.html @@ -12,4 +12,4 @@ - \ No newline at end of file + diff --git a/src/modules/parking-module/spas.module.ts b/src/modules/parking-module/spas.module.ts index 8ed77cf..0ee8f96 100644 --- a/src/modules/parking-module/spas.module.ts +++ b/src/modules/parking-module/spas.module.ts @@ -20,6 +20,7 @@ import { LocationListComponent } from './components/location-list/location-list. import { LocationSlotsComponent } from './components/location-slots/location-slots.component'; import { SpasDataService } from 'src/modules/parking-module/services/spas-data.service'; import { AngularFirestore } from '@angular/fire/firestore'; +import { SpasBookingSummaryComponent } from './components/spas-booking-summary/spas-booking-summary.component'; @NgModule({ declarations: [ @@ -27,7 +28,8 @@ import { AngularFirestore } from '@angular/fire/firestore'; SpasBookingComponent, SearchLocationComponent, LocationListComponent, - LocationSlotsComponent + LocationSlotsComponent, + SpasBookingSummaryComponent ], imports: [ CommonModule, diff --git a/src/modules/parking-module/spas.routing.ts b/src/modules/parking-module/spas.routing.ts index 0d2579d..0928f09 100644 --- a/src/modules/parking-module/spas.routing.ts +++ b/src/modules/parking-module/spas.routing.ts @@ -4,6 +4,8 @@ import { Routes, RouterModule } from "@angular/router"; import { SpasComponent } from './spas.component'; import { ModuleWithProviders } from '@angular/compiler/src/core'; +import { SpasBookingComponent } from 'src/modules/parking-module/components/spas-booking/spas-booking.component'; +import { SpasBookingSummaryComponent } from 'src/modules/parking-module/components/spas-booking-summary/spas-booking-summary.component'; /** * Module Imports @@ -17,7 +19,9 @@ const routes: Routes = [ { path: 'user/search-location', component: SearchLocationComponent }, { path: 'operator/search-location', component: SearchLocationComponent }, { path: 'user/location-list', component: LocationListComponent }, - { path: 'user/location-slots', component: LocationSlotsComponent } + { path: 'user/location-slots', component: LocationSlotsComponent }, + { path: 'bookingConfirmation', component: SpasBookingSummaryComponent }, + { path: 'slotConfirmation', component: SpasBookingComponent } ]; export const SpasRouting: ModuleWithProviders = RouterModule.forChild(routes); \ No newline at end of file From 343ba6159571eb1a15fba6c24b13d6a9df05d211 Mon Sep 17 00:00:00 2001 From: Sayali Bhutkar Date: Sat, 15 Jun 2019 15:23:14 +0530 Subject: [PATCH 21/24] Input type changed for duration --- .../components/search-location/search-location.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/parking-module/components/search-location/search-location.component.html b/src/modules/parking-module/components/search-location/search-location.component.html index eba70fa..191397f 100644 --- a/src/modules/parking-module/components/search-location/search-location.component.html +++ b/src/modules/parking-module/components/search-location/search-location.component.html @@ -21,7 +21,7 @@
Enter Location
From 84d042662547739e545b068031e9728f2c555172 Mon Sep 17 00:00:00 2001 From: Sayali Bhutkar Date: Sat, 15 Jun 2019 15:56:48 +0530 Subject: [PATCH 22/24] Adding booking details screen --- src/assets/scss/_variable.scss | 15 +-- .../location-list.component.scss | 75 +++++++------- .../location-slots.component.scss | 9 +- .../spas-booking/spas-booking.component.html | 98 ++++++++++--------- .../spas-booking/spas-booking.component.scss | 40 ++++++++ .../services/parking.service.ts | 1 + src/styles.scss | 6 +- 7 files changed, 150 insertions(+), 94 deletions(-) diff --git a/src/assets/scss/_variable.scss b/src/assets/scss/_variable.scss index 6f0ca0a..b02d437 100644 --- a/src/assets/scss/_variable.scss +++ b/src/assets/scss/_variable.scss @@ -1,9 +1,10 @@ -$light-green: #C2E77B; -$blue: #0088FF; -$grey: #E6ECEC; -$dark-green: #00D800; -$green: #0AD90C; -$yellow: #FFBA00; +$light-green: #c2e77b; +$blue: #0088ff; +$blue-0: rgb(152, 214, 245); +$grey: #e6ecec; +$dark-green: #00d800; +$green: #0ad90c; +$yellow: #ffba00; $white: #ffffff; $black: #000000; -$red: #FF0B0B; +$red: #ff0b0b; diff --git a/src/modules/parking-module/components/location-list/location-list.component.scss b/src/modules/parking-module/components/location-list/location-list.component.scss index 52e6eb9..0164cef 100644 --- a/src/modules/parking-module/components/location-list/location-list.component.scss +++ b/src/modules/parking-module/components/location-list/location-list.component.scss @@ -1,41 +1,42 @@ +@import "../../../../assets/scss/variable.scss"; .available-locations-container { - background-color: #ffc306; - height: 100vh; - .available-locations-header { - height: 40px; - img { - height: 50px; - width: 50px; - } - h5 { - color: #3f51b5; - display: inline-block; - vertical-align: -webkit-baseline-middle; - } + background-color: #ffc306; + height: 100vh; + .available-locations-header { + height: 40px; + img { + height: 50px; + width: 50px; } - .available-locations-body { - .btn-grp { - font-size: 24px; - button { - height: 100px; - width: 100px; - flex: 0 0 44%; - max-width: 44%; - margin: 3%; - background: rgba(255, 255, 255, 0.7); - } - } - - .select-location-btn { - background-color: #3f51b5; - color: #fff; - font-weight: 500; - position: absolute; - margin: 0 auto; - right: 0; - left: 0; - width: fit-content; - margin-bottom: 30px; + h5 { + color: #3f51b5; + display: inline-block; + vertical-align: -webkit-baseline-middle; + } + } + .available-locations-body { + .btn-grp { + font-size: 24px; + button { + height: 100px; + width: 100px; + flex: 0 0 44%; + max-width: 44%; + margin: 3%; + background: rgba(255, 255, 255, 0.7); } } - } \ No newline at end of file + + .select-location-btn { + background-color: #3f51b5; + color: #fff; + font-weight: 500; + position: absolute; + margin: 0 auto; + right: 0; + left: 0; + width: fit-content; + margin-bottom: 30px; + } + } +} diff --git a/src/modules/parking-module/components/location-slots/location-slots.component.scss b/src/modules/parking-module/components/location-slots/location-slots.component.scss index a7ded4a..d9bb88b 100644 --- a/src/modules/parking-module/components/location-slots/location-slots.component.scss +++ b/src/modules/parking-module/components/location-slots/location-slots.component.scss @@ -24,7 +24,7 @@ border-radius: 15px; height: 15px; width: 15px; - background: $blue; + background: $blue-0; display: inline-block; } .circle-red { @@ -52,13 +52,14 @@ background: dimgray; padding: 30px; .slot { - background: $blue; + background: $blue-0; + filter: alpha(opacity=50); border: 1px dashed rgba(86, 61, 124, 0.2); min-height: 50px; transform: skew(0deg); padding: 0; div { - background: $blue; + background: $blue-0; min-height: 50px; width: 100%; border: 2px dashed white; @@ -75,7 +76,7 @@ background: $red !important; } .available { - background: $blue !important; + background: $blue-0 !important; } .selected { background: $green !important; diff --git a/src/modules/parking-module/components/spas-booking/spas-booking.component.html b/src/modules/parking-module/components/spas-booking/spas-booking.component.html index 1286725..616db2c 100644 --- a/src/modules/parking-module/components/spas-booking/spas-booking.component.html +++ b/src/modules/parking-module/components/spas-booking/spas-booking.component.html @@ -1,50 +1,58 @@ - -

Enter Booking Details

-
-
-
NearBy Area:
- -
-
-
Parking Location:
- -
-
-
user name:
- -
-
-
contact number:
- -
-
-
vehicle number:
- -
-
-
Start Time:
- -
-
-
End Time:
- -
-
-
Slot Booked:
- -
-
-
Charged Amount:
- +
+
+
+ +
Check In Details
+
- -
-
- +
+
+
+
+

User Details

+
+ + +
+
+ + +
+
+ + +
+
-
- +
+
+
+

Parking Details

+
+ + Gold Adlabs, Kalyani Nagar +
+
+ + 11.30 AM +
+
+ + 1:30 PM +
+
+ + C3 +
+
+ + +
+
+
-
\ No newline at end of file diff --git a/src/modules/parking-module/components/spas-booking/spas-booking.component.scss b/src/modules/parking-module/components/spas-booking/spas-booking.component.scss index e69de29..33aea84 100644 --- a/src/modules/parking-module/components/spas-booking/spas-booking.component.scss +++ b/src/modules/parking-module/components/spas-booking/spas-booking.component.scss @@ -0,0 +1,40 @@ +@import "../../../../assets/scss/variable.scss"; +.checkin-container { + background-color: #ffc306; + height: 100vh; + .checkin-header { + height: 40px; + img { + height: 50px; + width: 50px; + } + h5 { + color: #3f51b5; + display: inline-block; + vertical-align: -webkit-baseline-middle; + } + } + .checkin-body { + hr { + border: 1px dotted white; + } + + .proceed-btn { + background-color: #3f51b5; + color: #fff; + font-weight: 500; + position: absolute; + margin: 30px auto; + right: 0; + left: 0; + width: fit-content; + margin-bottom: 30px; + } + } + label { + font-weight: 500; + } + span { + padding: 10px; + } +} diff --git a/src/modules/parking-module/services/parking.service.ts b/src/modules/parking-module/services/parking.service.ts index 0651687..d5156a1 100644 --- a/src/modules/parking-module/services/parking.service.ts +++ b/src/modules/parking-module/services/parking.service.ts @@ -1,5 +1,6 @@ import { Injectable } from '@angular/core'; import { AngularFirestore } from '@angular/fire/firestore'; +import { BookingDetails } from '../models/spas-booking-data'; @Injectable({ providedIn: 'root' diff --git a/src/styles.scss b/src/styles.scss index 7d46735..9b16e06 100644 --- a/src/styles.scss +++ b/src/styles.scss @@ -1,2 +1,6 @@ /* You can add global styles to this file, and also import other style files */ -@import '../node_modules/bootstrap/dist/css/bootstrap.min.css'; \ No newline at end of file +@import '../node_modules/bootstrap/dist/css/bootstrap.min.css'; + +body { + background-color: #ffc306; +} \ No newline at end of file From 28a5831cc2482d15d07da919a264cca1b1893b1b Mon Sep 17 00:00:00 2001 From: omkarpadwale Date: Sat, 15 Jun 2019 15:56:48 +0530 Subject: [PATCH 23/24] added bindings and returned data to summary component --- .../spas-booking-summary.component.html | 12 ++++++------ .../spas-booking-summary.component.ts | 9 ++++++++- .../spas-booking/spas-booking.component.html | 2 +- .../parking-module/services/parking.service.ts | 1 + .../parking-module/services/spas-data.service.ts | 8 ++++++++ 5 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/modules/parking-module/components/spas-booking-summary/spas-booking-summary.component.html b/src/modules/parking-module/components/spas-booking-summary/spas-booking-summary.component.html index b4530fa..5a607d3 100644 --- a/src/modules/parking-module/components/spas-booking-summary/spas-booking-summary.component.html +++ b/src/modules/parking-module/components/spas-booking-summary/spas-booking-summary.component.html @@ -7,7 +7,7 @@

Confirmation Summary

User Name:
- username + {{bookingSummary.username}}
@@ -16,7 +16,7 @@

Confirmation Summary

Slot details:
- username + {{bookingSummary.slotNumber}}
@@ -25,7 +25,7 @@

Confirmation Summary

Vehicle Number:
- username + {{bookingSummary.vehicleNo}}
@@ -34,7 +34,7 @@

Confirmation Summary

In Time:
- username + {{bookingSummary.startTime}}
@@ -43,7 +43,7 @@

Confirmation Summary

Out Time:
- username + {{bookingSummary.endTime}}
@@ -52,7 +52,7 @@

Confirmation Summary

Booking Status:
- username + {{bookingSummary.status}}
\ No newline at end of file diff --git a/src/modules/parking-module/components/spas-booking-summary/spas-booking-summary.component.ts b/src/modules/parking-module/components/spas-booking-summary/spas-booking-summary.component.ts index cf63f93..94ff904 100644 --- a/src/modules/parking-module/components/spas-booking-summary/spas-booking-summary.component.ts +++ b/src/modules/parking-module/components/spas-booking-summary/spas-booking-summary.component.ts @@ -1,4 +1,5 @@ import { Component, OnInit } from '@angular/core'; +import { SpasDataService } from 'src/modules/parking-module/services/spas-data.service'; @Component({ selector: 'spas-booking-summary', @@ -7,9 +8,15 @@ import { Component, OnInit } from '@angular/core'; }) export class SpasBookingSummaryComponent implements OnInit { - constructor() { } + bookingSummary: any; + + constructor(private spasDataService: SpasDataService) { + this.bookingSummary = spasDataService.getBookingData(); + this.bookingSummary.status = 'Booked'; + } ngOnInit() { + } } diff --git a/src/modules/parking-module/components/spas-booking/spas-booking.component.html b/src/modules/parking-module/components/spas-booking/spas-booking.component.html index 1286725..112922f 100644 --- a/src/modules/parking-module/components/spas-booking/spas-booking.component.html +++ b/src/modules/parking-module/components/spas-booking/spas-booking.component.html @@ -19,7 +19,7 @@

Enter Booking Details

vehicle number:
- +
Start Time:
diff --git a/src/modules/parking-module/services/parking.service.ts b/src/modules/parking-module/services/parking.service.ts index 0651687..aad8777 100644 --- a/src/modules/parking-module/services/parking.service.ts +++ b/src/modules/parking-module/services/parking.service.ts @@ -1,5 +1,6 @@ import { Injectable } from '@angular/core'; import { AngularFirestore } from '@angular/fire/firestore'; +import { BookingDetails } from 'src/modules/parking-module/models/spas-booking-data'; @Injectable({ providedIn: 'root' diff --git a/src/modules/parking-module/services/spas-data.service.ts b/src/modules/parking-module/services/spas-data.service.ts index f4afb52..2d3e2d3 100644 --- a/src/modules/parking-module/services/spas-data.service.ts +++ b/src/modules/parking-module/services/spas-data.service.ts @@ -16,4 +16,12 @@ export class SpasDataService { storeCurrentBookingData(bookingData: BookingData) { this.bookingDetails = bookingData; } + + /** + * Returns lastly booked details of user + * @memberOf SpasDataService + */ + getBookingData() { + return this.bookingDetails; + } } \ No newline at end of file From 18900f7f4ae0c7fb8c0ac2165ad46864c164d369 Mon Sep 17 00:00:00 2001 From: Sayali Bhutkar Date: Sat, 15 Jun 2019 16:58:37 +0530 Subject: [PATCH 24/24] final changes --- src/assets/scss/_variable.scss | 2 +- .../location-list.component.scss | 3 +- .../location-slots.component.scss | 4 +- .../search-location.component.scss | 3 +- .../spas-booking-summary.component.html | 95 +++++++++---------- .../spas-booking-summary.component.scss | 49 ++++++++++ .../spas-booking-summary.component.ts | 5 + .../spas-booking/spas-booking.component.html | 22 ++--- .../spas-booking/spas-booking.component.scss | 3 +- .../services/spas-data.service.ts | 1 + 10 files changed, 121 insertions(+), 66 deletions(-) diff --git a/src/assets/scss/_variable.scss b/src/assets/scss/_variable.scss index b02d437..258f18c 100644 --- a/src/assets/scss/_variable.scss +++ b/src/assets/scss/_variable.scss @@ -1,4 +1,4 @@ -$light-green: #c2e77b; +$light-green: #baf055; $blue: #0088ff; $blue-0: rgb(152, 214, 245); $grey: #e6ecec; diff --git a/src/modules/parking-module/components/location-list/location-list.component.scss b/src/modules/parking-module/components/location-list/location-list.component.scss index 0164cef..b613052 100644 --- a/src/modules/parking-module/components/location-list/location-list.component.scss +++ b/src/modules/parking-module/components/location-list/location-list.component.scss @@ -3,7 +3,8 @@ background-color: #ffc306; height: 100vh; .available-locations-header { - height: 40px; + height: 50px; + padding-top: 10px; img { height: 50px; width: 50px; diff --git a/src/modules/parking-module/components/location-slots/location-slots.component.scss b/src/modules/parking-module/components/location-slots/location-slots.component.scss index d9bb88b..bf88149 100644 --- a/src/modules/parking-module/components/location-slots/location-slots.component.scss +++ b/src/modules/parking-module/components/location-slots/location-slots.component.scss @@ -3,7 +3,8 @@ background-color: $white; height: 100vh; .select-slot-header { - height: 80px; + height: 90px; + padding-top: 10px; margin-bottom: 15px !important; .page-title { width: 100%; @@ -74,6 +75,7 @@ } .parked { background: $red !important; + // background: url("../../../../assets/img/imgpsh_fullsize_anim (1).png") 50% 50% no-repeat; } .available { background: $blue-0 !important; diff --git a/src/modules/parking-module/components/search-location/search-location.component.scss b/src/modules/parking-module/components/search-location/search-location.component.scss index 0354ade..dd72300 100644 --- a/src/modules/parking-module/components/search-location/search-location.component.scss +++ b/src/modules/parking-module/components/search-location/search-location.component.scss @@ -4,7 +4,8 @@ background-color: #ffc306; height: 100vh; .where-to-header { - height: 40px; + height: 50px; + padding-top: 10px; .my-bookings-btn { background-color: rgba(215, 40, 40, 0.7); background: rgba(215, 40, 40, 0.7); diff --git a/src/modules/parking-module/components/spas-booking-summary/spas-booking-summary.component.html b/src/modules/parking-module/components/spas-booking-summary/spas-booking-summary.component.html index 5a607d3..fc88f4a 100644 --- a/src/modules/parking-module/components/spas-booking-summary/spas-booking-summary.component.html +++ b/src/modules/parking-module/components/spas-booking-summary/spas-booking-summary.component.html @@ -1,58 +1,53 @@ -

Confirmation Summary

-
- -
-
-
- User Name: -
-
- {{bookingSummary.username}} +
+
+
+ +
Parking Receipt
+
+
+
+
+

Parking Details

+
+ + {{bookingSummary.username}} +
+
+ + {{bookingSummary.vehicleNo}} +
+
+
+ + {{bookingSummary.slotNumber}} +
+ + {{bookingSummary.startTime}} +
+
+ + {{bookingSummary.endTime}} +
+
+ + {{bookingSummary.status}} +
+
-
-
- Slot details: -
-
- {{bookingSummary.slotNumber}} -
-
+ -
-
- Vehicle Number: -
-
- {{bookingSummary.vehicleNo}} -
-
+
+
+

No Pending Dues

+
Thanks.. Visit Again
+
+
+
-
-
- In Time: -
-
- {{bookingSummary.startTime}} -
-
- -
-
- Out Time: -
-
- {{bookingSummary.endTime}} -
-
- -
-
- Booking Status: -
-
- {{bookingSummary.status}}
+
\ No newline at end of file diff --git a/src/modules/parking-module/components/spas-booking-summary/spas-booking-summary.component.scss b/src/modules/parking-module/components/spas-booking-summary/spas-booking-summary.component.scss index e69de29..a9303bb 100644 --- a/src/modules/parking-module/components/spas-booking-summary/spas-booking-summary.component.scss +++ b/src/modules/parking-module/components/spas-booking-summary/spas-booking-summary.component.scss @@ -0,0 +1,49 @@ +@import "../../../../assets/scss/variable.scss"; +.receipt-container { + background-color: #ffc306; + height: 100vh; + .receipt-header { + height: 50px; + padding-top: 10px; + img { + height: 50px; + width: 50px; + } + h5 { + color: #3f51b5; + display: inline-block; + vertical-align: -webkit-baseline-middle; + } + } + .receipt-body { + hr { + border: 1px dotted white; + } + + .proceed-btn { + background-color: #3f51b5; + color: #fff; + font-weight: 500; + position: absolute; + margin: 30px auto; + right: 0; + left: 0; + width: fit-content; + margin-bottom: 30px; + } + .checkout-btn { + background-color: $light-green; + color: #fff; + font-weight: 500; + margin: 0px 0 30px 0; + width: fit-content; + margin-bottom: 30px; + } + } + label { + font-weight: 500; + } + span { + padding: 10px; + } +} diff --git a/src/modules/parking-module/components/spas-booking-summary/spas-booking-summary.component.ts b/src/modules/parking-module/components/spas-booking-summary/spas-booking-summary.component.ts index 94ff904..aff6b69 100644 --- a/src/modules/parking-module/components/spas-booking-summary/spas-booking-summary.component.ts +++ b/src/modules/parking-module/components/spas-booking-summary/spas-booking-summary.component.ts @@ -9,6 +9,7 @@ import { SpasDataService } from 'src/modules/parking-module/services/spas-data.s export class SpasBookingSummaryComponent implements OnInit { bookingSummary: any; + checkoutFlag = false; constructor(private spasDataService: SpasDataService) { this.bookingSummary = spasDataService.getBookingData(); @@ -19,4 +20,8 @@ export class SpasBookingSummaryComponent implements OnInit { } + confirmCheckout() { + this.checkoutFlag = true; + } + } diff --git a/src/modules/parking-module/components/spas-booking/spas-booking.component.html b/src/modules/parking-module/components/spas-booking/spas-booking.component.html index 616db2c..02602ca 100644 --- a/src/modules/parking-module/components/spas-booking/spas-booking.component.html +++ b/src/modules/parking-module/components/spas-booking/spas-booking.component.html @@ -11,18 +11,18 @@
Check In Details

User Details

- - Name +
- +
-
@@ -33,23 +33,23 @@

User Details

Parking Details

- Gold Adlabs, Kalyani Nagar + {{bookingData.parkingName}}
- 11.30 AM + {{bookingData.startTime}}
- 1:30 PM + {{bookingData.endTime}}
- C3 + {{bookingData.slotNumber}}
- - + Rs. 80 +
diff --git a/src/modules/parking-module/components/spas-booking/spas-booking.component.scss b/src/modules/parking-module/components/spas-booking/spas-booking.component.scss index 33aea84..494f7f3 100644 --- a/src/modules/parking-module/components/spas-booking/spas-booking.component.scss +++ b/src/modules/parking-module/components/spas-booking/spas-booking.component.scss @@ -3,7 +3,8 @@ background-color: #ffc306; height: 100vh; .checkin-header { - height: 40px; + height: 50px; + padding-top: 10px; img { height: 50px; width: 50px; diff --git a/src/modules/parking-module/services/spas-data.service.ts b/src/modules/parking-module/services/spas-data.service.ts index 2d3e2d3..901b200 100644 --- a/src/modules/parking-module/services/spas-data.service.ts +++ b/src/modules/parking-module/services/spas-data.service.ts @@ -15,6 +15,7 @@ export class SpasDataService { */ storeCurrentBookingData(bookingData: BookingData) { this.bookingDetails = bookingData; + console.log(this.bookingDetails); } /**