Commit 81445e88 by amalk

initial push

parents
# EditorConfig helps developers define and maintain consistent coding styles between different editors and IDEs
# editorconfig.org
root = true
[*]
indent_style = space
indent_size = 2
# We recommend you to keep these unchanged
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.md]
trim_trailing_whitespace = false
\ No newline at end of file
# Specifies intentionally untracked files to ignore when using Git
# http://git-scm.com/docs/gitignore
*~
*.sw[mnpcod]
*.log
*.tmp
*.tmp.*
log.txt
*.sublime-project
*.sublime-workspace
.vscode/
npm-debug.log*
.idea/
.ionic/
.sourcemaps/
.sass-cache/
.tmp/
.versions/
coverage/
dist/
node_modules/
tmp/
temp/
platforms/
plugins/
plugins/android.json
plugins/ios.json
www/
$RECYCLE.BIN/
.DS_Store
Thumbs.db
UserInterfaceState.xcuserstate
<?xml version='1.0' encoding='utf-8'?>
<widget id="com.mogobus.com" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>Mogo Bus</name>
<description>Online Bus Ticket Booking and Reservation System</description>
<author email="[email protected]" href="https://techware.co.in/">Techware Team</author>
<content src="index.html" />
<access origin="*" />
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />
<preference name="ScrollEnabled" value="false" />
<preference name="android-minSdkVersion" value="19" />
<preference name="BackupWebStorage" value="none" />
<preference name="SplashMaintainAspectRatio" value="true" />
<preference name="FadeSplashScreenDuration" value="300" />
<preference name="SplashShowOnlyFirstTime" value="false" />
<preference name="SplashScreen" value="screen" />
<preference name="SplashScreenDelay" value="7000" />
<platform name="android">
<allow-intent href="market:*" />
<icon density="ldpi" src="resources\android\icon\drawable-ldpi-icon.png" />
<icon density="mdpi" src="resources\android\icon\drawable-mdpi-icon.png" />
<icon density="hdpi" src="resources\android\icon\drawable-hdpi-icon.png" />
<icon density="xhdpi" src="resources\android\icon\drawable-xhdpi-icon.png" />
<icon density="xxhdpi" src="resources\android\icon\drawable-xxhdpi-icon.png" />
<icon density="xxxhdpi" src="resources\android\icon\drawable-xxxhdpi-icon.png" />
<splash density="land-ldpi" src="resources\android\splash\drawable-land-ldpi-screen.png" />
<splash density="land-mdpi" src="resources\android\splash\drawable-land-mdpi-screen.png" />
<splash density="land-hdpi" src="resources\android\splash\drawable-land-hdpi-screen.png" />
<splash density="land-xhdpi" src="resources\android\splash\drawable-land-xhdpi-screen.png" />
<splash density="land-xxhdpi" src="resources\android\splash\drawable-land-xxhdpi-screen.png" />
<splash density="land-xxxhdpi" src="resources\android\splash\drawable-land-xxxhdpi-screen.png" />
<splash density="port-ldpi" src="resources\android\splash\drawable-port-ldpi-screen.png" />
<splash density="port-mdpi" src="resources\android\splash\drawable-port-mdpi-screen.png" />
<splash density="port-hdpi" src="resources\android\splash\drawable-port-hdpi-screen.png" />
<splash density="port-xhdpi" src="resources\android\splash\drawable-port-xhdpi-screen.png" />
<splash density="port-xxhdpi" src="resources\android\splash\drawable-port-xxhdpi-screen.png" />
<splash density="port-xxxhdpi" src="resources\android\splash\drawable-port-xxxhdpi-screen.png" />
<hook src="hooks/copy_android_notification_icons.js" type="after_prepare" />
</platform>
<plugin name="cordova-plugin-whitelist" spec="^1.3.3" />
<plugin name="cordova-plugin-device" spec="^2.0.2" />
<plugin name="cordova-plugin-splashscreen" spec="^5.0.2" />
<plugin name="cordova-plugin-ionic-webview" spec="^2.4.1">
<variable name="ANDROID_SUPPORT_ANNOTATIONS_VERSION" value="27.+" />
</plugin>
<plugin name="cordova-plugin-ionic-keyboard" spec="^2.1.3" />
<plugin name="cordova-plugin-network-information" spec="^2.0.1" />
<plugin name="cordova-plugin-x-toast" spec="^2.7.2" />
<plugin name="com.razorpay.cordova" spec="https://github.com/razorpay/razorpay-cordova.git" />
<plugin name="cordova-plugin-inappbrowser" spec="^3.0.0" />
<plugin name="onesignal-cordova-plugin" spec="^2.4.7" />
<engine name="android" spec="6.3.0" />
<platform name="ios">
<icon height="57" src="resources\ios\icon\icon.png" width="57" />
<icon height="114" src="resources\ios\icon\[email protected]" width="114" />
<icon height="40" src="resources\ios\icon\icon-40.png" width="40" />
<icon height="80" src="resources\ios\icon\[email protected]" width="80" />
<icon height="120" src="resources\ios\icon\[email protected]" width="120" />
<icon height="50" src="resources\ios\icon\icon-50.png" width="50" />
<icon height="100" src="resources\ios\icon\[email protected]" width="100" />
<icon height="60" src="resources\ios\icon\icon-60.png" width="60" />
<icon height="120" src="resources\ios\icon\[email protected]" width="120" />
<icon height="180" src="resources\ios\icon\[email protected]" width="180" />
<icon height="72" src="resources\ios\icon\icon-72.png" width="72" />
<icon height="144" src="resources\ios\icon\[email protected]" width="144" />
<icon height="76" src="resources\ios\icon\icon-76.png" width="76" />
<icon height="152" src="resources\ios\icon\[email protected]" width="152" />
<icon height="167" src="resources\ios\icon\[email protected]" width="167" />
<icon height="29" src="resources\ios\icon\icon-small.png" width="29" />
<icon height="58" src="resources\ios\icon\[email protected]" width="58" />
<icon height="87" src="resources\ios\icon\[email protected]" width="87" />
<icon height="1024" src="resources\ios\icon\icon-1024.png" width="1024" />
<splash height="1136" src="resources\ios\splash\Default-568h@2x~iphone.png" width="640" />
<splash height="1334" src="resources\ios\splash\Default-667h.png" width="750" />
<splash height="2208" src="resources\ios\splash\Default-736h.png" width="1242" />
<splash height="1242" src="resources\ios\splash\Default-Landscape-736h.png" width="2208" />
<splash height="1536" src="resources\ios\splash\Default-Landscape@2x~ipad.png" width="2048" />
<splash height="2048" src="resources\ios\splash\Default-Landscape@~ipadpro.png" width="2732" />
<splash height="768" src="resources\ios\splash\Default-Landscape~ipad.png" width="1024" />
<splash height="2048" src="resources\ios\splash\Default-Portrait@2x~ipad.png" width="1536" />
<splash height="2732" src="resources\ios\splash\Default-Portrait@~ipadpro.png" width="2048" />
<splash height="1024" src="resources\ios\splash\Default-Portrait~ipad.png" width="768" />
<splash height="960" src="resources\ios\splash\Default@2x~iphone.png" width="640" />
<splash height="480" src="resources\ios\splash\Default~iphone.png" width="320" />
<splash height="2732" src="resources\ios\splash\Default@2x~universal~anyany.png" width="2732" />
</platform>
</widget>
var fs = require('fs');
var path = require('path');
var filestocopy = [{
"resources/android/icon/drawable-hdpi-icon.png":
"platforms/android/res/drawable-hdpi/ic_stat_onesignal_default.png"
}, {
"resources/android/icon/drawable-mdpi-icon.png":
"platforms/android/res/drawable-mdpi/ic_stat_onesignal_default.png"
}, {
"resources/android/icon/drawable-xhdpi-icon.png":
"platforms/android/res/drawable-xhdpi/ic_stat_onesignal_default.png"
}, {
"resources/android/icon/drawable-xxhdpi-icon.png":
"platforms/android/res/drawable-xxhdpi/ic_stat_onesignal_default.png"
}, {
"resources/android/icon/drawable-xxxhdpi-icon.png":
"platforms/android/res/drawable-xxxhdpi/ic_stat_onesignal_default.png"
} ];
module.exports = function(context) {
// no need to configure below
var rootdir = context.opts.projectRoot;
filestocopy.forEach(function(obj) {
Object.keys(obj).forEach(function(key) {
var val = obj[key];
var srcfile = path.join(rootdir, key);
var destfile = path.join(rootdir, val);
console.log("copying "+srcfile+" to "+destfile);
var destdir = path.dirname(destfile);
if (fs.existsSync(srcfile) && fs.existsSync(destdir)) {
fs.createReadStream(srcfile).pipe(
fs.createWriteStream(destfile));
}
});
});
};
\ No newline at end of file
{
"name": "mogobus",
"integrations": {
"cordova": {}
},
"type": "ionic-angular",
"id": "25be3f24"
}
\ No newline at end of file
{
"name": "Sidemenu Starter",
"baseref": "master",
"tarignore": [
".sourcemaps",
"node_modules",
"package-lock.json",
"www"
],
"scripts": {
"test": "npm run build"
}
}
File added
This source diff could not be displayed because it is too large. You can view the blob instead.
{
"name": "mogobus",
"version": "0.0.1",
"author": "Techware Solutions Private Limited",
"homepage": "https://www.techware.co.in/",
"private": true,
"scripts": {
"start": "ionic-app-scripts serve",
"clean": "ionic-app-scripts clean",
"build": "ionic-app-scripts build",
"lint": "ionic-app-scripts lint",
"ionic:serve": "ionic-app-scripts serve"
},
"dependencies": {
"@angular/animations": "5.2.11",
"@angular/common": "5.2.11",
"@angular/compiler": "5.2.11",
"@angular/compiler-cli": "^5.2.11",
"@angular/core": "5.2.11",
"@angular/forms": "5.2.11",
"@angular/http": "5.2.11",
"@angular/platform-browser": "5.2.11",
"@angular/platform-browser-dynamic": "5.2.11",
"@ionic-native/core": "~4.11.0",
"@ionic-native/google-plus": "^4.20.0",
"@ionic-native/in-app-browser": "^5.6.0",
"@ionic-native/network": "^4.13.0",
"@ionic-native/onesignal": "^4.20.0",
"@ionic-native/splash-screen": "~4.11.0",
"@ionic-native/status-bar": "^4.20.0",
"@ionic-native/toast": "^4.13.0",
"@ionic/pro": "2.0.3",
"@ionic/storage": "2.1.3",
"@ngx-translate/core": "^9.1.1",
"@ngx-translate/http-loader": "^3.0.1",
"angular-6-social-login-v2": "^1.0.5",
"angularfire2": "^5.0.0-rc.12",
"com.razorpay.cordova": "git+https://github.com/razorpay/razorpay-cordova.git",
"cordova": "^9.0.0",
"cordova-android": "6.3.0",
"cordova-browser": "5.0.4",
"cordova-plugin-device": "^2.0.2",
"cordova-plugin-googleplus": "^7.0.2",
"cordova-plugin-inappbrowser": "^3.0.0",
"cordova-plugin-ionic-keyboard": "^2.1.3",
"cordova-plugin-ionic-webview": "^2.4.1",
"cordova-plugin-network-information": "^2.0.1",
"cordova-plugin-splashscreen": "^5.0.2",
"cordova-plugin-statusbar": "^2.4.3",
"cordova-plugin-whitelist": "^1.3.3",
"cordova-plugin-x-toast": "^2.7.2",
"device": "0.3.9",
"firebase": "^5.4.1",
"ionic": "^3.20.1",
"ionic-angular": "3.9.0",
"ionicons": "3.0.0",
"node-sass": "^4.12.0",
"npm": "^6.4.0",
"onesignal-cordova-plugin": "^2.4.7",
"promise-polyfill": "^8.1.0",
"rxjs": "5.5.11",
"sw-toolbox": "3.6.0",
"zone.js": "0.8.26"
},
"devDependencies": {
"@ionic/app-scripts": "^3.2.4",
"@ionic/cli-plugin-ionic-angular": "1.4.1",
"tslint-ionic-rules": "0.0.19",
"typescript": "~2.6.2"
},
"description": "Online Bus Ticket Booking and Reservation System",
"cordova": {
"plugins": {
"cordova-plugin-whitelist": {},
"cordova-plugin-device": {},
"cordova-plugin-splashscreen": {},
"cordova-plugin-ionic-webview": {
"ANDROID_SUPPORT_ANNOTATIONS_VERSION": "27.+"
},
"cordova-plugin-ionic-keyboard": {},
"cordova-plugin-network-information": {},
"cordova-plugin-x-toast": {},
"com.razorpay.cordova": {},
"cordova-plugin-inappbrowser": {},
"onesignal-cordova-plugin": {},
"cordova-plugin-statusbar": {}
},
"platforms": [
"android"
]
}
}
\ No newline at end of file
48fc8ee3ca176137cdb7bbb92de76ffa
\ No newline at end of file
9e8a92c6999aec203c8b37d6142183e4
\ No newline at end of file
import { Component, ViewChild } from '@angular/core';
import { Nav, Platform, Events,ModalController } from 'ionic-angular';
import { StatusBar } from '@ionic-native/status-bar';
import { SplashScreen } from '@ionic-native/splash-screen';
/*-------------------Edited By Adarsh--------------------------*/
import { Storage } from '@ionic/storage';
import { Network } from '@ionic-native/network';
import { Common } from "../providers/services/common";
import { Myservice } from "../providers/services/myservice";
import { user } from "../models/mymodel";
import { TranslateService } from '@ngx-translate/core';
import { OneSignal } from '@ionic-native/onesignal';
/*-------------------Edited by Adarsh End ----------------------*/
@Component({
templateUrl: 'app.html'
})
export class MyApp {
@ViewChild(Nav) nav: Nav;
rootPage: any = 'LandingPage';
result:any;
local:user;
lang: string = 'en';
device_id:any
lan:any;
recieved_data:any;
onseSignalAppId: string = '38fb642a-596d-4497-a5a7-475e7beed425';
googleProjectId: string='363596543711';
constructor(
private oneSignal: OneSignal,
public platform: Platform,
private statusBar: StatusBar,
public splashScreen: SplashScreen,
public network: Network,
public common: Common,
public myservice: Myservice,
public storage: Storage,
public events: Events,
private translate: TranslateService,
public modalCtrl: ModalController
) {
this.initializeApp();
this.triggernoti()
this.translate.setDefaultLang('ar');
this.translate.use('ar');
this.translate.setDefaultLang('en');
this.translate.use('en');
this.events.subscribe('user:created', (user, time) => {
if (user)
{
this.recieved_data = user.data;
}
});
this.storage.get('user_data').then(data => {
if (data) {
this.recieved_data = data.data;
console.log('Data array',this.recieved_data.name)
}
});
}
updateItem(item){
console.log(item);
this.lang = item==true?'ar':'en';
this.storage.set('lang', this.lang);
this.events.publish('user:lang', this.lang);
this.languageTrans();
}
initializeApp() {
this.statusBar.overlaysWebView(false);
// this.statusBar.hide();
this.platform.ready().then(() => {
this.splashScreen.hide();
var This = this;
setTimeout(function(argument) {
This.languageTrans();
},500)
//
this.events.subscribe('app:lang', data => {
console.log("called");
this.languageTrans();
})
this.network.onDisconnect().subscribe(() => {
this.common.presentToast('network was disconnected');
});
this.network.onConnect().subscribe(() => {
this.common.presentToast('network connected');
setTimeout(() => {
if (this.network.type === 'wifi') {
console.log('we got a wifi connection, woohoo!');
}
}, 3000);
});
var data = {"app_key":"my_key"}
});
}
ionViewDidLoad() {
console.log('ionViewDidLoad App page');
}
// triggerNotification()
// {
// // Define settings for iOS
// var iosSettings = {};
// iosSettings["kOSSettingsKeyAutoPrompt"] = false;
// iosSettings["kOSSettingsKeyInAppLaunchURL"] = false;
// // Initialise plugin with OneSignal service
// this.oneSignal.startInit('0594aad6-6487-4140-8fc0-1822ea653100', '893149145204').iOSSettings(iosSettings);
// this.oneSignal.registerForPushNotifications();
// // Control how OneSignal notifications will be shown when
// // one is received while your app is in focus
// this.oneSignal.inFocusDisplaying(this.oneSignal.OSInFocusDisplayOption.None);
// // Retrieve the OneSignal user id and the device token
// this.oneSignal.getIds().then((ids) => {
// console.log('getIds: ' + JSON.stringify(ids));
// this.device_id =ids;
// console.log(this.device_id)
// this.storage.set('get_deviceId',this.device_id);
// // this.myservice.load_post({ device_id:ids },"store_id").subscribe(response => { })
// });
// // When a push notification is received handle
// // how the application will respond
// this.oneSignal.handleNotificationReceived().subscribe((msg) => {
// // Log data received from the push notification service
// console.log('Notification received');
// console.dir(msg);
// });
// // When a push notification is opened by the user
// // handle how the application will respond
// this.oneSignal.handleNotificationOpened().subscribe((msg) => {
// // Log data received from the push notification service
// console.log('Notification opened');
// /*console.log(JSON.stringify(msg));
// var pool_id = msg.notification.payload.additionalData.pool_id;
// if(pool_id)
// this.nav.setRoot('QuoteDetailsPage',{'pool_id' : pool_id,'from_push' : false});*/
// //console.log(this.event_id);
// //this.detail(this.event_id);
// });
// // End plugin initialisation
// this.oneSignal.endInit();
// }
triggernoti() {
if(this.platform.is('cordova')) {
if (this.platform.is('android')) {
this.oneSignal.startInit(this.onseSignalAppId, this.googleProjectId);
}
else if (this.platform.is('ios')) {
this.oneSignal.startInit(this.onseSignalAppId);
}
this.oneSignal.inFocusDisplaying(this.oneSignal.OSInFocusDisplayOption.Notification);
this.oneSignal.handleNotificationReceived().subscribe(() => {
// do something when notification is received
});
this.oneSignal.handleNotificationOpened().subscribe(result => {
// do something when a notification is opened
});
this.oneSignal.endInit();
// AND THIS METHOD RETURN YOUR DEVICES USER_ID
this.oneSignal.getIds().then(identity => {
console.log('User data from onesignal', identity)
this.device_id =identity;
console.log(this.device_id.userId);
this.storage.set('get_deviceId',this.device_id);
});
}
}
contatcus()
{
this.nav.setRoot("ContactPage");
}
cancelticket() {
this.nav.setRoot("CanceltripPage");
}
home() {
this.nav.setRoot("HomePage");
}
profile(){
this.nav.setRoot("ProfilePage");
}
// logout()
// {
// this.storage.remove('user_data');
// this.storage.clear();
// this.local = undefined;
// console.log('Logout')
// // this.ionViewDidLoad();
// }
login() {
this.storage.remove('user_data');
this.storage.clear();
// this.local = undefined;
// this.nav.setRoot("LoginPage");
let profileModal = this.modalCtrl.create("LoginPage");
// profileModal.onDidDismiss(data => {
// })
profileModal.present();
}
changepass() {
this.nav.setRoot("ChangepassPage");
}
trip_list(){
console.log("trip_list");
this.nav.setRoot("TripPage");
}
notification(){
this.nav.setRoot("NotificationPage");
}
signup() {
this.nav.setRoot("SignupPage");
}
forgot(){
this.nav.setRoot("ForgotPage");
}
signin(){
this.nav.setRoot("LoginPage");
}
languageTrans() {
var This = this;
setTimeout(function () {
This.storage.get('lang').then(data => {
console.log(data)
if (data) {
This.translate.setDefaultLang(data);
This.translate.use(data);
This.lang = data;
if(data=='ar'){
This.lan = true;
}
}
else {
This.translate.setDefaultLang('en');
This.translate.use('en');
}
//This.lang_trans()
})
}, 500)
}
}
export var config = {
apiKey: "AIzaSyCjHdnKLes_pZBooXe99kIbtlqCi16l2Jk",
authDomain: "mynew-47b5d.firebaseapp.com",
databaseURL: "https://mynew-47b5d.firebaseio.com",
projectId: "mynew-47b5d",
storageBucket: "",
messagingSenderId: "878406303667"
};
\ No newline at end of file
<ion-menu [content]="content" [ngClass]="lang=='ar' ? 'ar' : ''">
<ion-content class="theme_background">
<!-- <ion-item class="language">
<ion-label>Language to AR</ion-label>
<ion-toggle [(ngModel)]="lan" (ionChange)="updateItem(lan)" checked="false"></ion-toggle>
</ion-item> -->
<div class="sidemenu_wrapper" *ngIf="recieved_data">
<div class="profile_banner" menuClose (click)="profile()">
<h5><strong>Hi!</strong><br>{{recieved_data.name}}</h5>
</div>
<ul>
<li class="m1" menuClose (click)="home()">
{{'menu.Home' | translate}}
</li>
<li class="m2" menuClose (click)="trip_list()">
{{'menu.My Trip' | translate}}
</li>
<li class="m3" menuClose (click)="cancelticket()">
{{'menu.Cancel ticket' | translate}}
</li>
<li class="m4" menuClose (click)="changepass()">
{{'menu.Change Password' | translate}}
</li>
<li class="m5" menuClose (click)="contatcus()">
Contact us
</li>
<li class="m5" menuClose (click)="login()">
{{'menu.Logout' | translate}}
</li>
</ul>
</div>
<div class="sidemenu_wrapper" *ngIf="!recieved_data">
<div class="profile_banner">
<div class="logoimg"><img src="assets/imgs/logo.png">
</div>
<div class="clear"></div>
<h5><strong>Welcome,</strong><br>Guest</h5>
<hr>
</div>
<ul>
<li class="m1" menuClose (click)="home()">
{{'menu.Home' | translate}}
</li>
<li class="m5" menuClose (click)="signin()">
{{'menu.Sign In' | translate}}
</li>
<li class="m5" menuClose (click)="signup()">
{{'menu.Sign up' | translate}}
</li>
<li class="m5" menuClose (click)="forgot()">
{{'menu.Forgot Password' | translate}}
</li>
<li class="m5" menuClose (click)="contatcus()">
Contact us
</li>
</ul>
</div>
</ion-content>
</ion-menu>
<!-- Disable swipe-to-go-back because it's poor UX to combine STGB with side menus -->
<ion-nav [root]="rootPage " #content swipeBackEnabled="false "></ion-nav>
<style>
.language {
background-color: #FF585E !important;
color: #fff !important;
padding-left: 15px !important;
font-size: 18px;
font-weight: 300;
letter-spacing: 2px;
}
</style>
\ No newline at end of file
import { BrowserModule } from '@angular/platform-browser';
import { ErrorHandler, NgModule } from '@angular/core';
import { IonicApp, IonicErrorHandler, IonicModule } from 'ionic-angular';
import {HttpClientModule, HttpClient} from '@angular/common/http';
import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
import {TranslateHttpLoader} from '@ngx-translate/http-loader';
import { HttpModule, Http } from '@angular/http';
import { MyApp } from './app.component';
import { StatusBar } from '@ionic-native/status-bar';
import { SplashScreen } from '@ionic-native/splash-screen';
import { config } from './app.firebaseconfig';
import { InAppBrowser } from '@ionic-native/in-app-browser/ngx';
/*-------------Edited by Adarsh-----------------*/
import { ValidationService } from '../providers/services/validation.service';
import { Common } from "../providers/services/common";
import { Myservice } from "../providers/services/myservice";
import { GooglePlus } from '@ionic-native/google-plus';
import { IonicStorageModule } from '@ionic/storage';
import { Network } from '@ionic-native/network';
import { Toast } from '@ionic-native/toast';
import { OneSignal } from '@ionic-native/onesignal';
import { SocialLoginModule, AuthServiceConfig, GoogleLoginProvider, FacebookLoginProvider } from 'angular-6-social-login-v2';
export function HttpLoaderFactory(http: HttpClient) {
return new TranslateHttpLoader(http, './assets/i18n/', '.json');
}
// export function getAuthServiceConfigs() {
// const config = new AuthServiceConfig(
// [
// {
// id: FacebookLoginProvider.PROVIDER_ID,
// provider: new FacebookLoginProvider('804054239963041')
// },
// {
// id: GoogleLoginProvider.PROVIDER_ID,
// provider: new GoogleLoginProvider('728937449017-bbvtnj56mnssvndvs5bkqjlu9g9p65g9.apps.googleusercontent.com')
// }
// ]);
// return config;
// }
@NgModule({
declarations: [
MyApp,
],
imports: [
BrowserModule,
HttpModule,
IonicModule.forRoot(MyApp),
IonicStorageModule.forRoot(),
HttpClientModule,
SocialLoginModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: HttpLoaderFactory,
deps: [HttpClient]
}
})
],
bootstrap: [IonicApp],
entryComponents: [
MyApp,
],
providers: [
OneSignal,
InAppBrowser,
StatusBar,
SplashScreen,
GooglePlus,
{provide: ErrorHandler, useClass: IonicErrorHandler},
Common, /*-------------Edited by Adarsh-----------------*/
ValidationService,
Network, /*-------------Edited by Adarsh-----------------*/
Toast, /*-------------Edited by Adarsh-----------------*/
Myservice, /*-------------Edited by Adarsh-----------------*/
Storage /*-------------Edited by Adarsh-----------------*/
// OneSignal, /*-------------Edited by Adarsh-----------------*/
]
})
export class AppModule {}
\ No newline at end of file
/*
Site Name: Soulmate
URI: http:
Description: This is the theme css for Soulmate
Version: 0.1
Author: Amal-Techware Solution
Author URI:
Tags:
---------------------------
THEME STYLES
---------------------------
TABLE OF CONTENTS
---------------------------
01. FONTS-N-SIZES
02. FONTS-COLOR
03. THEMES-N-BACKGROUNDS
04. SPACING-N-POSITIONS
05. ALIGMENTS
06. ALERTS-N-MESSAGES
07. BODY-STRUCTURE
08. OVERWRITTEN
*/
/*-------------------------------
01. FONTS-N-SIZES
--------------------------------*/
@import url('https://fonts.googleapis.com/css?family=Roboto:100,100i,300,300i,400,400i,500,500i,700,700i,900,900i&display=swap');
* {
font-family: 'Roboto', sans-serif;
}
*::-webkit-scrollbar {
display: none;
}
.no-scroll .scroll-content {
overflow: hidden;
}
a {
text-decoration: none !important;
}
/*-------------------------------
02. FONTS-SETTINGS
--------------------------------*/
.text_color_white {
color: hsl(0, 0%, 100%) !important;
}
.text_color_theme {
color: #FF585E !important;
}
.font_size_xs {
font-size: 12px !important;
}
.font_size_sm {
font-size: 14px !important;
}
.font_size_md {
font-size: 16px !important;
}
.font_size_lg {
font-size: 18px !important;
}
.font_size_xl {
font-size: 20px !important;
}
.font_size_vl {
font-size: 35px !important;
}
.font_weight300 {
font-weight: 300 !important;
}
.font_weight400 {
font-weight: 400 !important;
}
.font_weight500 {
font-weight: 500 !important;
}
.font_weight600 {
font-weight: 600 !important;
}
/*-------------------------------
03. THEMES-N-BACKGROUNDS
--------------------------------*/
.theme_background {
background-image: url("../assets/imgs/pattern.png");
background-size: cover;
background-position: center;
background-repeat: no-repeat;
}
.theme_transparent {
background: transparent !important;
}
.theme_white {
background-color: #f7f8fd !important;
}
.theme_off_white {
background-color: #f4f4f4 !important;
}
.theme_dark_transparent {
background-color: rgba(0, 0, 0, 0.6) !important;
}
.theme_white_transparent {
background-color: rgba(243, 243, 243, 0.6) !important;
}
.setting_bg {
background: #fafaf6;
}
/*-------------------------------
04. SPACING-N-POSITIONS
--------------------------------*/
.width25 {
width: 25% !important;
}
.width50 {
width: 50% !important;
}
.width75 {
width: 75% !important;
}
.widthFull {
width: 100% !important;
}
.widthAuto {
width: auto !important;
}
.height25 {
height: 25% !important;
}
.height50 {
height: 50% !important;
}
.height75 {
width: 75% !important;
}
.heightFull {
height: 100% !important;
}
.heightAuto {
height: auto !important;
}
.p0 {
padding: 0px !important;
}
.pl0 {
padding-left: 0px !important;
}
.pr0 {
padding-right: 0px !important;
}
.pt0 {
padding-top: 0px !important;
}
.pb0 {
padding-bottom: 0px !important;
}
.p10 {
padding: 10px !important;
}
.pl10 {
padding-left: 10px !important;
}
.pr10 {
padding-right: 10px !important;
}
.m0 {
margin: 0px !important;
}
.ml0 {
margin-left: 0px !important;
}
.mr0 {
margin-right: 0px !important;
}
.mt0 {
margin-top: 0px !important;
}
.mb0 {
margin-bottom: 0px !important;
}
.mAuto {
margin: 0 auto !important;
}
.clear {
clear: both !important;
}
.absolute {
position: absolute !important;
}
.relative {
position: relative !important;
}
.fixed {
position: fixed !important;
}
/*-------------------------------
05. ALIGMENTS
--------------------------------*/
.floatLeft {
float: left !important;
}
.floatRight {
float: right !important;
}
.textLeft {
text-align: left !important;
}
.textRight {
text-align: right !important;
}
.textCenter {
text-align: center !important;
}
/*-------------------------------
06. ALERTS-N-MESSAGES
--------------------------------*/
.alert {
padding: 5px;
border-radius: 20px;
padding-left: 20px;
border-bottom-right-radius: 0px;
}
.alert_error {
background-color: #d94f4f !important;
border-color: #d94f4f !important;
margin-bottom: 10px;
color: #fff !important;
}
.warning {
color: #fff;
background-color: #8a6d3b;
}
.alert_success {
background-color: #3c763d !important;
border-color: #3c763d !important;
margin-bottom: 10px;
color: #fff !important;
font-size: 16px;
font-weight: 300;
}
.error {
background-color: #d94f4f !important;
border-color: #d94f4f !important;
margin-bottom: 10px;
color: #fff !important;
font-size: 16px;
font-weight: 300;
}
.valid-p {
padding: 5px !important;
padding-left: 10px;
font-size: 12px !important;
font-weight: 300 !important;
}
/*-------------------------------
07. BODY-STRUCTURE
--------------------------------*/
body {
padding-top: constant(safe-area-inset-top); //for iOS 11.2
padding-top: env(safe-area-inset-top); //for iOS 11.1
}
.nav_header {
width: 100%;
z-index: 999;
background-color: #fff;
-webkit-box-shadow: 0px 5px 19px -5px rgba(0, 0, 0, 0.3);
-moz-box-shadow: 0px 5px 19px -5px rgba(0, 0, 0, 0.3);
box-shadow: 0px 5px 19px -5px rgba(0, 0, 0, 0.3);
}
.nav_btn {
width: 50px !important;
height: 50px !important;
background: transparent;
margin: 0px;
font-size: 25px;
color: #fff;
padding: 0px !important;
box-shadow: none !important;
}
.nav_menu {
background-image: url("../assets/imgs/menu.png");
background-position: center;
background-repeat: no-repeat;
background-size: 30px;
background-repeat: no-repeat;
}
.nav_back {
background-image: url("../assets/imgs/arrow_left.png");
background-position: center;
background-repeat: no-repeat;
background-size: 30px;
background-repeat: no-repeat;
}
.nav_filter {
background-image: url("../assets/imgs/filter.png");
background-position: center;
background-repeat: no-repeat;
background-size: 30px;
background-repeat: no-repeat;
}
.nav_header_title {
height: 100%;
font-weight: 600;
font-size: 20px;
color: #000;
padding: 10px;
text-transform: uppercase;
width: calc(100% - 100px);
letter-spacing: 1px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
padding-left: 8px;
padding-right: 8px;
padding-top: 13px;
padding-bottom: 13px;
text-align: center;
}
.nav_header_title .icon {}
.clear {
clear: both !important;
}
.border {
border: 1px solid;
}
.borderNone {
border: none !important;
}
.see_btn {
font-size: 18px !important;
text-transform: capitalize !important;
}
.nav_inner_btn {
width: 45px !important;
height: 45px !important;
background: transparent;
margin: 0px;
font-size: 25px;
color: #fff;
padding: 0px !important;
box-shadow: none !important;
background-repeat: no-repeat !important;
background-position: center !important;
background-size: 35px !important;
}
.nav_header_inner_title {
height: 100%;
font-weight: 200;
font-size: 22px;
color: #fff;
padding: 10px;
text-transform: capitalize;
width: calc(100% - 90px);
letter-spacing: 1px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
padding-left: 8px;
padding-right: 8px;
padding-top: 15px;
padding-bottom: 15px;
}
.nav_header_inner_title .icon {}
/*-------------------------------
08. OVERWRITTEN
--------------------------------*/
.activated {
background: transparent !important;
}
button {
box-shadow: none !important;
}
.item {
background: transparent !important;
padding: 0px !important;
.item-inner {
padding: 0px !important;
.input {
height: 100%;
.text-input {
padding: 0px !important;
margin: 0px !important;
width: 100%;
}
}
}
}
.button-md:hover:not(.disable-hover) {
background: transparent !important;
}
.header-md::after,
.tabs-md[tabsPlacement="top"]>.tabbar::after,
.footer-md::before,
.tabs-md[tabsPlacement="bottom"]>.tabbar::before {
background: transparent !important;
}
.alert-radio-group {
border: none !important;
}
.background {
background-image: url("../assets/imgs/background.png");
background-position: center;
background-size: cover;
}
.picker-wrapper {
.picker-toolbar {
background: transparent !important;
}
.button-inner {
color: #fff !important;
}
background: rgba(254,
142,
9,
1) !important;
.picker-opt {
color: #fff !important;
}
.picker-opt-selected {
font-size: 25px;
font-weight: 600;
}
}
.no_bus {
color: #4f5cd5;
padding: 12px;
font-size: 20px;
font-weight: 300;
line-height: 25px;
}
// .ar {
// .profie_circle {
// float: right;
// }
// .sidemenu_wrapper .profile_banner h5 {
// text-align: right !important;
// }
// .sidemenu_wrapper .profile_banner hr {
// margin-right: 0px !important;
// margin-left: auto !important;
// }
// .sidemenu_wrapper ul li {
// text-align: right;
// }
// .sidemenu_wrapper ul li .icon {
// float: right;
// margin-left: 10px;
// margin-right: 0px;
// }
// .floatLeft {
// float: right !important;
// }
// .floatRight {
// float: left !important;
// }
// .nav_header_title {
// text-align: right !important;
// }
// .bus_name {
// text-align: right !important;
// }
// .bus_type {
// text-align: right;
// }
// .searchbar-input {
// text-align: right !important;
// }
// .card .card-header {
// text-align: right;
// }
// .text-input {
// text-align: right;
// }
// .label {
// text-align: right;
// }
// .radio {
// float: right;
// }
// .footer p {
// text-align: right;
// }
// .textRight {
// text-align: left !important;
// }
// .textLeft {
// text-align: right !important;
// }
// }
.clear {
clear: both !important;
}
.sidemenu_wrapper {
padding: 20px;
padding-left: 30px;
height: 100vh;
align-content: center;
display: flex;
flex-direction: column;
justify-content: center;
text-align: center;
.profile_banner {
text-align: left;
.logoimg {
width: 80px;
height: 80px;
img {
width: 100%;
height: 100%;
object-fit: cover;
object-position: center;
}
}
h5 {
strong {
font-weight: 900;
font-size: 35px;
}
font-size: 26px;
font-weight: 400;
}
}
ul {
margin: 0px;
padding: 0px;
padding-top: 25px;
li {
list-style: none;
font-size: 18px;
font-weight: 300;
padding-top: 10px;
padding-bottom: 10px;
background-repeat: no-repeat;
background-size: 25px;
background-position: 1px;
padding-left: 35px;
text-align: left;
}
.m1 {
background-image: url("../assets/imgs/s1.png");
}
.m2 {
background-image: url("../assets/imgs/s2.png");
}
.m3 {
background-image: url("../assets/imgs/s3.png");
}
.m4 {
background-image: url("../assets/imgs/s4.png");
}
.m5 {
background-image: url("../assets/imgs/s5.png");
}
.m6 {
background-image: url("../assets/imgs/s6.png");
}
}
}
\ No newline at end of file
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app.module';
platformBrowserDynamic().bootstrapModule(AppModule);
{
"menu":{
"Home": "الصفحة الرئيسية ",
"My Trip": "رحلتي ",
"Notification": "إعلام ",
"Cancel ticket": "إلغاء التذكرة ",
"Change Password": "تغير كلمة السر",
"Logout": "الخروج",
"Guest": "زائر",
"Sign In": "تسجيل الدخول",
"Sign up": "فتح حساب",
"Forgot Password": "نسيت كلمة المرور"
},
"home": {
"Boarding Point": "نقطة الصعود",
"Destination Point": "مكان الوصول",
"Search Bus":"بحث عن حافلة",
"Date of Travel":"تاريخ الرحلة"
},
"login":{
"Mobile Number": "رقم الهاتف",
"Password": "كلمة السر",
"Login": "تسجيل الدخول",
"Forgot Password ?":"هل نسيت كلمة المرور ؟",
"Add a new account":"إضافة حساب جديد",
"Invalid phone number": "رقم الهاتف غير صحيح",
"Minimum 6 characters required": "الحد الأدنى 6 أحرف المطلوبة"
},
"signup":{
"Email":"البريد الإلكتروني",
"Invalid Email ID":"البريد الإلكتروني غير صالح",
"Mobile Number":"رقم الهاتف",
"Enter a valid Mobile":"أدخل رقم هاتف صالح",
"Password":"كلمه السر",
"Minimum 6 characters":"الحد الأدنى 6 أحرف",
"Confirm Password":"تأكيد كلمة المرور",
"Password mismatches":"عدم تطابق كلمة المرور",
"I accept Terms & Conditions":"أوافق على الشروط والأحكام",
"Please accept terms & conditions":"يرجى قبول الشروط والأحكام",
"Signup":"التسجيل",
"Already had an account ?":"لديك حساب ؟"
},
"search":{
"Search Results":"نتائج البحث",
"To":"إلى",
"Seats":"مقاعد",
"Currently No Bus avaliable between":"حاليا لا حافلة متاحة بين"
},
"filter":{
"Sort & Filter":"بحث مفصل",
"Reset":"إعادة تعيين",
"Bus Type":"نوع الحافلة",
"Location & Travel":"مواقع و رحلات",
"Travels":"رحلات",
"Boarding Point":"نقطة الصعود",
"Dropping Point":"مكان الوصول",
"Amenities":"وسائل الراحة",
"DONE":"تفعيل"
},
"seat":{
"Pick your seats":"اختر مقاعدك",
"Available Seats":"المقاعد المتاحة",
"Selected Seats":"مقاعد مختارة",
"Booked Seats":"حجز مقاعد",
"Seats":"المقاعد",
"Total Fare":"الأجرة الكلية",
"DONE":"تفعيل"
},
"boarding":{
"Select boarding point":"اختر نقطة الصعود",
"Search boarding points":"البحث في نقاط الصعود",
"NEXT":"التالى"
},
"passanger":{
"Passenger details":"تفاصيل الركاب",
"Passenger detail":"تفاصيل الركاب",
"Name of the Passenger":"اسم الراكب",
"Sorry, field Passanger name is required!":"عذرا ، حقل اسم المسافر مطلوب!",
"Age":"سن",
"Sorry, field Age is required!":"عذرا ، حقل العمر مطلوب!",
"Male":"ذكر",
"Female":"أنثى",
"Book":"تفعيل الحجز"
},
"authcheck":{
"Mobile Number":"رقم الهاتف ",
"Invalid phone number":"رقم الهاتف غير صحيح",
"Password":"كلمه السر",
"Minimum 6 characters required":"الحد الأدنى 6 أحرف المطلوبة",
"Login":"تسجيل الدخول",
"Add a new account":"إضافة حساب جديد",
"Email":"البريد الإلكتروني",
"Invalid Email ID":"البريد الإلكتروني غير صالح",
"Enter a valid Mobile":"رقم الهاتف غير صحيح",
"Password":"كلمه السر",
"Minimum 6 characters":"الحد الأدنى 6 أحرف ",
"Confirm Password":"تأكيد كلمة المرور",
"Password mismatches":"عدم تطابق كلمة المرور",
"I accept Terms & Conditions":"أوافق على الشروط والأحكام",
"Please accept terms & conditions":"يرجى قبول الشروط والأحكام",
"Signup":"سجل",
"Already had an account ?":"لديك حساب ؟"
},
"booking":{
"Booking Summary":"ملخص الحجز",
"Ticket Details":"تفاصيل التذكرة",
"BOOKING ID":"رقم الحجز",
"BOOKING":"الحجز",
"CONFIRMED SUCCESSFULLY":"أكدت بنجاح",
"Trip Details":"تفاصيل الرحلة",
"BUS NAME":"اسم الحافلة",
"TYPE":"نوع",
"DATE":"تاريخ",
"DEPARTURE PLACE & TIME":"مكان المغادرة والوقت",
"TOTAL AMOUNT":"المبلغ الإجمالي",
"Customer Details":"تفاصيل العميل",
"Name":"الإ سم",
"Age":"سن",
"Gender":"نوع",
"DONE":"تفعيل"
},
"summery":{
"Your payment is":"دفعتك",
"Succesfull":"ناجح",
"Booking ID":"معرف الحجز",
"HOME":"الصفحة الرئيسية",
"MY TRIPS":"رحلاتي"
},
"others":{
"My trips":"رحلاتي",
"My Notification":"إشعار",
"ErrorPage":"ErrorPage"
},
"cancel":{
"Ticket Number":"رقم التذكرة",
"Invalid Booking Id":"رقم الحجز غير صحيح",
"Email ID":"عنوان الايميل",
"Invalid email Id":" البريد الإلكتروني غير صالح",
"Cancel ticket":"إلغاء التذكرة"
},
"change":{
"Old Password":"كلمة المرور القديمة",
"Invalid Password":"رمز مرور خاطئ",
"New Password":"كلمة السر الجديدة",
"Invalid New Password":"كلمة المرور الجديدة غير صالحة",
"Confirm New Password":"تأكيد كلمة المرور الجديدة",
"Password mismatches":"عدم تطابق كلمة المرور",
"SAVE":"حفظ"
},
"forgot":{
"Forgot Page":"نسيت صفحة",
"Enter email ID":"أدخل البريد الإلكتروني",
"Invalid Email ID":" البريد الإلكتروني غير صالح",
"Request":"طلب"
}
}
\ No newline at end of file
{
"menu":{
"Home": "Home",
"My Trip": "My Trip",
"Notification": "Notification",
"Cancel ticket": "Cancel ticket",
"Change Password": "Change Password",
"Logout": "Logout",
"Guest": "Guest",
"Sign In": "Sign In",
"Sign up": "Sign up",
"Forgot Password": "Forgot Password"
},
"home": {
"Boarding Point": "Boarding Point",
"Destination Point": "Destination Point",
"Search Bus":"Search Bus",
"Date of Travel":"Date of Travel"
},
"login":{
"Username":"Username",
"Mobile Number": "Mobile Number",
"Password": "Password",
"Login": "Login",
"Forgot Password ?":"Forgot Password ?",
"Add a new account":"Add a new account",
"Invalid email id": "Invalid email id",
"Minimum 6 characters required": "Minimum 6 characters required"
},
"signup":{
"Name":"Name",
"Email":"Email",
"Invalid Email ID":"Invalid Email ID",
"Mobile Number":"Mobile Number",
"Enter a valid Mobile":"Enter a valid Mobile",
"Password":"Password",
"Minimum 6 characters":"Minimum 6 characters",
"Confirm Password":"Confirm Password",
"Password mismatches":"Password mismatches",
"I accept Terms & Conditions":"I accept Terms & Conditions",
"Please accept terms & conditions":"Please accept terms & conditions",
"Signup":"Signup",
"Already had an account ?":"Already had an account ?"
},
"search":{
"Search Results":"Search Results",
"To":"To",
"to":"to",
"Seats":"Seats",
"Currently No Bus avaliable between":"Currently No Bus avaliable between"
},
"filter":{
"Filters":"Filters",
"FILTER BY":"FILTER BY",
"Sort & Filter":"Sort & Filter",
"Reset":"Reset",
"BUS TYPE":"BUS TYPE",
"Location & Travel":"Location & Travel",
"Travels":"Travels",
"Boarding Points":"Boarding Points",
"Dropping Points":"Dropping Points",
"Amenities":"Amenities",
"DONE":"DONE",
"A/C":"A/C",
"Non A/C":"Non A/C",
"Semisleeper": "Semisleeper",
"Sleeper":"Sleeper",
"Seater":"Seater"
},
"seat":{
"Pick your seats":"Pick your seats",
"Available Seats":"Available Seats",
"Selected Seats":"Selected Seats",
"Booked Seats":"Booked Seats",
"Seats":"Seats",
"Total Fare":"Total Fare",
"DONE":"DONE"
},
"boarding":{
"Select boarding point":"Select boarding point",
"Search boarding points":"Search boarding points",
"NEXT":"NEXT"
},
"passanger":{
"Passenger details":"Passenger details",
"Passenger detail":"Passenger detail",
"Name of the Passenger":"Name of the Passenger",
"Sorry, field Passanger name is required!":"Sorry, field Passanger name is required!",
"Age":"Age",
"Sorry, field Age name is required!":"Sorry, field Age name is required!",
"Male":"Male",
"Female":"Female",
"Book":"Book"
},
"authcheck":{
"Mobile Number":"Mobile Number",
"Invalid phone number":"Invalid phone number",
"Password":"Password",
"Minimum 6 characters required":"Minimum 6 characters required",
"Login":"Login",
"Add a new account":"Add a new account",
"Email":"Email",
"Invalid Email ID":"Invalid Email ID",
"Enter a valid Mobile":"Enter a valid Mobile",
"Minimum 6 characters":"Minimum 6 characters",
"Confirm Password":"Confirm Password",
"Password mismatches":"Password mismatches",
"I accept Terms & Conditions":"I accept Terms & Conditions",
"Please accept terms & conditions":"Please accept terms & conditions",
"Signup":"Signup",
"Already had an account ?":"Already had an account ?"
},
"booking":{
"Booking Summary":"Booking Summary",
"Ticket Details":"Ticket Details",
"BOOKING ID":"BOOKING ID",
"BOOKING":"BOOKING",
"CONFIRMED SUCCESSFULLY":"CONFIRMED SUCCESSFULLY",
"Trip Details":"Trip Details",
"BUS NAME":"BUS NAME",
"TYPE":"TYPE",
"DATE":"DATE",
"DEPARTURE PLACE & TIME":"DEPARTURE PLACE & TIME",
"TOTAL AMOUNT":"TOTAL AMOUNT",
"Customer Details":"Customer Details",
"Name":"Name",
"Age":"Age",
"Gender":"Gender",
"DONE":"DONE",
"Boarding Point Deatils" : "Boarding Point Details",
"Boarding Point " : "Boarding Point ",
"Contact number " : "Contact number ",
"Seat number " : "Seat number ",
"Adress" :"Adress"
},
"summery":{
"Your payment is":"Your payment is",
"Succesfull":"Succesfull",
"Booking ID":"Booking ID",
"HOME":"HOME",
"MY TRIPS":"MY TRIPS"
},
"others":{
"My trips":"My trips",
"My Notification":"My Notification",
"ErrorPage":"ErrorPage"
},
"cancel":{
"Ticket Number":"Ticket Number",
"Invalid Booking Id":"Invalid Booking Id",
"Email ID":"Email ID",
"Invalid email Id":"Invalid email Id",
"Cancel ticket":"Cancel ticket"
},
"change":{
"Change Password":"Change Password",
"Old Password":"Old Password",
"Invalid Password":"Invalid Password",
"New Password":"New Password",
"Invalid New Password":"Invalid New Password",
"Confirm New Password":"Confirm New Password",
"Password mismatches":"Password mismatches",
"SAVE":"SAVE"
},
"forgot":{
"Forgot Page":"Forgot Page",
"Enter email ID":"Enter email ID",
"Invalid Email ID":"Invalid Email ID",
"Request":"Request"
}
}
\ No newline at end of file
{
"HELLO": "hola"
}
\ No newline at end of file
!function(){"use strict";!function(){var l=window,u=l.document,i=l.Array,e=l.Object,a=l.String,s=l.Number,n=l.Date,c=l.Math,r=l.setTimeout,t=l.setInterval,o=l.clearTimeout,f=l.parseInt,d=l.encodeURIComponent,h=l.btoa,p=l.unescape,m=l.TypeError,v=l.navigator,g=l.location,y=l.XMLHttpRequest,b=function(n){return function(e,t){return arguments.length<2?function(t){return n.call(null,t,e)}:n.call(null,e,t)}},k=function(r){return function(e,n,t){return arguments.length<3?function(t){return r.call(null,t,e,n)}:r.call(null,e,n,t)}};function _(){for(var t=arguments.length,e=new i(t),n=0;n<t;n++)e[n]=arguments[n];return function(t){return function(){var n=arguments;return e.every(function(t,e){return t(n[e])||function(){console.error.apply(console,arguments)}("wrong "+e+"th argtype",n[e])})?t.apply(null,n):n[0]}}}var S=b(function(t,e){return typeof t===e}),w=S("boolean"),D=S("number"),R=S("string"),M=S("function"),N=S("object"),x=i.isArray,L=function(t){return K(t)&&1===t.nodeType},K=function(t){return null!==t&&N(t)},P=function(t){return!B(e.keys(t))},A=b(function(t,e){return t&&t[e]}),B=A("length"),T=A("prototype"),C=b(function(t,e){return t instanceof e}),z=n.now,E=c.random,F=c.floor;function O(t,e){return{error:(n=t,r=e,i={description:a(n)},r&&(i.field=r),i)};var n,r,i}function $(t){throw new Error(t)}var G=function(t){return/data:image\/[^;]+;base64/.test(t)};function H(n){if(!K(n))return"";var t=e.keys(n),r=i(B(t));return t.forEach(function(t,e){return r[e]=d(t)+"="+d(n[t])}),r.join("&")}function I(t,e){return K(e)&&(e=H(e)),e&&(t+=0<t.indexOf("?")?"&":"?",t+=e),t}var U,Z,Y,q,W,j,J,V,X,Q,tt,et,nt,rt,it,ot,at,st,ct,ut,lt=T(i),ft=lt.slice,dt=b(function(t,e){return t&&lt.forEach.call(t,e),t}),ht=(U="indexOf",b(function(t,e){return lt[U].call(t,e)})),pt=b(function(t,e){return 0<=ht(t,e)}),mt=b(function(t,e){return ft.call(t,e)}),vt=k(function(t,e,n){return lt.reduce.call(t,e,n)}),gt=function(t){return t},yt=(T(Function),Y=function(t,e){return t.bind(e)},Z=function(t){if(M(t))return Y.apply(null,arguments);throw new m("not a function")},b(function(t,e){var n=arguments;return R(t)&&((n=mt(n,0))[0]=e[t]),Z.apply(null,n)})),bt=T(a).slice,kt=function(t){return" "+t+" "},_t=b(function(t,e){return-1!==t.indexOf(e)}),St=k(function(t,e,n){return bt.call(t,e,n)}),wt=b(function(t,e){return bt.call(t,e)}),Dt=function(t){return e.keys(t||{})},Rt=b(function(t,e){return e in t}),Mt=b(function(t,e){return t&&t.hasOwnProperty(e)}),Nt=k(function(t,e,n){return t[e]=n,t}),xt=k(function(t,e,n){return n&&(t[e]=n),t}),Lt=b(function(t,e){return delete t[e],t}),Kt=b(function(e,n){return dt(Dt(e),function(t){return n(e[t],t,e)}),e}),Pt=JSON.stringify,At=function(t){try{return JSON.parse(t)}catch(t){}},Bt=b(function(n,t){return Kt(t,function(t,e){return n[e]=t}),n}),Tt=function(t,r){void 0===r&&(r="");var i={};return Kt(t,function(t,e){var n=r?r+"."+e:e;K(t)?Bt(i,Tt(t,n)):i[n]=t}),i},Ct=l.Element,zt=function(t){return u.createElement(t||"div")},Et=function(t){return t.parentNode},Ft=_(L),Ot=_(L,L),$t=_(L,R),Gt=_(L,R,function(){return!0}),Ht=_(L,K),It=(q=Ot(function(t,e){return Et(e).replaceChild(t,e),t}),b(q),W=Ot(function(t,e){return e.appendChild(t)}),b(W)),Ut=(j=Ot(function(t,e){var n;return n=e,It(t)(n),t}),b(j)),Zt=(J=Ot(function(t,e){var n,r=e.firstElementChild;return r?e.insertBefore(t,r):(n=t,It(e)(n)),t}),b(J)),Yt=(V=Ot(function(t,e){var n;return n=e,Zt(t)(n),t}),b(V),Ft(function(t){var e=Et(t);return e&&e.removeChild(t),t})),qt=(Ft(A("selectionStart")),Ft(A("selectionEnd")),Q=function(t,e){return t.selectionStart=t.selectionEnd=e,t},X=_(L,D)(Q),b(X),Ft(function(t){return t.submit(),t})),Wt=(tt=$t(function(t,e){return _t(kt(t.className),kt(e))}),b(tt)),jt=(et=$t(function(t,e){return t.className?Wt(t,e)||(t.className+=" "+e):t.className=e,t}),b(et),nt=$t(function(t,e){return e=(" "+t.className+" ").replace(" "+e+" "," ").replace(/^ | $/g,""),t.className!==e&&(t.className=e),t}),b(nt),rt=$t(function(t,e){return t.getAttribute(e)}),b(rt),k(Gt(function(t,e,n){return t.setAttribute(e,n),t}))),Jt=k(Gt(function(t,e,n){return t.style[e]=n,t})),Vt=(it=Ht(function(r,t){var e;return e=t,Kt(function(t,e){var n;return n=r,jt(e,t)(n)})(e),r}),b(it)),Xt=(ot=Ht(function(r,t){var e;return e=t,Kt(function(t,e){var n;return n=r,Jt(e,t)(n)})(e),r}),b(ot)),Qt=(at=$t(function(t,e){return t.innerHTML=e,t}),b(at)),te=(st=$t(function(t,e){var n;return n=t,Jt("display",e)(n)}),b(st)),ee=(te("none"),te("block"),te("inline-block"),A("offsetWidth")),ne=A("offsetHeight"),re=(Ft(function(t){return t.getBoundingClientRect()}),Ft(function(t){return t.firstChild}),T(Ct)),ie=re.matches||re.matchesSelector||re.webkitMatchesSelector||re.mozMatchesSelector||re.msMatchesSelector||re.oMatchesSelector,oe=(ct=$t(function(t,e){return ie.call(t,e)}),b(ct)),ae=function(e,r,i,o){return C(e,Ct)?console.error("use el |> _El.on(e, cb)"):function(n){var t=r;return R(i)?t=function(t){for(var e=t.target;!oe(e,i)&&e!==n;)e=Et(e);e!==n&&(t.delegateTarget=e,r(t))}:o=i,o=!!o,n.addEventListener(e,t,o),function(){return n.removeEventListener(e,t,o)}}},se=u.documentElement,ce=u.body,ue=l.innerHeight,le=l.pageYOffset,fe=l.scrollBy,de=l.scrollTo,he=l.requestAnimationFrame,pe=yt("querySelector",u),me=yt("querySelectorAll",u),ve=(yt("getElementById",u),yt("getComputedStyle",l),function(t){return R(t)?pe(t):t});function ge(t,e,n,r){if(n&&"get"===n.toLowerCase())t=I(t,e),r?l.open(t,r):l.location=t;else{var i,o,a,s,c,u={action:t,method:n};r&&(u.target=r),c=zt("form"),s=Vt(u)(c),a=Qt(ye(e))(s),o=It(se)(a),i=qt(o),Yt(i)}}function ye(t,n){if(K(t)){var r="";return Kt(t,function(t,e){n&&(e=n+"["+e+"]"),r+=ye(t,e)}),r}return'<input type="hidden" name="'+n+'" value="'+t+'">'}function be(t){!function(s){if(!l.requestAnimationFrame)return fe(0,s);ut&&o(ut),ut=r(function(){var r=le,i=c.min(r+s,ne(ce)-ue);s=i-r;var o=0,a=l.performance.now();he(function t(e){if(1<=(o+=(e-a)/300))return de(0,i);var n=c.sin(we*o/2);de(0,r+c.round(s*n)),a=e,he(t)})},100)}(t-le)}var ke,_e,Se,we=c.PI,De=y,Re=O("Network error"),Me=0;function Ne(t){if(!C(this,Ne))return new Ne(t);this.options=function(t){R(t)&&(t={url:t});var e=t,n=e.method,r=e.headers,i=e.callback,o=e.data;return r||(t.headers={}),n||(t.method="get"),i||(t.callback=gt),K(o)&&(o=H(o)),t.data=o,t}(t),this.defer()}((_e={setReq:function(t,e){return this.abort(),this.type=t,this.req=e,this},till:function(e){var n=this;return this.setReq("timeout",r(function(){n.call(function(t){e(t)?n.till(e):n.options.callback(t)})},3e3))},abort:function(){var t=this.req,e=this.type;t&&("ajax"===e?this.req.abort():"jsonp"===e?l.Razorpay[this.req]=gt:o(this.req),this.req=null)},defer:function(){var t=this;this.req=r(function(){return t.call()})},call:function(e){var t,n;void 0===e&&(e=this.options.callback);var r=this.options,i=r.url,o=r.method,a=r.data,s=r.headers,c=new De;this.setReq("ajax",c),c.open(o,i,!0),c.onreadystatechange=function(){if(4===c.readyState&&c.status){var t=At(c.responseText);t||((t=O("Parsing error")).xhr={status:c.status,text:c.responseText}),e(t)}},c.onerror=function(){var t=Re;t.xhr={status:0},e(t)},n=s,t=xt("X-Razorpay-SessionId",ke)(n),Kt(function(t,e){return c.setRequestHeader(e,t)})(t),c.send(a)}}).constructor=Ne).prototype=_e,Ne.post=function(t){return t.method="post",t.headers||(t.headers={}),t.headers["Content-type"]||(t.headers["Content-type"]="application/x-www-form-urlencoded"),Ne(t)},Ne.setSessionId=function(t){ke=t},Ne.jsonp=function(a){a.data||(a.data={});var s="jsonp"+Me++;a.data.callback="Razorpay."+s;var t=new Ne(a);return a=t.options,t.call=function(e){var t,n;void 0===e&&(e=a.callback);var r=!1,i=function(){r||this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState||(r=!0,this.onload=this.onreadystatechange=null,Yt(this))},o=l.Razorpay[s]=function(t){Lt(t,"http_status_code"),e(t),Lt(l.Razorpay,s)};this.setReq("jsonp",o),n=zt("script"),t=Bt({src:I(a.url,a.data),async:!0,onerror:function(t){return a.callback(Re)},onload:i,onreadystatechange:i})(n),It(se)(t)},t};var xe="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Le=(Se=xe,vt(function(t,e,n){return Nt(t,e,n)},{})(Se));function Ke(t){for(var e="";t;)e=xe[t%62]+e,t=F(t/62);return e}function Pe(){var t,n,r=Ke(a(z()-13885344e5)+wt("000000"+F(1e6*E()),-6))+Ke(F(238328*E()))+"0",i=0;return t=r,dt(function(t,e){n=Le[r[r.length-1-e]],(r.length-e)%2&&(n*=2),62<=n&&(n=n%62+1),i+=n})(t),(n=i%62)&&(n=xe[62-n]),St(r,0,13)+n}var Ae=Pe(),Be={library:"checkoutjs",platform:"browser",referer:g.href};function Te(t){var e,n={checkout_id:t?t.id:Ae};return e=["integration","referer","library","platform","platform_version","os","os_version","device"],dt(function(t){var e;return e=n,xt(t,Be[t])(e)})(e),n}var Ce,ze=[],Ee=function(t){return ze.push(t)},Fe=function(t){Ce=t},Oe=function(){var t,e,n,r,i;if(ze.length){var o=Rt(v,"sendBeacon"),a={url:"https://lumberjack.razorpay.com/v1/track",data:{key:"ZmY5N2M0YzVkN2JiYzkyMWM1ZmVmYWJk",data:(i={context:Ce,addons:[{name:"ua_parser",input_key:"user_agent",output_key:"user_agent_parsed"}],events:ze.splice(0,ze.length)},r=Pt(i),n=d(r),e=p(n),t=h(e),d(t))}};try{o?v.sendBeacon(a.url,Pt(a.data)):Ne.post(a)}catch(t){}}};function $e(l,f,d,h){l.isLiveMode()&&r(function(){d instanceof Error&&(d={message:d.message,stack:d.stack});var t=Te(l);t.user_agent=null,t.mode="live";var e=l.get("order_id");e&&(t.order_id=e);var i={},n={options:i,es6:!0};d&&(n.data=d);var r,o,a,s,c,u=["key","amount","prefill","theme","image","description","name","method","display_currency","display_amount","redirect","flashcheckout"];Kt(l.get(),function(t,e){var n=e.split("."),r=n[0];-1!==u.indexOf(r)&&(1<n.length?(u.hasOwnProperty(r)||(i[r]={}),i[r][n[1]]=t):i[e]=t)}),i.image&&G(i.image)&&(i.image="base64"),r=n,(c=l._payment)&&(c.payment_id&&(r.payment_id=c.payment_id),o=c,Mt("magicPossible")(o)&&(r.magic_possible=c.magicPossible),a=c,Mt("isMagicPayment")(a)&&(r.magic_attempted=c.isMagicPayment),s=c,Mt("magicCoproto")(s)&&(r.magic_coproto=c.magicCoproto)),Ae&&(n.local_order_id=Ae),Ee({event:f,properties:n,timestamp:z()}),Fe(t),h&&Oe()})}t(function(){Oe()},1e3),$e.parseAnalyticsData=function(t){var e;K(t)&&(e=t,Kt(function(t,e){Be[t]=e})(e))},$e.makeUid=Pe,$e.common=Te,$e.props=Be,$e.id=Ae,$e.updateUid=function(t){$e.id=Ae=t},$e.flush=Oe;var Ge,He={},Ie={setR:function(t){Ge=t},track:function(t,e){var n,r=void 0===e?{}:e,i=r.type,o=r.data,a=void 0===o?{}:o,s=r.r,c=void 0===s?Ge:s,u=r.immediately,l=void 0!==u&&u,f=(n=Tt(He),Kt(n,function(t,e){M(t)&&(n[e]=t.call())}),n);(a=K(a)?At(Pt(a)):{data:a}).meta&&K(a.meta)&&(f=Bt(f,a.meta)),a.meta=f,i&&(t=i+":"+t),$e(c,t,a,l)},setMeta:function(t,e){Nt(He,t,e)},removeMeta:function(t){Lt(He,t)},getMeta:function(){return e={},Kt(He,function(n,t){t.replace(/\[([^[\]]+)\]/g,".$1");var r=t.split("."),i=e;dt(r,function(t,e){e<r.length-1?(i[t]||(i[t]={}),i=i[t]):i[t]=n})}),e;var e}};function Ue(){return this._evts={},this._defs={},this}Ue.prototype={onNew:gt,def:function(t,e){this._defs[t]=e},on:function(t,e){if(R(t)&&M(e)){var n=this._evts;n[t]||(n[t]=[]),!1!==this.onNew(t,e)&&n[t].push(e)}return this},once:function(t,e){var n=e,r=this,i=function(){n.apply(r,arguments),r.off(t,i)};return e=i,this.on(t,e)},off:function(n,t){var e=arguments.length;if(!e)return Ue.call(this);var r=this._evts;if(2===e){var i=r[n];if(!M(t)||!x(i))return;if(i.splice(ht(i,t),1),i.length)return}return r[n]?delete r[n]:(n+=".",Kt(r,function(t,e){e.indexOf(n)||delete r[e]})),this},emit:function(t,e){var n=this;return dt(this._evts[t],function(t){try{t.call(n,e)}catch(t){console.error}}),this},emitter:function(){var t=this,e=arguments;return function(){t.emit.apply(t,e)}}};var Ze=v.userAgent;function Ye(t){return t.test(Ze)}Ye(/MSIE |Trident\//);var qe=Ye(/iPhone/),We=qe||Ye(/iPad/),je=Ye(/Android/),Je=(Ye(/Safari/),Ye(/; wv\) |Gecko\) Version\/[^ ]+ Chrome|Windows Phone|Opera Mini|UCBrowser|FBAN|CriOS/)||We||Ye(/Android 4/)),Ve=(Ye(/iPhone/),Ze.match(/Chrome\/(\d+)/));Ve&&(Ve=f(Ve[1],10)),je&&(Ve||Ye(/firefox/));var Xe={key:"",account_id:"",image:"",amount:100,currency:"INR",order_id:"",invoice_id:"",subscription_id:"",payment_link_id:"",notes:null,callback_url:"",redirect:!1,description:"",customer_id:"",recurring:null,signature:"",retry:!0,target:"",subscription_card_change:null,display_currency:"",display_amount:"",recurring_token:{max_amount:0,expire_by:0}};function Qe(t,e,n,r){var i=e[n=n.toLowerCase()],o=typeof i;"string"===o&&(D(r)||w(r))?r=a(r):"number"===o?r=s(r):"boolean"===o&&(R(r)?"true"===r||"1"===r?r=!0:"false"!==r&&"0"!==r||(r=!1):D(r)&&(r=!!r)),null!==i&&o!==typeof r||(t[n]=r)}function tn(t,r){var i={};return Kt(t,function(t,n){n in en?Kt(t,function(t,e){Qe(i,r,n+"."+e,t)}):Qe(i,r,n,t)}),i}var en={};function nn(n){Kt(Xe,function(t,n){K(t)&&!P(t)&&(en[n]=!0,Kt(t,function(t,e){Xe[n+"."+e]=t}),delete Xe[n])}),(n=tn(n,Xe)).callback_url&&Je&&(n.redirect=!0),this.get=function(t){return arguments.length?t in n?n[t]:Xe[t]:n},this.set=function(t,e){n[t]=e},this.unset=function(t){delete n[t]}}var rn=["AED","ALL","AMD","ARS","AUD","AWG","BBD","BDT","BMD","BND","BOB","BSD","BWP","BZD","CAD","CHF","CNY","COP","CRC","CUP","CZK","DKK","DOP","DZD","EGP","ETB","EUR","FJD","GBP","GIP","GMD","GTQ","GYD","HKD","HNL","HRK","HTG","HUF","IDR","ILS","INR","JMD","KES","KGS","KHR","KYD","KZT","LAK","LBP","LKR","LRD","LSL","MAD","MDL","MKD","MMK","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","PEN","PGK","PHP","PKR","QAR","RUB","SAR","SCR","SEK","SGD","SLL","SOS","SSP","SVC","SZL","THB","TTD","TZS","USD","UYU","UZS","YER","ZAR"],on={AED:"د.إ",AFN:"&#x60b;",ALL:"&#x6b;",AMD:"&#1423;",ANG:"ƒ",AOA:"Kz",ARS:"$",AUD:"A$",AWG:"ƒ",AZN:"ман",BAM:"KM",BBD:"Bds$",BDT:"&#x9f3;",BGN:"лв",BHD:"د.ب",BIF:"FBu",BMD:"BD$",BND:"B$",BOB:"Bs.",BRL:"R$",BSD:"B$",BTN:"Nu.",BWP:"P",BYR:"Br",BZD:"BZ$",CAD:"C$",CDF:"FC",CHF:"Fr",CLP:"$",CNY:"&#165;",COP:"$",CRC:"&#x20a1;",CUC:"&#x20b1;",CUP:"$",CVE:"Esc",CZK:"Kč",DJF:"Fdj",DKK:"Kr.",DOP:"RD$",DZD:"د.ج",EGP:"E&#163;",ERN:"Nfa",ETB:"Br",EUR:"&#8364;",FJD:"FJ$",FKP:"FK&#163;",GBP:"&#163;",GEL:"ლ",GHS:"&#x20b5;",GIP:"&#163;",GMD:"D",GNF:"FG",GTQ:"Q",GYD:"GY$",HKD:"HK$",HNL:"L",HRK:"Kn",HTG:"G",HUF:"Ft",IDR:"Rp",ILS:"&#x20aa;",INR:"₹",IQD:"ع.د",IRR:"&#xfdfc;",ISK:"Kr",JMD:"J$",JOD:"د.ا",JPY:"&#165;",KES:"KSh",KGS:"лв",KHR:"៛",KMF:"CF",KPW:"₩",KRW:"₩",KWD:"د.ك",KYD:"KY$",KZT:"&#x20b8;",LAK:"&#x20ad;",LBP:"L&#163;",LD:"ل.د",LKR:"Rs",LRD:"L$",LSL:"L",LTL:"Lt",LVL:"Ls",LYD:"ل.د",MAD:"د.م.",MDL:"L",MGA:"Ar",MKD:"ден",MMK:"K",MNT:"&#x20ae;",MOP:"P",MRO:"UM",MUR:"Ɍs",MVR:"Rf",MWK:"MK",MXN:"$",MYR:"RM",MZN:"MT",NAD:"N$",NGN:"&#x20a6;",NIO:"C$",NOK:"Kr",NPR:"NɌs",NZD:"NZ$",OMR:"ر.ع.",PAB:"B/.",PEN:"S/.",PGK:"K",PHP:"&#x20b1;",PKR:"Ɍs",PLN:"Zł",PYG:"&#x20b2;",QAR:"QAR",RON:"L",RSD:"Дин.",RUB:"руб",RWF:"RF",SAR:"ر.س",SBD:"SI$",SCR:"Ɍs",SDG:"&#163;Sd",SEK:"Kr",SFR:"Fr",SGD:"S$",SHP:"&#163;",SLL:"Le",SOS:"So. Sh.",SRD:"$",SSP:"&#163;",STD:"Db",SVC:"&#x20a1;",SYP:"S&#163;",SZL:"L",THB:"&#x0e3f;",TJS:"SM",TMT:"M",TND:"د.ت",TOP:"T$",TRY:"TL",TTD:"TT$",TWD:"NT$",TZS:"TSh",UAH:"&#x20b4;",UGX:"USh",USD:"$",UYU:"$U",UZS:"лв",VEF:"Bs",VND:"&#x20ab;",VUV:"VT",WST:"T",XAF:"CFA",XCD:"EC$",XOF:"CFA",XPF:"F",YER:"&#xfdfc;",ZAR:"R",ZMK:"ZK",ZWL:"Z$"},an=(vt(rn,function(t,e){return t[e]=on[e],t},{}),{api:"https://api.razorpay.com/",version:"v1/",frameApi:"/",cdn:"https://cdn.razorpay.com/"});try{Bt(an,l.Razorpay.config)}catch(t){}function sn(t){return void 0===t&&(t=""),an.api+an.version+t}var cn=["key","order_id","invoice_id","subscription_id","payment_link_id"];function un(e){if(!C(this,un))return new un(e);var n;Ue.call(this),this.id=$e.makeUid(),Ie.setR(this);try{n=function(t){t&&"object"==typeof t||$("Invalid options");var n,r,e=new nn(t);return r=(r=e).get(),Kt(hn,function(t,e){if(e in r){var n=t(r[e],r);n&&$("Invalid "+e+" ("+n+")")}}),n=e.get("notes"),Kt(n,function(t,e){R(t)?254<t.length&&(n[e]=t.slice(0,254)):D(t)||w(t)||delete n[e]}),e}(e),this.get=n.get,this.set=n.set}catch(t){var r=t.message;this.get&&this.isLiveMode()||K(e)&&!e.parent&&l.alert(r),$(r)}"rzp_live_ILgsfZCZoFIKMb"===n.get("key")&&!1!==e.flashcheckout&&n.set("flashcheckout",!0),n.get("flashcheckout")&&n.set("method.qr",!0),cn.every(function(t){return!n.get(t)})&&$("No key passed"),this.postInit()}var ln=un.prototype=new Ue;function fn(t,e){return Ne.jsonp({url:sn("preferences"),data:t,callback:e})}function dn(t){if(t){var n=t.get,r={},e=n("key");return e&&(r.key_id=e),dt(["order_id","customer_id","invoice_id","payment_link_id","subscription_id","recurring","subscription_card_change","account_id"],function(t){var e=n(t);e&&(r[t]=e)}),r}}ln.postInit=gt,ln.onNew=function(t,e){var n=this;"ready"===t&&(this.prefs?e(t,this.prefs):fn(dn(this),function(t){t.methods&&(n.prefs=t,n.methods=t.methods),e(n.prefs)}))},ln.emi_calculator=function(t,e){return un.emi.calculator(this.get("amount")/100,t,e)},un.emi={calculator:function(t,e,n){if(!n)return c.ceil(t/e);n/=1200;var r=c.pow(1+n,e);return f(t*n*r/(r-1),10)}},un.payment={getMethods:function(e){return fn({key_id:un.defaults.key},function(t){e(t.methods||t)})},getPrefs:function(e,n){return Ne({url:I(sn("preferences"),e),callback:function(t){if(t.xhr&&0===t.xhr.status)return fn(e,n);n(t)}})}},ln.isLiveMode=function(){var t=this.preferences;return!t&&/^rzp_l/.test(this.get("key"))||t&&"live"===t.mode};var hn={notes:function(t){if(K(t)&&15<B(Dt(t)))return"At most 15 notes are allowed"},amount:function(t,e){if((/[^0-9]/.test(n=t)||!(100<=(n=f(n,10))))&&!e.recurring)return"should be passed in integer paise. Minimum value is 100 paise, i.e. ₹ 1";var n},currency:function(t){if(!pt(rn,t))return"The provided currency is not currently supported"},display_currency:function(t){if(!(t in on)&&t!==un.defaults.display_currency)return"This display currency is not supported"},display_amount:function(t){if(!(t=a(t).replace(/([^0-9.])/g,""))&&t!==un.defaults.display_amount)return""}};un.configure=function(t){Kt(tn(t,Xe),function(t,e){typeof Xe[e]==typeof t&&(Xe[e]=t)})},un.defaults=Xe,l.Razorpay=un,Xe.timeout=0,Xe.name="",Xe.ecod=!1,Xe.flashcheckout=!1,Xe.remember_customer=!1,Xe.personalization=!1,Xe.method={netbanking:null,card:!0,cardless_emi:null,wallet:null,emi:!0,upi:!0,upi_intent:null,qr:!1},Xe.prefill={amount:"",wallet:"",provider:"",method:"",name:"",contact:"",email:"",vpa:"","card[number]":"","card[expiry]":"","card[cvv]":"",bank:"","bank_account[name]":"","bank_account[account_number]":"","bank_account[account_type]":"","bank_account[ifsc]":"",auth_type:""},Xe.features={cardsaving:!0},Xe.readonly={contact:!1,email:!1,name:!1},Xe.hidden={contact:!1,email:!1},Xe.modal={confirm_close:!1,ondismiss:gt,onhidden:gt,escape:!0,animation:!0,backdropclose:!1},Xe.external={wallets:[],handler:gt},Xe.theme={upi_only:!1,color:"",backdrop_color:"rgba(0,0,0,0.6)",image_padding:!0,image_frame:!0,close_button:!0,close_method_back:!1,hide_topbar:!1,branding:"",debit_card:!1};var pn,mn,vn,gn,yn=l,bn=yn.screen,kn=yn.scrollTo,_n=qe,Sn={overflow:"",metas:null,orientationchange:function(){Sn.resize.call(this),Sn.scroll.call(this)},resize:function(){var t=l.innerHeight||bn.height;Rn.container.style.position=t<450?"absolute":"fixed",this.el.style.height=c.max(t,460)+"px"},scroll:function(){if("number"==typeof l.pageYOffset)if(l.innerHeight<460){var t=460-l.innerHeight;l.pageYOffset>t+120&&be(t)}else this.isFocused||be(0)}};function wn(){return Sn.metas||(Sn.metas=me('head meta[name=viewport],head meta[name="theme-color"]')),Sn.metas}function Dn(t){try{Rn.backdrop.style.background=t}catch(t){}}function Rn(t){if(pn=u.body,mn=u.head,vn=pn.style,t)return this.getEl(t),this.openRzp(t);this.getEl(),this.time=z()}Rn.prototype={getEl:function(t){if(!this.el){var e,n={style:"opacity: 1; height: 100%; position: relative; background: none; display: block; border: 0 none transparent; margin: 0px; padding: 0px; z-index: 2;",allowtransparency:!0,frameborder:0,width:"100%",height:"100%",allowpaymentrequest:!0,src:function(t){var e=an.frame;if(!e){e=sn("checkout");var n=dn(t);n?e=I(e,n):e+="/public"}return e}(t),class:"razorpay-checkout-frame"};this.el=(e=zt("iframe"),Vt(n)(e))}return this.el},openRzp:function(t){var e,n=(e=this.el,Xt({width:"100%",height:"100%"})(e)),r=t.get("parent");r&&(r=ve(r));var i,o,a,s,c=r||Rn.container;(function(t,e){if(!gn)try{var n;(gn=u.createElement("div")).className="razorpay-loader";var r="margin:-25px 0 0 -25px;height:50px;width:50px;animation:rzp-rot 1s infinite linear;-webkit-animation:rzp-rot 1s infinite linear;border: 1px solid rgba(255, 255, 255, 0.2);border-top-color: rgba(255, 255, 255, 0.7);border-radius: 50%;";r+=e?"margin: 100px auto -150px;border: 1px solid rgba(0, 0, 0, 0.2);border-top-color: rgba(0, 0, 0, 0.7);":"position:absolute;left:50%;top:50%;",gn.setAttribute("style",r),n=gn,It(t)(n)}catch(t){}}(c,r),t!==this.rzp)&&(Et(n)!==c&&(s=c,Ut(n)(s)),this.rzp=t);r?(i=n,Jt("minHeight","530px")(i),this.embedded=!0):(a=c,o=Jt("display","block")(a),ee(o),Dn(t.get("theme.backdrop_color")),/^rzp_t/.test(t.get("key"))&&Rn.ribbon&&(Rn.ribbon.style.opacity=1),this.setMetaAndOverflow()),this.bind(),this.onload()},makeMessage:function(){var t=this.rzp,n=t.get(),e={integration:$e.props.integration,referer:g.href,options:n,id:t.id};return t.metadata&&(e.metadata=t.metadata),Kt(t.modal.options,function(t,e){n["modal."+e]=t}),this.embedded&&(delete n.parent,e.embedded=!0),function(t){var e=t.image;if(e&&R(e)){if(G(e))return;if(e.indexOf("http")){var n=g.protocol+"//"+g.hostname+(g.port?":"+g.port:""),r="";"/"!==e[0]&&"/"!==(r+=g.pathname.replace(/[^/]*$/g,""))[0]&&(r="/"+r),t.image=n+r+e}}}(n),e},close:function(){Dn(""),Rn.ribbon&&(Rn.ribbon.style.opacity=0),function(t){t&&dt(t,Yt);var e=wn();e&&dt(e,It(mn))}(this.$metas),vn.overflow=Sn.overflow,this.unbind(),_n&&kn(0,Sn.oldY),$e.flush()},bind:function(){var r=this;if(!this.listeners){this.listeners=[];var t={};_n&&(t.orientationchange=Sn.orientationchange,this.rzp.get("parent")||(t.resize=Sn.resize)),Kt(t,function(t,e){var n;r.listeners.push((n=window,ae(e,yt(t,r))(n)))})}},unbind:function(){this.listeners,dt(function(t){return t()}),this.listeners=null},setMetaAndOverflow:function(){var t,e;mn&&(dt(wn(),function(t){return Yt(t)}),this.$metas=[(t=zt("meta"),Vt({name:"viewport",content:"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"})(t)),(e=zt("meta"),Vt({name:"theme-color",content:this.rzp.get("theme.color")})(e))],dt(this.$metas,It(mn)),Sn.overflow=vn.overflow,vn.overflow="hidden",_n&&(Sn.oldY=l.pageYOffset,l.scrollTo(0,0),Sn.orientationchange.call(this)))},postMessage:function(t){t.id=this.rzp.id,t=Pt(t),this.el.contentWindow.postMessage(t,"*")},onmessage:function(t){var e=At(t.data);if(e){var n=e.event,r=this.rzp;t.origin&&"frame"===e.source&&t.source===this.el.contentWindow&&(e=e.data,this["on"+n](e),"dismiss"!==n&&"fault"!==n||Ie.track(n,{data:e,r:r,immediately:!0}))}},onload:function(){this.rzp&&this.postMessage(this.makeMessage())},onfocus:function(){this.isFocused=!0},onblur:function(){this.isFocused=!1,Sn.orientationchange.call(this)},onrender:function(){gn&&(Yt(gn),gn=null),this.rzp.emit("render")},onevent:function(t){this.rzp.emit(t.event,t.data)},onredirect:function(t){$e.flush(),function(t){if(!t.target&&l!==l.parent)return l.Razorpay.sendMessage({event:"redirect",data:t});ge(t.url,t.content,t.method,t.target)}(t)},onsubmit:function(e){$e.flush();var n=this.rzp;"wallet"===e.method&&dt(n.get("external.wallets"),function(t){if(t===e.wallet)try{n.get("external.handler").call(n,e)}catch(t){}}),n.emit("payment.submit",{method:e.method})},ondismiss:function(t){this.close();var e=this.rzp.get("modal.ondismiss");M&&r(function(){return e(t)})},onhidden:function(){$e.flush(),this.afterClose();var t=this.rzp.get("modal.onhidden");M(t)&&t()},oncomplete:function(t){this.close();var e=this.rzp,n=e.get("handler");Ie.track("checkout_success",{r:e,data:t,immediately:!0}),M(n)&&r(function(){n.call(e,t)},200)},onpaymenterror:function(t){$e.flush();try{this.rzp.emit("payment.error",t),this.rzp.emit("payment.failed",t)}catch(t){}},onfailure:function(t){this.ondismiss(),l.alert("Payment Failed.\n"+t.error.description),this.onhidden()},onfault:function(t){$e.flush(),this.rzp.close(),l.alert("Oops! Something went wrong.\n"+t),this.afterClose()},afterClose:function(){Rn.container.style.display="none"},onflush:function(t){$e.flush()}};var Mn,Nn=T(un);function xn(e){return function t(){return Mn?e.call(this):(r(yt(t,this),99),this)}}!function t(){(Mn=u.body||u.getElementsByTagName("body")[0])||r(t,99)}();var Ln,Kn=u.currentScript||(Ln=me("script"))[Ln.length-1];function Pn(t){var e,n,r,i;r=Et(Kn),n=Ut((i=zt(),Qt(ye(t))(i)))(r),e=Nt("onsubmit",gt)(n),qt(e)}var An,Bn,Tn=function(c){var t,e,n;e=Et(Kn),t=Ut((n=zt("input"),Bt({type:"submit",value:c.get("buttontext"),className:"razorpay-payment-button"})(n)))(e),Nt("onsubmit",function(t){t.preventDefault();var e,n=this.action,r=this.method,i=this.target,o=c.get();if(R(n)&&n&&!o.callback_url){var a={url:n,content:(e=this,vt(e.querySelectorAll("[name]"),function(t,e){return t[e.name]=e.value,t},{})),method:R(r)?r:"get",target:R(i)&&i};try{var s=h(Pt({request:a,options:Pt(o),back:g.href}));o.callback_url=sn("checkout/onyx")+"?data="+s}catch(t){}}return c.open(),!1})(t)};function Cn(){if(!An){var t,e,n,r;r=zt(),n=Nt("className","razorpay-container")(r),e=Nt("innerHTML","<style>@keyframes rzp-rot{to{transform: rotate(360deg);}}@-webkit-keyframes rzp-rot{to{-webkit-transform: rotate(360deg);}}</style>")(n),t=Xt({zIndex:1e9,position:"fixed",top:0,display:"none",left:0,height:"100%",width:"100%","-webkit-overflow-scrolling":"touch","-webkit-backface-visibility":"hidden","overflow-y":"visible"})(e),An=It(Mn)(t);var i=(d=Rn.container=An,m=zt(),p=Nt("className","razorpay-backdrop")(m),h=Xt({"min-height":"100%",transition:"0.3s ease-out",position:"fixed",top:0,left:0,width:"100%",height:"100%"})(p),It(d)(h)),o=(a=Rn.backdrop=i,l="rotate(45deg)",f="opacity 0.3s ease-in",u=zt("span"),c=Nt("innerHTML","Test Mode")(u),s=Xt({"text-decoration":"none",background:"#D64444",border:"1px dashed white",padding:"3px",opacity:"0","-webkit-transform":l,"-moz-transform":l,"-ms-transform":l,"-o-transform":l,transform:l,"-webkit-transition":f,"-moz-transition":f,transition:f,"font-family":"lato,ubuntu,helvetica,sans-serif",color:"white",position:"absolute",width:"200px","text-align":"center",right:"-50px",top:"50px"})(c),It(a)(s));Rn.ribbon=o}var a,s,c,u,l,f,d,h,p,m;return An}function zn(t){var e,n;return Bn?Bn.openRzp(t):(Bn=new Rn(t),e=l,ae("message",yt("onmessage",Bn))(e),n=An,Ut(Bn.el)(n)),Bn}un.open=function(t){return un(t).open()},Nn.postInit=function(){this.modal={options:{}},this.get("parent")&&this.open()};var En=Nn.onNew;Nn.onNew=function(t,e){"payment.error"===t&&$e(this,"event_paymenterror",g.href),M(En)&&En.call(this,t,e)},Nn.open=xn(function(){this.metadata||(this.metadata={}),this.metadata.openedAt=n.now();var t=this.checkoutFrame=zn(this);return $e(this,"open"),t.el.contentWindow||(t.close(),t.afterClose(),l.alert("This browser is not supported.\nPlease try payment in another browser.")),"-new.js"===Kn.src.slice(-7)&&$e(this,"oldscript",g.href),this}),Nn.close=function(){var t=this.checkoutFrame;t&&t.postMessage({event:"close"})};var Fn=xn(function(){Cn(),Bn=zn();try{!function(){var i={};Kt(Kn.attributes,function(t){var e=t.name.toLowerCase();if(/^data-/.test(e)){var n=i;e=e.replace(/^data-/,"");var r=t.value;"true"===r?r=!0:"false"===r&&(r=!1),/^notes\./.test(e)&&(i.notes||(i.notes={}),n=i.notes,e=e.replace(/^notes\./,"")),n[e]=r}});var t=i.key;if(t&&0<t.length){i.handler=Pn;var e=un(i);i.parent||Tn(e)}}()}catch(t){}});$e.props.library="checkoutjs",Xe.handler=function(t){if(C(this,un)){var e=this.get("callback_url");e&&ge(e,t,"post")}},Xe.buttontext="Pay Now",Xe.parent=null,hn.parent=function(t){if(!ve(t))return"parent provided for embedded mode doesn't exist"},Fn()}()}();
\ No newline at end of file
declare var process: { env: { [key: string]: string | undefined; } };
declare var RazorpayCheckout: any;
\ No newline at end of file
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="UTF-8">
<title>True Bus</title>
<meta name="viewport" content="viewport-fit=cover, width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
<meta name="format-detection" content="telephone=no">
<meta name="msapplication-tap-highlight" content="no">
<link rel="icon" type="image/x-icon" href="assets/icon/favicon.ico">
<link rel="manifest" href="manifest.json">
<meta name="theme-color" content="#4e8ef7">
<!-- add to homescreen for ios -->
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<!-- cordova.js required for cordova apps (remove if not needed) -->
<script src="cordova.js"></script>
<!-- un-comment this code to enable service worker
<script>
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('service-worker.js')
.then(() => console.log('service worker installed'))
.catch(err => console.error('Error', err));
}
</script>-->
<link href="build/main.css" rel="stylesheet">
</head>
<body>
<!-- Ionic's root component and where the app will load -->
<ion-app></ion-app>
<!-- The polyfills js is generated during the build process -->
<script src="build/polyfills.js"></script>
<!-- The vendor js is generated during the build process
It contains all of the dependencies in node_modules -->
<script src="build/vendor.js"></script>
<!-- The main bundle js is generated during the build process -->
<script src="build/main.js"></script>
</body>
\ No newline at end of file
{
"name": "Truebus",
"short_name": "Truebus",
"start_url": "index.html",
"display": "standalone",
"icons": [{
"src": "assets/imgs/logo.png",
"sizes": "512x512",
"type": "image/png"
}],
"background_color": "#4e8ef7",
"theme_color": "#4e8ef7"
}
\ No newline at end of file
export interface usercreds {
email: string;
password: string;
}
\ No newline at end of file
export class user{
device_id: string
dob: string
gender: string
id: number
image: string
mob: string
name: string
notification_ids: string
user_id: string
username: string
}
<ion-header>
<div class="nav_header">
<button class="nav_btn nav_back floatLeft" (click)="back()">
</button>
<div class="nav_header_title floatLeft">
AGENCY DETAILS
</div>
<div class="clear"></div>
</div>
</ion-header>
<ion-content class="theme_background">
<div class="agency_wrapper">
<div class="agency_banner">
<img src="assets/imgs/costal.png">
</div>
<div padding>
<h3>Micheal's Agencies</h3>
<p>Shop No. 10, Platform No. 1, Omni Bus, <br>
Terminus, Landmark: Omni Bus Stand</p>
<h5><img src="assets/imgs/call.png">8888 555 662 25</h5>
<h5><img src="assets/imgs/mesage.png">[email protected]</h5>
</div>
</div>
</ion-content>
import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { AgencyPage } from './agency';
@NgModule({
declarations: [
AgencyPage,
],
imports: [
IonicPageModule.forChild(AgencyPage),
],
})
export class AgencyPageModule {}
page-agency {
.agency_wrapper{
padding:0px;
.agency_banner{
text-align:center;
height:250px;
padding-top:20px;
padding-bottom:20px;
background-color:#fff;
border-bottom-left-radius:30px;
box-shadow: 0px 5px 19px -5px rgba(0, 0, 0, 0.2);
img{
height:100%;
}
}
p{
color:rgba(114, 114, 114,1);
padding:0px;
font-size: 16px;
font-weight: 400;
}
h3{
text-transform:uppercase;
padding-top: 15px;
}
h5{
margin:0px;
padding-top:5px;
padding-bottom:5px;
font-size:18px;
font-weight: 400;
img{
width: 30px;
position: relative;
top: 8px;
margin-right: 15px;
}
}
}
}
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
@IonicPage()
@Component({
selector: 'page-agency',
templateUrl: 'agency.html',
})
export class AgencyPage {
constructor(public navCtrl: NavController, public navParams: NavParams) {
}
ionViewDidLoad() {
console.log('ionViewDidLoad AgencyPage');
}
back(){
this.navCtrl.pop();
}
}
<ion-header class="">
<div class="nav_header">
<button class="nav_btn nav_back floatLeft" (click)="back()">
</button>
<div class="nav_header_title floatLeft">
Select arrival point
</div>
<div class="clear"></div>
</div>
<div class="nav_header ">
<div class="trip_bay " *ngIf="searchdata">
<ion-row>
<ion-col col-4 class="p0 ">
<p>{{searchdata.sourceName}}</p>
</ion-col>
<ion-col col-4 class="p0 ">
<p>
<ion-icon name="md-swap"></ion-icon>
</p>
</ion-col>
<ion-col col-4 class="p0 ">
<p>{{searchdata.destinationName}}</p>
</ion-col>
</ion-row>
</div>
</div>
</ion-header>
<ion-content padding class="theme_background">
<ion-list radio-group [(ngModel)]="dropping" *ngIf="dropping_array">
<ion-item *ngFor="let drop of dropping_array; let i=index ">
<ion-label>
<p class="floatLeft point_name">{{dropping_array[i].name}}</p>
<p class="floatRight point_time textRight">{{dropping_array[i].time }}</p>
<div class="clear"></div>
</ion-label>
<ion-radio value="{{drop.code}}" id="drop_id_{{drop.code}}" (click)="select_drop(drop.code,drop.name,drop.time)"></ion-radio>
</ion-item>
</ion-list>
<ion-item *ngIf="!dropping_array">
<ion-label style="text-align: center">No specific dropping points data availabe.You can proceed to booking</ion-label>
</ion-item>
</ion-content>
<ion-footer padding>
<button *ngIf="droppingflag" ion-button class="widthFull m0 done_btn floatRight" (click)="next()">
NEXT
</button>
<button *ngIf="!dropping_array" ion-button class="widthFull m0 done_btn floatRight" (click)="failure()">
NEXT
</button>
<div class="clear"></div>
</ion-footer>
\ No newline at end of file
import { ArrivalpointPage } from './arrivalpoint';
import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
@NgModule({
declarations: [
ArrivalpointPage
],
imports: [
IonicPageModule.forChild(ArrivalpointPage),
],
})
export class ArrivalpointPageModule {}
page-arrivalpoint {
.nav_header {
box-shadow: none !important;
}
.trip_bay {
width: 100%;
background-color: rgba(248, 247, 246, 1);
color: #fff;
p {
margin: 0px;
text-align: center;
padding: 10px;
font-weight: 300;
font-size: 18px;
color: #3a3a3a;
background-color: #fff;
ion-icon {
color: rgba(98, 56, 28, 1);
}
}
}
ion-list {
.item-radio-checked {
.item-inner {
border: 1px solid rgba(254, 142, 9, 1) !important;
border-bottom: 1px solid rgba(254, 142, 9, 1) !important;
.point_name {
color: #000;
font-weight: 500;
}
}
}
.item {
min-height: 35px;
margin-bottom: 15px;
.item-inner {
background-color: #fff;
border: 1px solid #dedede;
padding-left: 15px !important;
padding-right: 15px !important;
border-radius: 20px;
border-top-right-radius: 0px;
&:last-child {
border-bottom: 1px !important;
}
.label {
margin: 0px;
}
.radio {
margin: 0px;
margin-left: 15px;
.radio-icon {
border-color: rgba(213, 213, 213, 1)
}
.radio-checked {
border-color: rgba(254, 142, 9, 1);
.radio-inner {
background-color: rgba(254, 142, 9, 1);
}
}
}
}
}
}
.label {
color: #343434;
font-weight: 400;
p {
margin: 0px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.point_name {
width: calc(100% - 75px);
}
.point_time {
width: 75px;
}
}
.done_btn {
background-color: rgba(254, 142, 9, 1);
color: #fff;
border-radius: 20px;
border-bottom-right-radius: 0px;
font-weight: 400;
text-transform: capitalize;
position: relative;
top: 6px;
}
}
\ No newline at end of file
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams ,ModalController} from 'ionic-angular';
import { Myservice } from "./../../providers/services/myservice";
import { Storage } from '@ionic/storage';
/**
* Generated class for the ArrivalpointPage page.
*
* See https://ionicframework.com/docs/components/#navigation for more info on
* Ionic pages and navigation.
*/
@IonicPage()
@Component({
selector: 'page-arrivalpoint',
templateUrl: 'arrivalpoint.html',
})
export class ArrivalpointPage {
user:any;
droppingflag:boolean;
dropointcode:any;
selectedseats:any;
operatordata:any;
boardingpointcode:any;
searchdata:any;
result :any;
dropping_array:any;
brdPlace:any
constructor(public modalCtrl: ModalController,public navCtrl: NavController, public navParams: NavParams , public myservice:Myservice,public storage: Storage) {
//this.droppingflag = false;
this.brdPlace = this.navParams.get('brdPlacedata');
console.log('BOarddata' , this.brdPlace);
this.selectedseats = this.navParams.get('selectedseats');
this.searchdata = this.navParams.get('search');
console.log('Search data recieved in arrival page',this.searchdata);
this.result= this.navParams.get('data');
console.log('Result recieved in arrival page',this.result);
this.dropping_array=this.myservice.ObjArray(this.result.droppingPoints);
console.log('Dropping points array in arrival page',this.dropping_array);
this.boardingpointcode = this.navParams.get('boardingpointcode');
console.log('Boardingpoint code',this.boardingpointcode);
this.operatordata = this.navParams.get('operatordata');
console.log('Operatordata' , this.operatordata);
this.storage.get('user_data').then(data =>{
console.log(data);
if (data != null) {
console.log('User Logged in');
this.user = data.data;
console.log('User data' , this.user);
}
})
}
ionViewDidLoad(): void {
console.log('ionViewDidLoad ArrivalpointPage');
}
back() {
this.navCtrl.pop();
}
/***********************************Getting Arrival point code****************************************************************************/
select_drop(drop_code,drop_name,drop_time) {
this.result.drop_name = drop_name;
this.result.drop_code = drop_code;
this.result.drop_time = drop_time;
this.droppingflag = true;
}
/*************************************Passing Data into next page*********************************************************************** */
next() {
if (this.user != null)
{
console.log('Dropping result' , this.result);
this.navCtrl.push('PassengerdetailPage',{dropointname:this.result.drop_name, droplacedata:this.result , brdPlace:this.brdPlace,selectedseats:this.selectedseats,search:this.searchdata,boardingpointcode: this.boardingpointcode,droppingpointcode: this.result.drop_code , operatordata : this.operatordata}); //Pass values along with it
}
else{
this.myservice.presentToast('Sorry your are not logged into ticketrobo');
console.log("not logged")
let profileModal = this.modalCtrl.create("AuthcheckPage");
profileModal.onDidDismiss(data => {
this.user = data;
})
profileModal.present();
}
}
/********************************************If no dropping point data provided****************************************************************** */
failure() {
if (this.user != null)
{
this.navCtrl.push('PassengerdetailPage',{dropointname:'',droplacedata:this.result , brdPlace:this.brdPlace,selectedseats:this.selectedseats,search:this.searchdata,boardingpointcode: this.boardingpointcode,droppingpointcode: '0000' , operatordata : this.operatordata}); //Pass values along with it
}
else{
this.myservice.presentToast('Sorry your are not logged into ticketrobo');
console.log("not logged")
let profileModal = this.modalCtrl.create("AuthcheckPage");
profileModal.onDidDismiss(data => {
this.user = data;
})
profileModal.present();
}
}
}
<ion-content class="theme_background" *ngIf="log_status==0">
<div class="login_wrapper">
<div class="logo_section">
<img src="assets/imgs/logo.png">
</div>
<div class="login_form">
<h3 class="floatLeft">Log in to Continue</h3>
<div class="google floatRight" (click)="socialSignIn()">
<ion-icon name="logo-google"></ion-icon>
</div>
<div class="clear"></div>
<br>
<form [formGroup]="loginForm">
<ion-list>
<ion-item>
<ion-input formControlName="phone_no" type="email" placeholder="Email"></ion-input>
</ion-item>
<div class="alert error" *ngIf="loginForm.controls.phone_no.invalid && (loginForm.get('phone_no').dirty || loginForm.get('phone_no').touched)">
Invalid Email id
</div>
<div class="clear"></div>
<ion-item class="borderNone">
<ion-input formControlName="password" type="password" placeholder="{{'authcheck.Password' | translate}}"></ion-input>
</ion-item>
<div class="alert error" *ngIf="loginForm.controls.password.invalid && (loginForm.get('password').dirty || loginForm.get('password').touched)">
{{'authcheck.Minimum 6 characters required' | translate}}
</div>
<div class="clear"></div>
<div class="textRight">
<button ion-button class="login_btn" (click)="login()" [disabled]="loginForm.invalid">{{'authcheck.Login' | translate}}</button>
</div>
<div class="textRight">
<!-- <button ion-button class="social_btn fb_icon"><ion-icon name="logo-facebook" (click)="fb_login()"></ion-icon></button> -->
<p (click)="signup()">{{'authcheck.Add a new account' | translate}}</p>
<!-- <p (click)="forgot()">Forgot Password ?</p> -->
</div>
</ion-list>
</form>
</div>
</div>
</ion-content>
<ion-content class="theme_background" padding *ngIf="log_status==1">
<div class="login_wrapper">
<div class="login_form">
<h3 class="floatLeft">Register here<br> and Continue</h3>
<ion-list>
<form [formGroup]="signupForm">
<ion-item>
<ion-input type="text" placeholder="{{'signup.Name' | translate}}" formControlName="name"></ion-input>
</ion-item>
<ion-item>
<ion-input type="email" placeholder="{{'authcheck.Add a new account' | translate}}" formControlName="email_id"></ion-input>
</ion-item>
<div class="alert error" *ngIf="signupForm.controls.email_id.invalid && (signupForm.get('email_id').dirty || signupForm.get('email_id').touched)">
{{'authcheck.Invalid Email ID' | translate}}
</div>
<div class="clear"></div>
<ion-item>
<ion-input type="number" placeholder="{{'authcheck.Mobile Number' | translate}}" formControlName="phone_no" type="number"></ion-input>
</ion-item>
<div class="clear"></div>
<div class="alert error" *ngIf="signupForm.controls.phone_no.invalid && (signupForm.get('phone_no').dirty || signupForm.get('phone_no').touched)">
{{'authcheck.Enter a valid Mobile' | translate}}
</div>
<ion-item>
<ion-input type="password" placeholder="{{'authcheck.Password' | translate}}" formControlName="password" type="password"></ion-input>
</ion-item>
<div class="alert error" *ngIf="signupForm.controls.password.invalid && (signupForm.get('password').dirty || signupForm.get('password').touched)">
{{'authcheck.Minimum 6 characters' | translate}}
</div>
<div class="clear"></div>
<ion-item class="borderNone">
<ion-input type="password" placeholder="{{'authcheck.Confirm Password' | translate}}" formControlName="confirm" type="password"></ion-input>
</ion-item>
<div class="alert error" *ngIf="signupForm.controls.confirm.invalid && (signupForm.get('confirm').dirty || signupForm.get('confirm').touched)">
{{'authcheck.Password mismatches' | translate}}
</div>
<div class="clear"></div>
<br>
<div class="inside_check">
<ion-checkbox formControlName="terms"></ion-checkbox>
<ion-label>{{'authcheck.I accept Terms & Conditions' | translate}}</ion-label>
<div class="clear"></div>
<div class="alert error" *ngIf="signupForm.controls.terms.invalid && (signupForm.get('terms').dirty || signupForm.get('terms').touched)">
{{'authcheck.Please accept terms & conditions' | translate}}
</div>
<div class="clear"></div>
</div>
<div class="textRight">
<button ion-button class="login_btn" (click)="register()" [disabled]="signupForm.invalid">{{'authcheck.Signup' | translate}}</button>
</div>
<div class="textRight">
<p (click)="already()">{{'authcheck.Already had an account ?' | translate}}</p>
</div>
</form>
</ion-list>
</div>
</div>
</ion-content>
\ No newline at end of file
import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { AuthcheckPage } from './authcheck';
import { TranslateModule } from '@ngx-translate/core';
@NgModule({
declarations: [
AuthcheckPage,
],
imports: [
IonicPageModule.forChild(AuthcheckPage),
TranslateModule.forChild()
],
})
export class LoginPageModule {}
page-authcheck {
.login_wrapper {
width: 100%;
padding-top: 45px;
padding-left: 20px;
padding-right: 20px;
.logo_section {
text-align: center;
padding-bottom: 30px;
img {
width: 100px;
}
}
.login_form {
h3 {
margin: 0px;
padding: 20px;
font-weight: 600;
font-size: 25px;
text-transform: uppercase;
}
.google {
background-color: rgba(241, 67, 54, 1);
color: #fff;
width: 50px;
height: 45px;
text-align: center;
font-size: 23px;
padding: 9px;
border-radius: 20px;
border-bottom-right-radius: 0px;
}
.list {
.date {
background-image: url("../assets/imgs/calender.png");
background-position: center;
background-repeat: no-repeat;
background-size: 50px;
width: 50px;
height: 50px;
}
.item {
margin-bottom: 20px;
border: none !important;
box-shadow: none !important;
.item-inner {
border: none !important;
box-shadow: none !important;
.input-wrapper {
ion-datetime {
border: 1px solid rgba(213, 213, 213, 1);
border-radius: 30px;
border-bottom-right-radius: 0px;
min-width: 100%;
background-image: url("../assets/imgs/calender.png");
background-repeat: no-repeat;
background-size: 20px;
background-position: right 15px top 15px;
}
select {
border: 1px solid #d5d5d5;
border-radius: 30px;
border-bottom-right-radius: 0px;
padding-left: 20px !important;
width: 100%;
height: 45px;
-webkit-appearance: none;
-moz-appearance: none;
background-image: url("../assets/imgs/drop.png");
background-repeat: no-repeat;
background-position: right 10px top 5px;
background-size: 35px;
}
ion-input {
border: 1px solid rgba(213, 213, 213, 1);
border-radius: 30px;
background-color: #fff;
border-bottom-right-radius: 0px;
input {
height: 100%;
padding-left: 20px !important;
color: rgba(213, 213, 213, 1);
}
}
.dashed {
border: 1px dashed rgba(213, 213, 213, 1);
}
}
}
}
.login_btn {
background-color: rgba(254, 142, 9, 1);
color: #fff;
height: 45px;
font-size: 18px;
font-weight: 400;
border-radius: 30px;
background-position: 18px;
background-repeat: no-repeat;
background-size: 20px;
padding-left: 25px;
padding-right: 25px;
border-bottom-right-radius: 0px;
text-transform: capitalize;
font-weight: 300;
letter-spacing: 1px;
}
.inside_check {
padding-bottom: 10px;
.checkbox-icon {
width: 30px;
height: 30px;
border-radius: 50%;
border: none;
border: 2px solid rgba(254, 142, 9, 1);
}
.checkbox-checked {
background-color: rgba(254, 142, 9, 1);
}
.checkbox-inner {
left: 10px;
top: 7px;
}
ion-checkbox {
float: left;
}
ion-label {
float: left;
margin: 0px;
padding: 5px;
margin-left: 5px;
color: #000;
font-size: 16px;
a {
color: #000;
}
}
}
p {
color: rgba(254, 142, 9, 1);
font-size: 16px;
}
}
}
}
}
\ No newline at end of file
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams, Events, ViewController } from 'ionic-angular';
import { Validators, FormGroup, FormBuilder } from '@angular/forms'
import { Storage } from '@ionic/storage';
import { GooglePlus } from '@ionic-native/google-plus';
/*-------------Edited by Adarsh-----------------*/
import { Myservice } from "./../../providers/services/myservice";
import { user } from "../../models/mymodel";
// import { GooglePlus } from '@ionic-native/google-plus';
// import { Facebook, FacebookLoginResponse } from '@ionic-native/facebook';
import { TranslateModule } from '@ngx-translate/core';
@IonicPage()
@Component({
selector: 'page-authcheck',
templateUrl: 'authcheck.html',
})
export class AuthcheckPage {
local:user;
loginForm: FormGroup;
signupForm: FormGroup;
device_id: any;
log_status = 0;
constructor(
public navCtrl: NavController,
public navParams: NavParams,
private formBuilder: FormBuilder,
private myservice: Myservice,
public storage: Storage,
public events: Events,
// private googlePlus: GooglePlus,
// private fb: Facebook,
public viewCtrl: ViewController,
public translate: TranslateModule,
public googlePlus:GooglePlus,
) {
this.loginForm = this.formBuilder.group({
phone_no: ['', Validators.compose([Validators.required, Validators.pattern("[a-zA-Z0-9.-_]{1,}@[a-zA-Z.-]{2,}[.]{1}[a-zA-Z]{2,}")])],
password: ['', Validators.compose([Validators.required, Validators.minLength(6)])],
device_id:['']
})
this.signupForm = this.formBuilder.group({
name :[''],
phone_no: ['', Validators.compose([Validators.required, this.myservice.checkLimit(10000000, 999999999999999)])],
email_id: ['', Validators.compose([Validators.required, Validators.pattern("[a-zA-Z0-9.-_]{1,}@[a-zA-Z.-]{2,}[.]{1}[a-zA-Z]{2,}")])],
password: ['', Validators.compose([Validators.required, Validators.minLength(6)])],
confirm: ['', Validators.compose([Validators.required]), this.MatchPassword.bind(this)],
terms: [null, Validators.compose([Validators.required, Validators.pattern('true')])],
device_id:['']
})
this.device_id = '';
this.storage.get('get_deviceId').then(data => {
console.log("asdasdasdsad");
console.log(data);
if(data){
this.device_id = data.userId;
console.log(this.device_id.userId);
}
})
}
ionViewDidLoad() {
console.log('ionViewDidLoad LoginPage');
}
login() {
var obj = {"username":this.loginForm.value.phone_no,"password":this.loginForm.value.password,'device_id':this.device_id}
console.log('Username & Password',obj);
this.myservice.show_loader()
this.myservice.login_user('user_login',obj).subscribe(data => {
this.myservice.hide_loader();
console.log ('Responsedata',data);
console.log('Json data ',JSON.stringify(data))
if (data.status === 'success') {
this.myservice.presentToast('Login Successfully.Please wait while you are redirecting to searchbus')
console.log('response',data.status)
this.storage.set('user_data', data);
console.log('User data in storage', data)
this.events.publish('user:created', data, Date.now());
var This = this;
setTimeout(() => {
This.viewCtrl.dismiss(data);
//This.navCtrl.setRoot('HomePage')
}, 500);
} else {
this.myservice.presentToast("Invalid username and Password");
}
},err=>{
this.myservice.presentToast("Please contact your service team something wrong happend");
})
}
ionViewWillEnter() {
this.login();
}
socialSignIn(){
this.googlePlus.login({}).then(res => {
console.log(res);
var obj ={'email':res.email,'id':res.userId,'idToken':res.accessToken,'name':res.displayName,'provider': "google"}
this.myservice.show_loader();
this.myservice.online_service('social_login',obj).subscribe(responseData => {
this.myservice.hide_loader();
console.log(responseData)
if (responseData.status == 'success'){
this.myservice.presentToast('Login Successfully.Please wait while you are redirecting to searchbus');
this.storage.set('user_data', responseData);
this.events.publish('user:created', responseData, Date.now());
var This = this;
setTimeout(() => {
This.viewCtrl.dismiss(responseData);
// This.navCtrl.setRoot('HomePage');
}, 500);
}
else {
this.myservice.presentToast('Sorry, Login failed');
}
});
});
}
register() {
var obj = {"name":this.signupForm.value.name,"username":this.signupForm.value.email_id,"mob":this.signupForm.value.phone_no,"password":this.signupForm.value.password}
console.log("Entering value into server", obj);
this.signupForm.controls['device_id'].setValue(this.device_id);
this.myservice.show_loader()
this.myservice.online_service('user_signup',obj).subscribe(response => {
this.myservice.hide_loader();
console.log('Response',response);
if (response.status == 'success') {
console.log('Succesfuuly created') ;
this.events.publish('user:created', response, Date.now());
this.storage.set('user_data', response);
this.events.publish('user:created', response, Date.now());
this.viewCtrl.dismiss(response.user);
} else {
this.myservice.presentToast(response.message);
}
},err=>{
this.myservice.presentToast("Please contact your service team something wrong happend");
})
}
signup() {
this.log_status = 1;
}
already() {
this.log_status = 0;
}
// google_login() {
// this.googlePlus.login({})
// .then(res => {
// console.log(res);
// var post_data = {"social_id":res.userId,"email_id":res.email,"name":res.displayName,"device_id":this.device_id};
// this.myservice.web_post('social_login',post_data).subscribe(response=>{
// if (response.status == 'success'){
// this.storage.set('user_data', response.user);
// this.events.publish('user:created', response.user, Date.now());
// var This = this;
// setTimeout(() => {
// This.viewCtrl.dismiss(response.user);
// }, 500);
// } else {
// this.myservice.presentToast("Something wrong happend");
// }
// },err=>{
// this.myservice.presentToast("Please contact your service team something wrong happend");
// })
// }).catch(err => console.error(err));
// }
// fb_login() {
// this.fb.login(['public_profile', 'email'])
// .then(res => {
// if (res.status === "connected") {
// //this.isLoggedIn = true;
// this.getUserDetail(res.authResponse.userID);
// } else {
// //this.isLoggedIn = false;
// }
// })
// .catch(e => console.log('Error logging into Facebook', e));
// }
// getUserDetail(userid) {
// this.fb.api("/" + userid + "/?fields=id,email,name,picture,gender", ["public_profile"])
// .then(res => {
// console.log(res);
// var emails = '';
// //this.myservice.show_loader();
// if (res.email)
// emails = res.email;
// var post_data = {"social_id":res.id,"email_id":emails,"name":res.name,"device_id":this.device_id};
// this.myservice.web_post('social_login',post_data).subscribe(response=>{
// if (response.status == 'success'){
// this.storage.set('user_data', response.user);
// this.events.publish('user:created', response.user, Date.now());
// var This = this;
// setTimeout(() => {
// This.viewCtrl.dismiss(response.user);
// }, 500);
// } else {
// this.myservice.presentToast("Something wrong happend");
// }
// },err=>{
// this.myservice.presentToast("Please contact your service team something wrong happend");
// })
// })
// .catch(e => {
// console.log(e);
// });
// }
MatchPassword(val) {
return new Promise(resolve => {
if (val.value == this.signupForm.value.password) {
resolve(null);
}
else {
resolve({ 'match': false });
}
})
}
}
<ion-header [ngClass]="lang=='ar' ? 'ar' : ''">
<div class="nav_header">
<button class="nav_btn nav_back floatLeft" (click)="back()">
</button>
<div class="nav_header_title floatLeft">
{{'boarding.Select boarding point' | translate}}
</div>
<div class="clear"></div>
</div>
<div class="nav_header ">
<div class="trip_bay" *ngIf="searchdata">
<ion-row>
<ion-col col-4 class="p0 ">
<p>{{searchdata.sourceName}}</p>
</ion-col>
<ion-col col-4 class="p0 ">
<p>
<ion-icon name="md-swap"></ion-icon>
</p>
</ion-col>
<ion-col col-4 class="p0 ">
<p>{{searchdata.destinationName}}</p>
</ion-col>
</ion-row>
</div>
</div>
<div class="nav_header" *ngIf="result">
<div class="trip_bay ">
<ion-row>
<ion-col col-3 class="p0 ">
</ion-col>
<ion-col col-6 class="p0 ">
<p>{{searchdata.travelDate | date:'dd - MMMM - yyyy'}}</p>
</ion-col>
<ion-col col-3 class="p0 ">
</ion-col>
</ion-row>
</div>
</div>
</ion-header>
<ion-content padding [ngClass]="lang=='ar' ? 'ar' : ''" class="theme_background">
<ion-list radio-group [(ngModel)]="boarding" *ngIf="boarding_pointarray">
<ion-item *ngFor="let board of boarding_pointarray; let i=index ">
<ion-radio value="{{board.code}}" id="board_id_{{board.code}}" (click)="select_board(board.code,board.name,board.time)" class="floatLeft"></ion-radio>
<ion-label class="floatRight">
<p class="floatLeft point_name">{{boarding_pointarray[i].name}}</p>
<p class="floatRight textRight point_time">{{boarding_pointarray[i].time }}</p>
<div class="clear"></div>
</ion-label>
<div class="clear"></div>
</ion-item>
</ion-list>
<ion-item *ngIf="!boarding_pointarray">
<ion-label style="text-align: center" (click)="fault()">Oops!No Boarding points data availabe.Bot you</ion-label>
</ion-item>
</ion-content>
<ion-footer *ngIf="bookingflag" class="ar" padding>
<button ion-button class="widthFull m0 done_btn floatRight" (click)="next()">
{{'boarding.NEXT' | translate}}
</button>
<div class="clear"></div>
</ion-footer>
\ No newline at end of file
import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { BoardingpointPage } from './boardingpoint';
import { TranslateModule } from '@ngx-translate/core';
import { MyFilterPipe } from '../../providers/pipe/my-filter.pipe';
@NgModule({
declarations: [
BoardingpointPage,
MyFilterPipe
],
imports: [
IonicPageModule.forChild(BoardingpointPage),
TranslateModule.forChild()
],
})
export class BoardingpointPageModule { }
page-boardingpoint {
.nav_header {
box-shadow: none !important;
}
.trip_bay {
width: 100%;
background-color: rgba(248, 247, 246, 1);
color: #fff;
p {
margin: 0px;
text-align: center;
padding: 10px;
font-weight: 300;
font-size: 18px;
color: #3a3a3a;
background-color: #fff;
ion-icon {
color: rgba(98, 56, 28, 1);
}
}
}
ion-list {
.item-radio-checked {
.item-inner {
border-color: rgba(254, 142, 9, 1) !important;
.point_name {
color: #000;
font-weight: 500;
}
}
}
.item {
min-height: 35px;
margin-bottom: 15px;
.item-inner {
background-color: #fff;
padding-left: 15px !important;
padding-right: 15px !important;
border-radius: 20px;
border-top-right-radius: 0px;
border: 1px solid;
border-color: #dedede;
&:last-child {
border-bottom: 1px !important;
}
.label {
margin: 0px;
}
.radio {
margin: 0px;
margin-left: 15px;
.radio-icon {
border-color: rgba(213, 213, 213, 1)
}
.radio-checked {
border-color: rgba(254, 142, 9, 1);
.radio-inner {
background-color: rgba(254, 142, 9, 1);
}
}
}
}
}
}
.label {
color: #343434;
font-weight: 400;
p {
margin: 0px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.point_name {
width: calc(100% - 75px);
}
.point_time {
width: 75px;
}
}
.done_btn {
background-color: rgba(254, 142, 9, 1);
color: #fff;
border-radius: 20px;
border-bottom-right-radius: 0px;
font-weight: 400;
text-transform: capitalize;
position: relative;
top: 6px;
}
}
\ No newline at end of file
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams, Events } from 'ionic-angular';
import { Myservice } from "./../../providers/services/myservice";
import { Storage } from '@ionic/storage';
import { TranslateService } from '@ngx-translate/core';
@IonicPage()
@Component({
selector: 'page-boardingpoint',
templateUrl: 'boardingpoint.html',
})
export class BoardingpointPage {
selectedseats:any
operatorData:any;
searchTerm: string = '';
items: any;
searchdata:any;
boardingtime:any;
boarding_pointarray:any;
result:any;
lang:string = 'en';
bookingflag : boolean
constructor(public myservice:Myservice, public navCtrl: NavController, public navParams: NavParams, private translate: TranslateService, private events: Events, public storage: Storage) {
this.bookingflag = false;
this.operatorData = this.navParams.get('operatordata');
console.log('Operator Data' , this.operatorData);
this.selectedseats = this.navParams.get('selectedseats');
this.result = this.navParams.get('data');
this.searchdata= this.navParams.get('search');
console.log('Search data in boardingpoint page',this.searchdata);
this.boarding_pointarray = this.myservice.ObjArray(this.result.boardingPoints);
console.log('Boarding Point array',this.boarding_pointarray);
this.events.subscribe('user:lang', data => {
setTimeout(() => {
this.langTrans();
}, 500);
})
}
langTrans(){
this.storage.get('lang').then(lang => {
if (lang != null) {
this.translate.use(lang)
this.lang = lang;
}
else {
this.translate.use('en');
this.lang = 'en';
}
})
}
ionViewDidLoad() {
this.langTrans();
console.log('ionViewDidLoad BoardingpointPage');
}
back(){
this.navCtrl.pop();
}
fault() {
console.log('Boarding place' , this.result.brdPlace);
this.navCtrl.push("ArrivalpointPage",{brdPlacedata : this.result,selectedseats:this.selectedseats,data:this.result,search:this.searchdata , boardingpointcode:'0000' , operatordata:this.operatorData});
}
next() {
console.log('resultdata',this.result);
this.navCtrl.push("ArrivalpointPage",{brdPlacedata : this.result,selectedseats:this.selectedseats,data:this.result,search:this.searchdata , boardingpointcode:this.result.brdPoint , operatordata:this.operatorData});
}
/*---------------------------Selecting Boarding point ---------------------------------------------------------*/
select_board(board_id,board_place,board_time) {
this.bookingflag = true;
this.result.brdPlace = board_place;
this.result.brdPoint = board_id;
this.result.brdTime = board_time;
this.bookingflag = true;
console.log('Booking flag' , this.bookingflag);
}
onInput(event) {
console.log(event);
}
onCancel(event) {
console.log(event);
}
}
<!-- <ion-header class="">
<div class="nav_header">
<button class="nav_btn floatLeft" (click)="back()">
<ion-icon name="arrow-back"></ion-icon>
</button>
<div class="nav_header_title floatLeft textLeft">
Booking Summary
</div>
<div class="clear"></div>
</div>
</ion-header> -->
<ion-content>
<div class="success_div" *ngIf="booking_id">
<div class="logo">
<img src="../assets/imgs/tb-logo.png">
</div>
<p>{{'summery.Your payment is' | translate}} <br>{{'summery.Succesfull' | translate}}</p>
<h5>{{'summery.Booking ID' | translate}}: <strong>{{booking_id}}</strong></h5>
</div>
</ion-content>
<ion-footer>
<ion-row>
<ion-col col-6 class="p0" (click)="home()">
<button ion-button class="done_btn widthFull m0">{{'summery.HOME' | translate}}</button>
</ion-col>
<ion-col col-6 class="p0" (click)="trip()">
<button ion-button class="done_btn widthFull m0">{{'summery.MY TRIPS' | translate}}</button>
</ion-col>
</ion-row>
</ion-footer>
\ No newline at end of file
import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { BooksuccessPage } from './booksuccess';
import { TranslateModule } from '@ngx-translate/core';
@NgModule({
declarations: [
BooksuccessPage,
],
imports: [
IonicPageModule.forChild(BooksuccessPage),
TranslateModule.forChild()
],
})
export class BooksuccessPageModule {}
page-booksuccess {
.scroll-content {
align-content: center;
display: flex;
flex-direction: column;
justify-content: center;
text-align: center;
}
.success_div {
width: 100%;
.logo {
text-align: center;
margin: 0 auto;
img {
width: 150px;
}
}
p {
color: #45c40d;
text-align: center;
font-size: 25px;
}
h5 {
color: #a8a8a8;
text-align: center;
font-weight: 400;
}
}
.done_btn {
height: 50px;
border-radius: 0px;
font-size: 20px;
font-weight: 400;
letter-spacing: 2px;
}
}
\ No newline at end of file
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
import { Myservice } from "./../../providers/services/myservice";
@IonicPage()
@Component({
selector: 'page-booksuccess',
templateUrl: 'booksuccess.html',
})
export class BooksuccessPage {
booking_id:any;
constructor(public navCtrl: NavController, public navParams: NavParams, public myservice: Myservice) {
this.booking_id = this.navParams.get('booking_id');
console.log(this.booking_id);
}
ionViewDidLoad() {
console.log('ionViewDidLoad BooksuccessPage');
}
back() {
this.navCtrl.pop();
}
home() {
this.navCtrl.push("HomePage");
}
trip() {
this.navCtrl.push("TripPage");
}
}
<ion-header [ngClass]="lang=='ar' ? 'ar' : ''">
<div class="nav_header">
<!-- <button class="nav_btn floatLeft" (click)="back()">
<ion-icon name="arrow-back"></ion-icon>
</button> -->
<div class="nav_header_title floatLeft">
{{'booking.Booking Summary' | translate}}
</div>
<div class="clear"></div>
</div>
</ion-header>
<ion-content class="" [ngClass]="lang=='ar' ? 'ar' : ''">
<ion-card>
<ion-card-header>
{{'booking.Ticket Details' | translate}}
</ion-card-header>
<ion-card-content>
<ion-row *ngIf="result">
<ion-col col-6 class="textLeft">
<p class="bookingid"><strong>{{'booking.BOOKING ID' | translate}}:</strong><br>{{result.booking_id}}</p>
</ion-col>
<ion-col col-6 class="textRight">
<p class="green">{{'booking.BOOKING' | translate}}
<br>{{'booking.CONFIRMED SUCCESSFULLY' | translate}}</p>
</ion-col>
</ion-row>
</ion-card-content>
</ion-card>
<ion-card>
<ion-card-header>
{{'booking.Trip Details' | translate}}
</ion-card-header>
<ion-card-content *ngIf="result">
<ion-row>
<ion-col col-6>
<p><strong>{{'booking.BUS NAME' | translate}}</strong></p>
</ion-col>
<ion-col col-1>
<strong>:</strong>
</ion-col>
<ion-col col-5>
<p>{{result.bus_name}}</p>
</ion-col>
</ion-row>
<ion-row>
<ion-col col-6>
<p><strong>{{'booking.TYPE' | translate}}</strong></p>
</ion-col>
<ion-col col-1>
<strong>:</strong>
</ion-col>
<ion-col col-5>
<p>{{result.bus_type}}</p>
</ion-col>
</ion-row>
<ion-row>
<ion-col col-6>
<p><strong>{{'booking.DATE' | translate}}</strong></p>
</ion-col>
<ion-col col-1>
<strong>:</strong>
</ion-col>
<ion-col col-5>
<p>{{result.booking_date | date:'dd - MMMM - yyyy'}}</p>
</ion-col>
</ion-row>
<ion-row>
<ion-col col-6>
<p><strong>{{'booking.DEPARTURE PLACE & TIME' | translate}}</strong></p>
</ion-col>
<ion-col col-1>
<strong>:</strong>
</ion-col>
<ion-col col-5>
<p>{{result.brdPlace}} /{{result.brdTime}}</p>
</ion-col>
</ion-row>
<ion-row>
<ion-col col-6>
<p><strong>{{'booking.TOTAL AMOUNT' | translate}}</strong></p>
</ion-col>
<ion-col col-1>
<strong>:</strong>
</ion-col>
<ion-col col-5>
<p class="green">{{result.amount}}</p>
</ion-col>
</ion-row>
</ion-card-content>
</ion-card>
<ion-card>
<ion-card-header>
{{'booking.Customer Details' | translate}}
</ion-card-header>
<ion-card-content *ngIf="result">
<ion-row>
<ion-col col-6>
<p><strong>{{'booking.Name' | translate}}</strong></p>
</ion-col>
<ion-col col-2>
<p><strong>{{'booking.Age' | translate}}</strong></p>
</ion-col>
<ion-col col-4>
<p><strong>{{'booking.Gender' | translate}}</strong></p>
</ion-col>
</ion-row>
<ion-row *ngFor="let cust of result.customer">
<ion-col col-6>
<p>{{cust.name}}</p>
</ion-col>
<ion-col col-2>
<p>{{cust.age}}</p>
</ion-col>
<ion-col col-4>
<p>{{cust.gender}}</p>
</ion-col>
</ion-row>
</ion-card-content>
</ion-card>
</ion-content>
<ion-footer [ngClass]="lang=='ar' ? 'ar' : ''">
<button ion-button class="widthFull m0 done_btn" (click)="success()">
{{'booking.DONE' | translate}}
</button>
</ion-footer>
\ No newline at end of file
import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { BooksummaryPage } from './booksummary';
import { TranslateModule } from '@ngx-translate/core';
@NgModule({
declarations: [
BooksummaryPage,
],
imports: [
IonicPageModule.forChild(BooksummaryPage),
TranslateModule.forChild()
],
})
export class BooksummaryPageModule {}
page-booksummary {
.card {
border-radius: 10px;
.card-header {
background: #28328c;
color: #fff;
padding: 10px;
font-size: 20px;
font-weight: 300;
}
.card-content {
padding: 5px;
}
.checkbox {
margin-right: 15px !important;
}
.label {
color: #343434;
font-weight: 400;
}
}
.done_btn {
height: 50px;
border-radius: 0px;
font-size: 20px;
font-weight: 400;
letter-spacing: 2px;
}
.green {
color: #45c40d;
}
.bookingid {
color: #343434;
}
.done_btn {
height: 50px;
border-radius: 0px;
font-size: 20px;
font-weight: 400;
letter-spacing: 2px;
}
}
\ No newline at end of file
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams, Events } from 'ionic-angular';
import { Storage } from '@ionic/storage';
import { TranslateService } from '@ngx-translate/core';
@IonicPage()
@Component({
selector: 'page-booksummary',
templateUrl: 'booksummary.html',
})
export class BooksummaryPage {
result:any;
lang:string = 'en';
constructor(public navCtrl: NavController, public navParams: NavParams, public translate: TranslateService, public events: Events, public storage: Storage) {
this.result = this.navParams.get('data');
console.log(this.result);
this.events.subscribe('user:lang', data => {
setTimeout(() => {
this.langTrans();
}, 500);
})
}
ionViewDidLoad() {
this.langTrans();
console.log('ionViewDidLoad BooksummaryPage');
}
success() {
this.navCtrl.push("BooksuccessPage",{"booking_id":this.result.booking_id});
}
back() {
this.navCtrl.pop();
}
langTrans() {
this.storage.get('lang').then(lang => {
if (lang != null) {
this.translate.use(lang)
this.lang = lang;
}
else {
this.translate.use('en')
}
})
}
}
<ion-header>
<div class="nav_header">
<button class="nav_btn nav_menu floatLeft" menuToggle>
</button>
<div class="nav_header_title floatLeft">
CANCELLATION
</div>
<div class="clear"></div>
</div>
</ion-header>
<ion-content class="theme_background relative">
<div class="login_wrapper">
<div class="login_form">
<h3>cancel ticket</h3>
<form [formGroup]="cancelForm">
<ion-list>
<ion-item>
<ion-input type="text" placeholder="{{'cancel.Ticket Number' | translate}}" formControlName="booking_id">
</ion-input>
</ion-item>
<div class="er_req textCenter" *ngIf="cancelForm.controls.booking_id.invalid && (cancelForm.get('booking_id').dirty || cancelForm.get('booking_id').touched)">
{{'cancel.Invalid Booking Id' | translate}}
</div>
<ion-item class="borderNone">
<ion-input type="email" placeholder="{{'cancel.Email ID' | translate}}" formControlName="email">
</ion-input>
</ion-item>
<div class="er_req textCenter" *ngIf="cancelForm.controls.email.invalid && (cancelForm.get('email').dirty || cancelForm.get('email').touched)">
{{'cancel.Invalid email Id' | translate}}
</div>
<div class="textRight">
<button ion-button class="login_btn" (click)="cancel()" [disabled]="cancelForm.invalid">{{'cancel.Cancel ticket' | translate}}</button>
</div>
</ion-list>
</form>
</div>
</div>
</ion-content>
\ No newline at end of file
import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { CanceltripPage } from './canceltrip';
import { TranslateModule } from '@ngx-translate/core';
@NgModule({
declarations: [
CanceltripPage,
],
imports: [
IonicPageModule.forChild(CanceltripPage),
TranslateModule.forChild()
],
})
export class CanceltripPageModule {}
page-canceltrip {
.login_wrapper {
width: 100%;
padding-top: 45px;
padding-left: 20px;
padding-right: 20px;
.logo_section {
text-align: center;
padding-bottom: 30px;
img {
width: 160px;
}
}
.login_form {
h3 {
margin: 0px;
padding: 20px;
font-weight: 600;
font-size: 25px;
text-transform: uppercase;
}
.google {
background-color: rgba(241, 67, 54, 1);
color: #fff;
width: 50px;
height: 45px;
text-align: center;
font-size: 23px;
padding: 9px;
border-radius: 20px;
border-bottom-right-radius: 0px;
}
.list {
.date {
background-image: url("../assets/imgs/calender.png");
background-position: center;
background-repeat: no-repeat;
background-size: 50px;
width: 50px;
height: 50px;
}
.item {
margin-bottom: 20px;
border: none !important;
box-shadow: none !important;
.item-inner {
border: none !important;
box-shadow: none !important;
.input-wrapper {
ion-datetime {
border: 1px solid rgba(213, 213, 213, 1);
border-radius: 30px;
border-bottom-right-radius: 0px;
min-width: 100%;
background-image: url("../assets/imgs/calender.png");
background-repeat: no-repeat;
background-size: 20px;
background-position: right 15px top 15px;
}
select {
border: 1px solid #d5d5d5;
border-radius: 30px;
border-bottom-right-radius: 0px;
padding-left: 20px !important;
width: 100%;
height: 45px;
-webkit-appearance: none;
-moz-appearance: none;
background-image: url("../assets/imgs/drop.png");
background-repeat: no-repeat;
background-position: right 10px top 5px;
background-size: 35px;
}
ion-input {
border: 1px solid rgba(213, 213, 213, 1);
border-radius: 30px;
background-color: #fff;
border-bottom-right-radius: 0px;
input {
height: 100%;
padding-left: 20px !important;
color: rgba(213, 213, 213, 1);
}
}
.dashed {
border: 1px dashed rgba(213, 213, 213, 1);
}
}
}
}
.login_btn {
background-color: rgba(254, 142, 9, 1);
color: #fff;
height: 45px;
font-size: 18px;
font-weight: 400;
border-radius: 30px;
background-position: 18px;
background-repeat: no-repeat;
background-size: 20px;
padding-left: 25px;
padding-right: 25px;
border-bottom-right-radius: 0px;
text-transform: capitalize;
font-weight: 300;
letter-spacing: 1px;
}
p {
color: rgba(254, 142, 9, 1);
font-size: 16px;
padding-top: 15px;
span {
color: rgba(114, 114, 114, 1);
}
}
}
}
}
}
\ No newline at end of file
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams,AlertController } from 'ionic-angular';
/*-------------Edited by Adarsh-----------------*/
import { Validators, FormGroup, FormBuilder } from '@angular/forms'
import { Myservice } from "./../../providers/services/myservice";
import { Storage } from '@ionic/storage';
import { TranslateModule } from '@ngx-translate/core';
import { THIS_EXPR } from '@angular/compiler/src/output/output_ast';
@IonicPage()
@Component({
selector: 'page-canceltrip',
templateUrl: 'canceltrip.html',
})
export class CanceltripPage {
cancelForm: FormGroup;
user:any;
funcName
cancelResponse: any;
constructor(
public navCtrl: NavController,
public navParams: NavParams,
private formBuilder: FormBuilder,
private myservice: Myservice,
public storage: Storage,
public translate: TranslateModule,
public alertCtrl: AlertController
) {
this.cancelForm = this.formBuilder.group({
booking_id: ['', Validators.compose([Validators.required])],
email: ['', Validators.compose([Validators.required, Validators.pattern("[a-zA-Z0-9.-_]{1,}@[a-zA-Z.-]{2,}[.]{1}[a-zA-Z]{2,}")])],
user_id:['']
})
}
ionViewDidLoad() {
console.log('ionViewDidLoad CanceltripPage');
this.storage.get('user_data').then(data => {
console.log(data);
this.user = data.data;
console.log('User id', this.user.id)
})
}
cancel()
{
if(this.cancelForm.valid)
{
const confirm = this.alertCtrl.create({
title: 'Cancel Ticket',
message: 'Are you sure want to proceed?',
buttons: [
{
text: 'No',
handler: () => {
this.navCtrl.push('HomePage');
}
},
{
text: 'Yes',
handler: () => {
this.cancel_ticket();
}
}
]
});
confirm.present();
}
}
cancel_ticket() {
console.log('Cancel fui')
console.log('Cancel form values',this.cancelForm.value);
this.cancelForm.controls['user_id'].setValue(this.user.id);
console.log('ticketnumber' , );
var url =
{
'email': this.cancelForm.controls['email'].value,
'bookingID':this.bookrevReplace(this.cancelForm.controls['booking_id']).value ,
'userId': this.user.id,
'type': "user"
}
this.myservice.show_loader();
this.myservice.online_service('cancel_ticket',url).subscribe(response=> {
this.myservice.hide_loader();
if (response.status == 'success') {
this.cancelTicket(response.data);
} else {
this.myservice.presentToast("Your ticket can't cancel")
}
},err=> {
this.myservice.presentToast("Please contact your service team something wrong happend");
})
}
cancelTicket(data: any) {
const postData = data;
let url3 = 'cancel?username=javatest&password=123456';
var url = {'url': url3, 'data': 'data=' + JSON.stringify(postData)}
this.myservice.online_service('online_service',url).subscribe(response => {
const confirm_result = response;
console.log(confirm_result);
if (confirm_result.message === 'Success') {
this.funcName = 'confirmCancel';
const confirmData = {'bookingId': postData.bookingCode};
this.myservice.online_service(this.funcName, confirmData).subscribe(responseData => {
if ( responseData.status === 'success') {
let url3 = 'confirmcancel?username=javatest&password=123456';
var url={'url': url3, 'data': 'data=' + JSON.stringify(postData)}
this.myservice.online_service('online_service', url).subscribe(res => {
if (res.message === 'Success') {
this.myservice.show_alert('Success','Your ticket has been cancelled.');
}
else{
this.myservice.presentToast('Cancel Request failed.');
}
})
}
else {
this.myservice.presentToast('Cancel Request failed.')
}
})
}
else {
this.myservice.presentToast('Cancel Request failed.')
}
})
}
back() {
this.navCtrl.pop();
}
bookrevReplace(bookID: any) {
const str = bookID;
return str.replace(/^.{2}/g, 'TG');
}
}
<ion-header>
<div class="nav_header">
<button class="nav_btn nav_menu floatLeft" menuToggle>
</button>
<div class="nav_header_title floatLeft">
FORGOT PASSWORD
</div>
<div class="clear"></div>
</div>
</ion-header>
<ion-content class="theme_background">
<div class="login_wrapper">
<div class="logo_section">
<img src="assets/imgs/logo.png">
</div>
<div class="login_form">
<h3 class="floatLeft">{{'change.Change Password' | translate}}</h3>
<div class="clear"></div>
<form [formGroup]="changeForm">
<ion-list>
<ion-item>
<ion-input type="password" placeholder="{{'change.Old Password' | translate}}" formControlName="oldP"></ion-input>
</ion-item>
<div class="alert error" *ngIf="changeForm.controls.oldP.invalid && (changeForm.get('oldP').dirty || changeForm.get('oldP').touched)">
{{'change.Invalid Password' | translate}}
</div>
<ion-item>
<ion-input type="password" placeholder="{{'change.New Password' | translate}}" formControlName="newP"></ion-input>
</ion-item>
<div class="alert error" *ngIf="changeForm.controls.newP.invalid && (changeForm.get('newP').dirty || changeForm.get('newP').touched)">
{{'change.Invalid New Password' | translate}}
</div>
<ion-item class="borderNone">
<ion-input type="password" placeholder="{{'change.Confirm New Password' | translate}}" formControlName="confirm"></ion-input>
</ion-item>
<div class="alert error" *ngIf="changeForm.controls.confirm.invalid && (changeForm.get('confirm').dirty || changeForm.get('confirm').touched)">
{{'change.Password mismatches' | translate}}
</div>
<div class="textRight">
<button ion-button class="login_btn" (click)="change_pwd()" [disabled]="changeForm.invalid">{{'change.SAVE' | translate}}</button>
</div>
</ion-list>
</form>
</div>
</div>
</ion-content>
\ No newline at end of file
import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { ChangepassPage } from './changepass';
import { TranslateModule } from '@ngx-translate/core';
@NgModule({
declarations: [
ChangepassPage,
],
imports: [
IonicPageModule.forChild(ChangepassPage),
TranslateModule.forChild()
],
})
export class ChangepassPageModule {}
page-changepass {
.login_wrapper {
width: 100%;
padding-top: 45px;
padding-left: 20px;
padding-right: 20px;
.logo_section {
text-align: center;
padding-bottom: 30px;
img {
width: 130px;
}
}
.login_form {
h3 {
margin: 0px;
padding: 20px;
font-weight: 600;
font-size: 25px;
text-transform: uppercase;
}
.google {
background-color: rgba(241, 67, 54, 1);
color: #fff;
width: 50px;
height: 45px;
text-align: center;
font-size: 23px;
padding: 9px;
border-radius: 20px;
border-bottom-right-radius: 0px;
}
.list {
.date {
background-image: url("../assets/imgs/calender.png");
background-position: center;
background-repeat: no-repeat;
background-size: 50px;
width: 50px;
height: 50px;
}
.item {
margin-bottom: 20px;
border: none !important;
box-shadow: none !important;
.item-inner {
border: none !important;
box-shadow: none !important;
.input-wrapper {
ion-datetime {
border: 1px solid rgba(213, 213, 213, 1);
border-radius: 30px;
border-bottom-right-radius: 0px;
min-width: 100%;
background-image: url("../assets/imgs/calender.png");
background-repeat: no-repeat;
background-size: 20px;
background-position: right 15px top 15px;
}
select {
border: 1px solid #d5d5d5;
border-radius: 30px;
border-bottom-right-radius: 0px;
padding-left: 20px !important;
width: 100%;
height: 45px;
-webkit-appearance: none;
-moz-appearance: none;
background-image: url("../assets/imgs/drop.png");
background-repeat: no-repeat;
background-position: right 10px top 5px;
background-size: 35px;
}
ion-input {
border: 1px solid rgba(213, 213, 213, 1);
border-radius: 30px;
background-color: #fff;
border-bottom-right-radius: 0px;
input {
height: 100%;
padding-left: 20px !important;
color: rgba(213, 213, 213, 1);
}
}
.dashed {
border: 1px dashed rgba(213, 213, 213, 1);
}
}
}
}
.login_btn {
background-color: rgba(254, 142, 9, 1);
color: #fff;
height: 45px;
font-size: 18px;
font-weight: 400;
border-radius: 30px;
background-position: 18px;
background-repeat: no-repeat;
background-size: 20px;
padding-left: 25px;
padding-right: 25px;
border-bottom-right-radius: 0px;
}
.inside_check {
padding-bottom: 10px;
.checkbox-icon {
width: 30px;
height: 30px;
border-radius: 50%;
border: none;
border: 1px solid rgba(213, 213, 213, 1);
}
.checkbox-checked {
background-color: rgba(254, 142, 9, 1);
}
.checkbox-inner {
left: 12px;
top: 9px;
}
ion-checkbox {
float: left;
}
ion-label {
float: left;
margin: 0px;
padding: 5px;
margin-left: 5px;
color: #000;
font-size: 16px;
a {
color: #000;
}
}
}
p {
color: rgba(254, 142, 9, 1);
font-size: 16px;
}
}
}
}
}
\ No newline at end of file
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
/*-------------Edited by Adarsh-----------------*/
import { Validators, FormGroup, FormBuilder } from '@angular/forms'
import { Myservice } from "./../../providers/services/myservice";
import { Storage } from '@ionic/storage';
@IonicPage()
@Component({
selector: 'page-changepass',
templateUrl: 'changepass.html',
})
export class ChangepassPage {
changeForm: FormGroup;
user:any;
constructor(
public navCtrl: NavController,
public navParams: NavParams,
private formBuilder: FormBuilder,
private myservice: Myservice,
public storage: Storage
) {
this.changeForm = this.formBuilder.group({
oldP: ['', Validators.compose([Validators.required, Validators.minLength(6)])],
newP: ['', Validators.compose([Validators.required, Validators.minLength(6)])],
confirm: ['', Validators.compose([Validators.required]), this.MatchPassword.bind(this)],
id:['']
})
}
MatchPassword(val) {
return new Promise(resolve => {
if (val.value == this.changeForm.value.newP) {
resolve(null);
}
else {
resolve({ 'match': false });
}
})
}
samePassword(val){
return new Promise(resolve => {
if (val.value == this.changeForm.value.oldP) {
resolve({'match': false });
}
else {
resolve(null);
}
})
}
ionViewDidLoad() {
console.log('ionViewDidLoad ChangepassPage');
this.storage.get('user_data').then(data => {
this.user = data;
console.log('User data in change passowrd field',this.user);
console.log('User id' , this.user.data.id);
})
}
change_pwd(){
console.log(this.changeForm.value);
var data = {password:this.changeForm.controls['oldP'].value , newpassword: this.changeForm.controls['confirm'].value, userId:this.user.data.id, type: "user"}
this.myservice.show_loader();
this.myservice.online_service('password_update',data).subscribe(response=> {
this.myservice.hide_loader();
if (response.status == 'success')
{
var This = this;
setTimeout(() => {
This.navCtrl.setRoot('HomePage');
}, 500);
this.myservice.presentToast("Your password changed successfully");
this.changeForm.reset();
}
else{
this.myservice.presentToast(response.message);
}
},err=>{
this.myservice.presentToast("Please contact your service team something wrong happend");
})
}
back(){
this.navCtrl.pop();
}
}
<ion-header>
<div class="nav_header">
<button class="nav_btn nav_menu floatLeft" menuToggle>
</button>
<div class="nav_header_title floatLeft">
CONTACT
</div>
<div class="clear"></div>
</div>
</ion-header>
<ion-content class="theme_background">
<div class="contact_wrapper">
<div class="contact_tab">
<ion-segment [(ngModel)]="contact">
<ion-segment-button value="agency">
Agency
</ion-segment-button>
<ion-segment-button value="mongo">
MogoBus
</ion-segment-button>
</ion-segment>
</div>
<div [ngSwitch]="contact">
<div *ngSwitchCase="'agency'">
<ul>
<li (click)="agency()">
<div class="agency_photo">
<img src="assets/imgs/costal.png">
</div>
<div class="agency_detail">
<h5>CHEALS AGENCIES</h5>
</div>
<div class="clear"></div>
</li>
<li (click)="agency()">
<div class="agency_photo">
<img src="assets/imgs/costal.png">
</div>
<div class="agency_detail">
<h5>CHEALS AGENCIES</h5>
</div>
<div class="clear"></div>
</li>
<li (click)="agency()">
<div class="agency_photo">
<img src="assets/imgs/costal.png">
</div>
<div class="agency_detail">
<h5>CHEALS AGENCIES</h5>
</div>
<div class="clear"></div>
</li>
</ul>
</div>
<div *ngSwitchCase="'mongo'">
<div class="mogo_contact">
<img src="assets/imgs/logo.png">
<p>
1386 Cooper Rd, Cambridge, <br>
ON N1R 5S2, Africa
</p>
<h6>+0 8888 000 000</h6>
<h6>[email protected]</h6>
</div>
</div>
</div>
</div>
</ion-content>
\ No newline at end of file
import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { ContactPage } from './contact';
@NgModule({
declarations: [
ContactPage,
],
imports: [
IonicPageModule.forChild(ContactPage),
],
})
export class ContactPageModule {}
page-contact {
.nav_header {
box-shadow: none;
}
.contact_wrapper {
width: 100%;
.contact_tab {
box-shadow: 0px 5px 19px -5px rgba(0, 0, 0, 0.3);
.segment {
background: #fff;
.segment-button {
color: rgba(114, 114, 114, 1);
text-transform: capitalize;
font-size: 16px;
font-weight: 400;
border: none;
}
.segment-activated {
background: rgba(254, 142, 9, 1);
color: #fff;
}
}
}
.mogo_contact {
padding: 20px;
text-align: center;
padding-top: 50px;
img {
width: 160px;
padding-bottom: 30px;
}
p {
color: rgba(114, 114, 114, 1);
font-size: 18px;
}
h6 {
margin: 0px;
padding-bottom: 10px;
}
}
ul {
margin: 0px;
padding: 10px;
li {
list-style: none;
background-image: url("../assets/imgs/arrow_right.png");
background-repeat: no-repeat;
background-position: right;
background-size: 35px;
margin-bottom: 20px;
.agency_photo {
float: left;
width: 60px;
height: 60px;
background-color: #fff;
border-radius: 50%;
img {
width: 100%;
height: 100%;
border-radius: 50%;
}
}
.agency_detail {
float: left;
width: calc(100% - 60px);
padding: 20px;
padding-left: 30px;
h5 {
margin: 0px;
color: #000;
font-weight: 400;
}
}
}
}
}
.align {
padding-top: 73px;
}
.card {
border-radius: 10px;
.card-header {
background: #4f5cd5;
color: #fff;
padding: 10px;
font-size: 20px;
font-weight: 300;
}
.checkbox {
margin-right: 15px !important;
}
.label {
font-weight: 600;
font-size: 16px;
}
.text-input {
width: 100%;
height: 35px !important;
border-bottom: 1px solid #c7c7c7;
}
.details {
font-size: 15px;
color: wheat;
}
}
.done_btn {
height: 50px;
border-radius: 0px;
font-size: 20px;
font-weight: 400;
letter-spacing: 2px;
left: 0px;
right: 0px;
bottom: 0px;
background-image: linear-gradient(to right, #28328c, #4f5cd5);
}
.amount {
font-weight: 600;
font-size: 16px;
color: red;
}
}
\ No newline at end of file
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
/**
* Generated class for the ContactPage page.
*
* See https://ionicframework.com/docs/components/#navigation for more info on
* Ionic pages and navigation.
*/
@IonicPage()
@Component({
selector: 'page-contact',
templateUrl: 'contact.html',
})
export class ContactPage {
contact: string = "agency";
constructor(public navCtrl: NavController, public navParams: NavParams) {
}
ionViewDidLoad() {
console.log('ionViewDidLoad ContactPage');
}
agency(){
this.navCtrl.push("AgencyPage");
}
}
<ion-header [ngClass]="lang=='ar' ? 'ar' : ''">
<div class="nav_header">
<button class="nav_btn nav_back floatLeft" (click)="back()">
</button>
<div class="nav_header_title floatLeft">
{{'passanger.Passenger details' | translate}}
</div>
<div class="clear"></div>
</div>
</ion-header>
<ion-content class="theme_background" [ngClass]="lang=='ar' ? 'ar' : ''">
<form [formGroup]="customerForm" (ngSubmit)="book_customer(customerForm.value)">
<ion-card>
<ion-card-header>
Contact details
<ion-label class="details">Your ticket will be sent to these details</ion-label>
</ion-card-header>
<ion-card-content>
<ion-item>
<ion-label color="primary" stacked>Email</ion-label>
<ion-input type="email" formControlName="email" placeholder="Email"></ion-input>
</ion-item>
<ion-item>
<ion-label color="primary" stacked>Mobile Number</ion-label>
<ion-input type="number" formControlName="mobnumber" placeholder="Mobile Number"></ion-input> -->
</ion-item>
</ion-card-content>
</ion-card>
<ion-card formArrayName="customer" *ngFor="let child of customerForm.get('customer').controls; let i = index">
<ion-card-header>
{{'passanger.Passenger detail' | translate}}
</ion-card-header>
<ion-card-content [formGroupName]="i">
<br>
<ion-label color="primary" stacked>Seat Number:{{selectedseats[i].seatNumber}} </ion-label>
<ion-item>
<ion-input type="hidden" formControlName="seatNumber" [value]="selectedseats[i].seatNumber"></ion-input>
</ion-item>
<ion-item>
<ion-label color="dark" stacked>{{'passanger.Name of the Passenger' | translate}}</ion-label>
<ion-input type="text" formControlName="name" placeholder="{{'Passenger Name' | translate}}"></ion-input>
</ion-item>
<ion-item>
<ion-label color="dark" stacked>{{'passanger.Age' | translate}}</ion-label>
<ion-input type="number" formControlName="age" placeholder="{{'Passenger Age' | translate}}"></ion-input>
</ion-item>
<ion-row radio-group formControlName="gender">
<ion-col col-6>
<ion-label>{{'passanger.Male' | translate}}</ion-label>
<ion-radio value="Male" *ngIf="getGender_state(i,'F')"></ion-radio>
</ion-col>
<ion-col col-6>
<ion-label>{{'passanger.Female' | translate}}</ion-label>
<ion-radio value="Female" *ngIf="getGender_state(i,'M')"></ion-radio>
</ion-col>
</ion-row>
</ion-card-content>
</ion-card>
<!--------------------Added by Kevin , faredeatils------------------------>
<ion-card>
<ion-card-header>
Fare details
</ion-card-header>
<ion-card-content>
<p style="font-size: 14px;font-weight:600;"><a (click)="agree_terms()">Click Here to apply Promocode</a></p>
<ion-row>
<ion-col col>
<ion-label color="primary" stacked>Base price</ion-label>
</ion-col>
<ion-col col class="firstcol">
:
</ion-col>
<ion-col col class="textRight">
<strong>₹{{bookFare.sum}}</strong>
</ion-col>
</ion-row>
<ion-row>
<ion-col col size="4">
<ion-label color="primary" stacked>Service Tax</ion-label>
</ion-col>
<ion-col col size="4">
:
</ion-col>
<ion-col col size="4" class="textRight">
<strong>₹{{bookFare.ServiceTax}}</strong>
</ion-col>
</ion-row>
<ion-row>
<ion-col col>
<ion-label color="primary" stacked>Transaction fee</ion-label>
</ion-col>
<ion-col col>: </ion-col>
<ion-col col class="textRight">
<strong>{{bookFare.trasactionfee}}</strong>
</ion-col>
</ion-row>
<ion-row>
<ion-col col>
<ion-label color="primary" stacked>Discount</ion-label>
</ion-col>
<ion-col col>: </ion-col>
<ion-col col class="textRight">
<strong>₹{{passfare.discount}}</strong>
</ion-col>
</ion-row>
<ion-row>
<ion-col col>
<ion-label color="danger" stacked>Total</ion-label>
</ion-col>
<ion-col col>
:
</ion-col>
<ion-col col class="textRight">
<strong>₹{{passfare.total}}</strong>
</ion-col>
</ion-row>
</ion-card-content>
</ion-card>
<br>
<button ion-button class="widthFull m0 done_btn">
PROCEED TO PAYMENT
</button>
</form>
</ion-content>
<ion-footer>
</ion-footer>
\ No newline at end of file
import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { DummyPage } from './dummy';
@NgModule({
declarations: [
DummyPage,
],
imports: [
IonicPageModule.forChild(DummyPage),
],
})
export class DummyPageModule {}
page-dummy {
.passenger_detail {
width: 100%;
padding: 20px;
.passenger_header {
padding-bottom: 20px;
padding-top: 20px;
h5 {
color: rgba(98, 56, 28, 1);
margin: 0px;
padding: 0px;
font-size: 16px;
font-weight: 600;
strong {
color: rgba(254, 142, 9, 1);
}
}
h6 {
margin: 0px;
padding: 0px;
font-size: 16px;
font-weight: 400;
color: #000;
strong {
margin-right: 5px;
}
}
p {
color: rgba(114, 114, 114, 1);
padding-top: 5px;
padding-bottom: 5px;
margin: 0px;
}
}
.fare_details {
width: 100%;
.row {
padding-bottom: 20px;
}
p {
margin: 0px;
color: rgba(114, 114, 114, 1);
font-size: 16px;
strong {
color: #000;
}
}
.login_btn {
background-color: rgba(254, 142, 9, 1);
color: #fff;
height: 45px;
font-size: 18px;
font-weight: 400;
border-radius: 30px;
background-position: 18px;
background-repeat: no-repeat;
background-size: 20px;
padding-left: 25px;
padding-right: 25px;
border-bottom-right-radius: 0px;
text-transform: capitalize;
font-weight: 300;
letter-spacing: 1px;
width: 100%;
}
}
.list {
margin: 0px;
.date {
background-image: url("../assets/imgs/calender.png");
background-position: center;
background-repeat: no-repeat;
background-size: 50px;
width: 50px;
height: 50px;
}
.item {
margin-bottom: 20px;
border: none !important;
box-shadow: none !important;
.item-inner {
border: none !important;
box-shadow: none !important;
.input-wrapper {
.add {
background-image: url("../assets/imgs/add.png");
background-repeat: no-repeat;
background-size: 28px;
background-position: right 10px top 10px;
}
ion-label {
margin: 0px;
}
ion-datetime {
border: 1px solid rgba(213, 213, 213, 1);
border-radius: 30px;
border-bottom-right-radius: 0px;
min-width: 100%;
background-image: url("../assets/imgs/calender.png");
background-repeat: no-repeat;
background-size: 20px;
background-position: right 15px top 15px;
}
select {
border: 1px solid #d5d5d5;
border-radius: 30px;
border-bottom-right-radius: 0px;
padding-left: 20px !important;
width: 100%;
height: 45px;
-webkit-appearance: none;
-moz-appearance: none;
background-image: url("../assets/imgs/drop.png");
background-repeat: no-repeat;
background-position: right 10px top 5px;
background-size: 35px;
}
ion-input {
border: 1px solid rgba(213, 213, 213, 1);
border-radius: 30px;
background-color: #fff;
border-bottom-right-radius: 0px;
input {
height: 100%;
padding-left: 25px !important;
color: rgba(213, 213, 213, 1);
&::placeholder {
color: #000;
}
}
}
.dashed {
border: 1px dashed rgba(213, 213, 213, 1);
}
}
}
}
p {
color: rgba(254, 142, 9, 1);
font-size: 16px;
padding-top: 15px;
span {
color: rgba(114, 114, 114, 1);
}
}
}
}
}
\ No newline at end of file
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
/**
* Generated class for the DummyPage page.
*
* See https://ionicframework.com/docs/components/#navigation for more info on
* Ionic pages and navigation.
*/
@IonicPage()
@Component({
selector: 'page-dummy',
templateUrl: 'dummy.html',
})
export class DummyPage {
constructor(public navCtrl: NavController, public navParams: NavParams) {
}
ionViewDidLoad() {
console.log('ionViewDidLoad DummyPage');
}
}
<ion-header>
<div class="nav_header">
<button class="nav_btn nav_back floatLeft" (click)="back()">
</button>
<div class="nav_header_title floatLeft">
Edit Profile
</div>
<div class="clear"></div>
</div>
</ion-header>
<ion-content class="theme_background">
<div class="editprofile_wrapper">
<div class="edit_photo">
<div class="edit_icon"></div>
</div>
<ion-list>
<ion-item>
<ion-input type="text" placeholder="John Doe">
</ion-input>
</ion-item>
<ion-item>
<ion-input type="mail" placeholder="[email protected]">
</ion-input>
</ion-item>
<ion-item>
<ion-input type="number" placeholder="+00 1503658 25">
</ion-input>
</ion-item>
<div class="textRight">
<button class="login_btn">
Submit</button>
</div>
<div class="clear"></div>
</ion-list>
</div>
</ion-content>
\ No newline at end of file
import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { EditprofilePage } from './editprofile';
@NgModule({
declarations: [
EditprofilePage,
],
imports: [
IonicPageModule.forChild(EditprofilePage),
],
})
export class EditprofilePageModule {}
page-editprofile {
.editprofile_wrapper {
padding: 20px;
width: 100%;
.edit_photo {
width: 150px;
height: 150px;
background: #e7e7e7;
border-radius: 50%;
margin: 0 auto;
margin-bottom: 40px;
position: relative;
.edit_icon {
width: 30px;
height: 30px;
background-image: url("/assets/imgs/editpic.png");
background-position: center;
background-repeat: no-repeat;
background-size: cover;
position: absolute;
bottom: 10px;
right: 10px;
}
img {
width: 100%;
height: 100%;
border-radius: 50%;
object-fit: cover;
object-position: center;
}
}
.list {
.date {
background-image: url("/assets/imgs/calender.png");
background-position: center;
background-repeat: no-repeat;
background-size: 50px;
width: 50px;
height: 50px;
}
.item {
margin-bottom: 20px;
border: none !important;
box-shadow: none !important;
.item-inner {
border: none !important;
box-shadow: none !important;
.input-wrapper {
ion-datetime {
border: 1px solid rgba(213, 213, 213, 1);
border-radius: 30px;
border-bottom-right-radius: 0px;
min-width: 100%;
background-image: url("/assets/imgs/calender.png");
background-repeat: no-repeat;
background-size: 20px;
background-position: right 15px top 15px;
}
select {
border: 1px solid #d5d5d5;
border-radius: 30px;
border-bottom-right-radius: 0px;
padding-left: 20px !important;
width: 100%;
height: 45px;
-webkit-appearance: none;
-moz-appearance: none;
background-image: url("/assets/imgs/drop.png");
background-repeat: no-repeat;
background-position: right 10px top 5px;
background-size: 35px;
}
ion-input {
border: 1px solid rgba(213, 213, 213, 1);
border-radius: 30px;
background-color: #fff;
border-bottom-right-radius: 0px;
input {
height: 100%;
padding-left: 20px !important;
color: rgba(213, 213, 213, 1);
}
}
.dashed {
border: 1px dashed rgba(213, 213, 213, 1);
}
}
}
}
.login_btn {
background-color: rgba(254, 142, 9, 1);
color: #fff;
height: 45px;
font-size: 18px;
font-weight: 400;
border-radius: 30px;
background-position: 18px;
background-repeat: no-repeat;
background-size: 20px;
padding-left: 25px;
padding-right: 25px;
border-bottom-right-radius: 0px;
text-transform: capitalize;
font-weight: 300;
letter-spacing: 1px;
}
p {
color: rgba(254, 142, 9, 1);
font-size: 16px;
padding-top: 15px;
span {
color: rgba(114, 114, 114, 1);
}
}
}
}
}
\ No newline at end of file
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
@IonicPage()
@Component({
selector: 'page-editprofile',
templateUrl: 'editprofile.html',
})
export class EditprofilePage {
constructor(public navCtrl: NavController, public navParams: NavParams) {
}
ionViewDidLoad() {
console.log('ionViewDidLoad EditprofilePage');
}
back(){
this.navCtrl.pop();
}
}
<!--
Generated template for the ErrorPage page.
See http://ionicframework.com/docs/components/#navigation for more info on
Ionic pages and navigation.
-->
<ion-header>
<ion-navbar>
<ion-title>{{'others.ErrorPage' | translate}}</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
</ion-content>
import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { ErrorPage } from './error';
import { TranslateModule } from '@ngx-translate/core';
@NgModule({
declarations: [
ErrorPage,
],
imports: [
IonicPageModule.forChild(ErrorPage),
TranslateModule.forChild()
],
})
export class ErrorPageModule {}
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
import { TranslateModule } from '@ngx-translate/core';
/**
* Generated class for the ErrorPage page.
*
* See https://ionicframework.com/docs/components/#navigation for more info on
* Ionic pages and navigation.
*/
@IonicPage()
@Component({
selector: 'page-error',
templateUrl: 'error.html',
})
export class ErrorPage {
constructor(public navCtrl: NavController, public navParams: NavParams, public translate: TranslateModule) {
}
ionViewDidLoad() {
console.log('ionViewDidLoad ErrorPage');
}
}
<ion-content class="custom_modal_wrapper" *ngIf="response" [ngClass]="lang=='ar' ? 'ar' : ''">
<div class="filter_wrapper">
<div class="filter_header">
<h4 class="floatLeft">Filter</h4>
<div class="reset_btn floatRight">Reset</div>
<div class="clear"></div>
</div>
<div class="filter_content">
<h5 data-target="#filter1">
{{'filter.BUS TYPE' | translate}}
</h5>
<ul *ngIf="filter_type">
<li>
<ion-checkbox (ionChange)="choose_type('type','A/C',$event)" class="floatLeft"></ion-checkbox>
<ion-label class="floatLeft m0">A/C</ion-label>
<div class="clear"></div>
</li>
<li>
<ion-checkbox (ionChange)="choose_type('type','Non A/C',$event)" class="floatLeft"></ion-checkbox>
<ion-label class="floatLeft m0">Non A/C</ion-label>
<div class="clear"></div>
</li>
<li>
<ion-checkbox (ionChange)="choose_type('type','Semi Sleeper',$event)" class="floatLeft"></ion-checkbox>
<ion-label class="floatLeft m0">Semisleeper</ion-label>
<div class="clear"></div>
</li>
<li>
<ion-checkbox (ionChange)="choose_type('type','Sleeper',$event)" class="floatLeft"></ion-checkbox>
<ion-label class="floatLeft m0">Sleeper</ion-label>
<div class="clear"></div>
</li>
<li>
<ion-checkbox (ionChange)="choose_type('type','Pushback',$event)" class="floatLeft"></ion-checkbox>
<ion-label class="floatLeft m0">Seater</ion-label>
<div class="clear"></div>
</li>
</ul>
<h5> {{'filter.FILTER BY' | translate}}</h5>
<ul>
<ion-item>
<ion-label data-target="#filter3">{{'filter.Travels' | translate}}</ion-label>
<ion-select id="filter3" *ngIf="filter_type.travels" multiple="true" (ionChange)="select_type('travels',$event)">
<ion-option id="filter3" *ngFor="let travels of filter_type.travels " value="{{travels.id}}">
{{travels.name}}</ion-option>
</ion-select>
</ion-item>
<ion-item>
<ion-label id="#filter1">{{'filter.Boarding Points' | translate}}</ion-label>
<ion-select id="filter1" *ngIf="filter_type" (ionChange)="select_type('pick_point',$event)" multiple="true">
<ion-option id="filter1" *ngFor="let pick_point of filter_type.pick_point " [value]="pick_point.name">{{pick_point.name}}</ion-option>
</ion-select>
</ion-item>
<ion-item>
<ion-label>{{'filter.Dropping Points' | translate}}</ion-label>
<ion-select *ngIf="filter_type" id="filter2" (ionChange)="select_type('drop_point',$event)" multiple="true">
<ion-option id="filter2" *ngFor="let drop_point of filter_type.drop_point" [value]="drop_point.name">{{drop_point.name}}</ion-option>
</ion-select>
</ion-item>
</ul>
<h5>FILTER BY DEPARTURE TIME</h5>
<ul>
<li>
<ion-checkbox (ionChange)="choose_type('time',time_string('06:00:00 - 12:00:00'),$event)" class="floatLeft">
</ion-checkbox>
<ion-label class="floatLeft m0">06:00 am - 12:00 pm</ion-label>
<div class="clear"></div>
</li>
<li>
<ion-checkbox (ionChange)="choose_type('time',time_string('12:00:00 - 18:00:00'),$event)" class="floatLeft">
</ion-checkbox>
<ion-label class="floatLeft m0">12:00 pm - 06:00 pm</ion-label>
<div class="clear"></div>
</li>
<li>
<ion-checkbox (ionChange)="choose_type('time',time_string('18:00:00 - 21:00:00'),$event)" class="floatLeft">
</ion-checkbox>
<ion-label class="floatLeft m0">06:00 pm - 09:00 pm</ion-label>
<div class="clear"></div>
</li>
<li>
<ion-checkbox (ionChange)="choose_type('time',time_string('21:00:00 - 23:59:59'),$event)" class="floatLeft">
</ion-checkbox>
<ion-label class="floatLeft m0">09:00 pm - 12:00 am</ion-label>
<div class="clear"></div>
</li>
<li>
<ion-checkbox (ionChange)="choose_type('time',time_string('00:00:00 - 06:00:00'),$event)" class="floatLeft">
</ion-checkbox>
<ion-label class="floatLeft m0">12:00 am - 06:00 am</ion-label>
<div class="clear"></div>
</li>
</ul>
</div>
<div class="filter_footer">
<button ion-button class="m0 done_btn floatRight" (click)="dismiss()">
{{'filter.DONE' | translate}}
</button>
<div class="clear"></div>
</div>
</div>
</ion-content>
\ No newline at end of file
import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { FilterPage } from './filter';
import { TranslateModule } from '@ngx-translate/core';
@NgModule({
declarations: [
FilterPage,
],
imports: [
IonicPageModule.forChild(FilterPage),
TranslateModule.forChild()
],
})
export class FilterPageModule {}
page-filter {
.custom_modal_wrapper {
background: rgba(0, 0, 0, 0.4);
}
.filter_wrapper {
background: #fff;
width: calc(100% - 40px);
margin: 0 auto;
border-radius: 20px;
position: relative;
top: 30px;
border-bottom-right-radius: 0px;
.filter_header {
padding: 15px;
border-bottom: 1px solid #dedede;
h4 {
margin: 0px;
padding: 0px;
font-size: 17px;
font-weight: 600;
text-transform: uppercase;
}
.reset_btn {
color: rgba(254, 142, 9, 1);
font-size: 17px;
text-transform: uppercase;
}
}
.filter_content {
padding: 15px;
height: 320px;
overflow: scroll;
margin-top: 10px;
margin-bottom: 10px;
h5 {
color: rgba(98, 56, 28, 1);
margin: 0px;
padding: 0px;
font-size: 15px;
}
ul {
margin: 0px;
padding: 0px;
padding-top: 15px;
padding-bottom: 15px;
li {
list-style: none;
padding-top: 10px;
padding-bottom: 10px;
.checkbox-icon {
width: 25px;
height: 25px;
border-radius: 50%;
border: none;
border: 2px solid rgba(213, 213, 213, 1);
}
.checkbox-checked {
background-color: rgba(254, 142, 9, 1);
border: 2px solid rgba(254, 142, 9, 1);
}
.checkbox-inner {
left: 8px;
top: 5px;
}
ion-label {
padding: 3px;
font-size: 16px;
padding-left: 10px;
}
}
}
}
.filter_footer {
padding: 10px;
border-top: 1px solid #dedede;
.done_btn {
background-color: rgba(254, 142, 9, 1);
color: #fff;
padding-left: 20px;
padding-right: 20px;
height: 35px;
border-radius: 20px;
text-transform: capitalize;
letter-spacing: 2px;
font-weight: 400;
border-bottom-right-radius: 0px;
}
}
}
}
\ No newline at end of file
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams,ViewController, Events } from 'ionic-angular';
import { TranslateService } from '@ngx-translate/core';
import { Storage } from '@ionic/storage';
@IonicPage()
@Component({
selector: 'page-filter',
templateUrl: 'filter.html',
})
export class FilterPage {
selectedLeave : string = '';
user_filter:any;
boarding_point_filter:any;
dropping_point_filter:any;
operatorname:any;
data_after_filter:any;
operatordata= [];
result_data:any
response:any;
lang:string = 'en';
filter_type: any;
constructor(public navCtrl: NavController, public navParams: NavParams,public viewCtrl: ViewController, public translate: TranslateService,public eventss: Events,public storage: Storage)
{
this.filter_type = {'travels': [], 'pick_point': [], 'drop_point': []};
this.user_filter = {'travels': [], 'pick_point': [], 'drop_point': [], 'time': [],'type': [] };
this.result_data= this.navParams.get('params');
console.log('Recieved data in filterpage',this.result_data);
this.filter_result(this.result_data);
console.log('Data for prinitng',this.data_after_filter);
this.response = this.navParams.get('params');
console.log(this.response);
this.eventss.subscribe('user:lang', data => {
setTimeout(() => {
this.langTrans();
}, 500);
})
}
choose_type(type: string, value: any, event: any) {
console.log('Value' , type);
let index;
if (event.checked === true) {
this.user_filter[type].push(value);
}else{
index = this.user_filter[type].indexOf(value);
this.user_filter[type].splice(index, 1);
}
console.log('User filter app' , this.user_filter);
}
select_type(type :string, value:Array<String> , event:any) {
console.log('Inside search function')
console.log('Type',type ,'Value',value, 'Event',event)
let index;
console.log(value.length);
for(var i=0 ; i<=value.length ; i++)
this.user_filter[type].push(value[i]);
console.log('Userfilter real', this.user_filter)
var arr = [1,2,3,4,5,6,7,8,9];
var nArr = [];
while(arr.length > 0) {
nArr.push(arr.splice(0,1));
console.log('Narr', nArr);
}
}
ionViewDidLoad() {
console.log('Ionicview filterpage');
this.langTrans();
}
langTrans() {
this.storage.get('lang').then(lang => {
if (lang != null) {
this.translate.use(lang)
this.lang = lang;
}
else {
this.translate.use('en');
this.lang = 'en';
}
})
}
dismiss() {
console.log(this.user_filter);
this.viewCtrl.dismiss(this.user_filter);
}
time_string(time_list: string) {
let time_split: any;
const date_list = time_list.split(' - ');
const start_time = date_list[0];
const end_time = date_list[1];
time_split = start_time.split(':');
const date2 = new Date();
date2.setHours(time_split[0]);
date2.setMinutes(time_split[1]);
time_split = end_time.split(':');
const date3 = new Date();
date3.setHours(time_split[0]);
date3.setMinutes(time_split[1]);
return date2.getTime() + '-' + date3.getTime();
}
filter_result(result) {
console.log('Result data recieved in filter function',result);
result.forEach(element => {
this.filter_type.travels.push({'id':element.operatorCode, 'name':element.operatorName})
console.log('Travels' , this.filter_type.travels);
if (element.boardingPointDetails instanceof Array) {
element.boardingPointDetails.forEach(item => {
this.filter_type.pick_point.push({'id': item.code, 'name': item.name});
});
} else {
if (element.boardingPointDetails !== undefined) {
this.filter_type.pick_point.push({'id': element.boardingPointDetails.code, 'name': element.boardingPointDetails.name});
}
}
if (element.droppingPointDetails instanceof Array) {
element.droppingPointDetails.forEach(item => {
this.filter_type.drop_point.push({'id': item.code, 'name': item.name});
});
} else {
if (element.droppingPointDetails !== undefined) {
this.filter_type.drop_point.push({'id': element.droppingPointDetails.code, 'name': element.droppingPointDetails.name});
}
}
element.seat_layout = {'availableSeats': '', 'boardingPoints': '', 'busMapStructure': '', 'code': '', 'columnsList': '', 'layerCount': 0, 'message': '', 'rowsList': ''};
});
this.filter_type.pick_point = this.removeDuplicates(this.filter_type.pick_point, 'name');
this.filter_type.drop_point = this.removeDuplicates(this.filter_type.drop_point, 'name');
this.filter_type.travels = this.removeDuplicates(this.filter_type.travels, 'id');
console.log('Filter type',this.filter_type.travels[0]);
// this.data_after_filter= this.filter_type;
// this.operatorname=this.data_after_filter.travels;
// this.boarding_point_filter = this.data_after_filter.pick_point;
// this.dropping_point_filter = this.data_after_filter.drop_point;
}
removeDuplicates(myArr, prop) {
return myArr.filter((obj, pos, arr) => {
return arr.map(mapObj => mapObj[prop]).indexOf(obj[prop]) === pos;
});
}
}
<ion-header>
<div class="nav_header">
<button class="nav_btn nav_menu floatLeft" menuToggle>
</button>
<div class="nav_header_title floatLeft">
FORGOT PASSWORD
</div>
<div class="clear"></div>
</div>
</ion-header>
<ion-content class="theme_background">
<div class="login_wrapper">
<div class="logo_section">
<img src="assets/imgs/logo.png">
</div>
<div class="login_form">
<h3 class="floatLeft">FORGOT PASSWORD?</h3>
<div class="clear"></div>
<form [formGroup]="forgotForm">
<ion-list>
<ion-item>
<ion-input type="email" placeholder="{{'forgot.Enter email ID' | translate}}" formControlName="username"></ion-input>
</ion-item>
<div class="alert error" *ngIf="forgotForm.controls.username.invalid && (forgotForm.get('username').dirty || forgotForm.get('username').touched)">
{{'forgot.Invalid Email ID' | translate}}
</div>
<div class="textRight">
<button ion-button class="login_btn" (click)="forgot_pwd()" [disabled]="forgotForm.invalid">{{'forgot.Request' | translate}}</button>
</div>
</ion-list>
</form>
</div>
</div>
</ion-content>
\ No newline at end of file
import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { ForgotPage } from './forgot';
import { TranslateModule } from '@ngx-translate/core';
@NgModule({
declarations: [
ForgotPage,
],
imports: [
IonicPageModule.forChild(ForgotPage),
TranslateModule.forChild()
],
})
export class ForgotPageModule {}
page-forgot {
.login_wrapper {
width: 100%;
padding-top: 45px;
padding-left: 20px;
padding-right: 20px;
.logo_section {
text-align: center;
padding-bottom: 30px;
img {
width: 130px;
}
}
.login_form {
h3 {
margin: 0px;
padding: 20px;
font-weight: 600;
font-size: 25px;
text-transform: uppercase;
}
.google {
background-color: rgba(241, 67, 54, 1);
color: #fff;
width: 50px;
height: 45px;
text-align: center;
font-size: 23px;
padding: 9px;
border-radius: 20px;
border-bottom-right-radius: 0px;
}
.list {
.date {
background-image: url("../assets/imgs/calender.png");
background-position: center;
background-repeat: no-repeat;
background-size: 50px;
width: 50px;
height: 50px;
}
.item {
margin-bottom: 20px;
border: none !important;
box-shadow: none !important;
.item-inner {
border: none !important;
box-shadow: none !important;
.input-wrapper {
ion-datetime {
border: 1px solid rgba(213, 213, 213, 1);
border-radius: 30px;
border-bottom-right-radius: 0px;
min-width: 100%;
background-image: url("../assets/imgs/calender.png");
background-repeat: no-repeat;
background-size: 20px;
background-position: right 15px top 15px;
}
select {
border: 1px solid #d5d5d5;
border-radius: 30px;
border-bottom-right-radius: 0px;
padding-left: 20px !important;
width: 100%;
height: 45px;
-webkit-appearance: none;
-moz-appearance: none;
background-image: url("../assets/imgs/drop.png");
background-repeat: no-repeat;
background-position: right 10px top 5px;
background-size: 35px;
}
ion-input {
border: 1px solid rgba(213, 213, 213, 1);
border-radius: 30px;
background-color: #fff;
border-bottom-right-radius: 0px;
input {
height: 100%;
padding-left: 20px !important;
color: rgba(213, 213, 213, 1);
}
}
.dashed {
border: 1px dashed rgba(213, 213, 213, 1);
}
}
}
}
.login_btn {
background-color: rgba(254, 142, 9, 1);
color: #fff;
height: 45px;
font-size: 18px;
font-weight: 400;
border-radius: 30px;
background-position: 18px;
background-repeat: no-repeat;
background-size: 20px;
padding-left: 25px;
padding-right: 25px;
border-bottom-right-radius: 0px;
text-transform: capitalize;
font-weight: 300;
letter-spacing: 1px;
}
.inside_check {
padding-bottom: 10px;
.checkbox-icon {
width: 30px;
height: 30px;
border-radius: 50%;
border: none;
border: 1px solid rgba(213, 213, 213, 1);
}
.checkbox-checked {
background-color: rgba(254, 142, 9, 1);
}
.checkbox-inner {
left: 12px;
top: 9px;
}
ion-checkbox {
float: left;
}
ion-label {
float: left;
margin: 0px;
padding: 5px;
margin-left: 5px;
color: #000;
font-size: 16px;
a {
color: #000;
}
}
}
p {
color: rgba(254, 142, 9, 1);
font-size: 16px;
}
}
}
}
}
\ No newline at end of file
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
/*-------------Edited by Adarsh-----------------*/
import { Validators, FormGroup, FormBuilder } from '@angular/forms'
import { Myservice } from "./../../providers/services/myservice";
import { TranslateModule } from '@ngx-translate/core';
@IonicPage()
@Component({
selector: 'page-forgot',
templateUrl: 'forgot.html',
})
export class ForgotPage {
forgotForm: FormGroup;
constructor(public navCtrl: NavController, public navParams: NavParams, private formBuilder: FormBuilder,
private myservice: Myservice,public translate: TranslateModule) {
this.forgotForm = this.formBuilder.group({
username: ['', Validators.compose([Validators.required, Validators.pattern("[a-zA-Z0-9.-_]{1,}@[a-zA-Z.-]{2,}[.]{1}[a-zA-Z]{2,}")])]
})
}
ionViewDidLoad() {
console.log('ionViewDidLoad ForgotPage');
}
login(){
this.navCtrl.push("LoginPage");
}
back(){
this.navCtrl.pop();
}
forgot_pwd(){
console.log('Forgot passsoword values',this.forgotForm.value);
this.myservice.show_loader();
this.myservice.web_post('user_forgot',this.forgotForm.value).subscribe(response=> {
this.myservice.hide_loader();
if (response.status == 'success'){
this.myservice.presentToast("Password reset email is sent into your Email ID");
this.forgotForm.reset();
}
else{
this.myservice.presentToast(response.message);
}
},err=>{
this.myservice.presentToast("Please contact your service team something wrong happend");
})
}
}
<ion-header>
<div class="nav_header">
<button class="nav_btn nav_menu floatLeft" menuToggle>
</button>
<div class="nav_header_title floatLeft">
BOOK BUS TICKET
</div>
<div class="clear"></div>
</div>
</ion-header>
<ion-content class="theme_background">
<form [formGroup]="homeForm" (ngSubmit)="bus_search()" autocomplete="off">
<div class="top_banner_section">
<div class="home_tab">
<ul>
<li [class.active]="!isShow" (click)="showTab()">
<div class="circle"></div>
BOOK TICKET</li>
<li [class.active]="isShow" (click)="showTab()">
<div class="circle"></div>
TRACKING</li>
</ul>
</div>
<div [hidden]="isShow">
<ion-card>
<ion-list>
<p>From</p>
<div class="relative">
<ion-item>
<ion-input type="text" placeholder="From" formControlName="sourceName" (keyup)='search_board($event.target.value)' (click)="initCalled()"></ion-input>
</ion-item>
<ul *ngIf="sourceFlag" class="suggestion_list">
<li *ngFor="let result of results" (click)='select_source(result)'>{{result.stationName}}
</li>
</ul>
<div *ngIf="!homeForm.controls['sourceName'].valid && searchSubmit">
<div class="alert alert_error" *ngIf="homeForm.controls['sourceName'].hasError('required')">This field is required
</div>
</div>
</div>
<p>To</p>
<div class="relative">
<ion-item class="borderNone">
<ion-input type="text" placeholder="Destination" formControlName="destinationName" (keyup)="search_drop($event.target.value)" (click)="initCalled()"></ion-input>
</ion-item>
<ul *ngIf="destFlag" class="suggestion_list">
<li *ngFor="let result of destResults" (click)="select_dest(result)">
{{result.stationName}}</li>
</ul>
<div *ngIf="!homeForm.controls['destinationName'].valid && searchSubmit">
<div class="alert alert_error" *ngIf="homeForm.controls['destinationName'].hasError('required')">
This field is required
</div>
</div>
</div>
<p>Date of travel</p>
<ion-item class="borderNone relative">
<ion-datetime displayFormat="DD-MM-YYYY" placeholder="{{'home.Date of Travel' | translate}}" formControlName="travelDate" [min]="today"></ion-datetime>
<div class="alert alert_error" *ngIf="!homeForm.controls['travelDate'].valid && searchSubmit">
<div *ngIf="homeForm.controls['travelDate'].hasError('required')">Please select your date of journey
</div>
</div>
</ion-item>
<div class="textRight">
<button class="login_btn">
Find Bus
</button>
</div>
</ion-list>
</ion-card>
</div>
<div [hidden]="!isShow">
<ion-card>
<ion-list>
<!-- <ion-item>
<form [formGroup]="parcelType">
<select formControlName="parcelControl">
<option [value]="parcel" *ngFor="let parcel of tracking"> {{parcel}}
</option>
</select>
</form>
</ion-item> -->
<p>Parcel ID</p>
<ion-item class="borderNone">
<ion-input type="text" placeholder="Type here" class="dashed"></ion-input>
</ion-item>
<div class="textRight">
<button class="login_btn" (click)="track()">
Track
</button>
</div>
</ion-list>
</ion-card>
</div>
</div>
</form>
<div class="recent_list">
<h4>RECENT TRIPS</h4>
<ul>
<li>
<h3>Mumbai<span> ===== </span>Kochin</h3>
<p>June 26th 2019, 09:00 AM - 06.30 PM</p>
</li>
<li>
<h3>Mumbai<span> ===== </span>Kochin</h3>
<p>June 26th 2019, 09:00 AM - 06.30 PM</p>
</li>
</ul>
</div>
<!-- <div class="home_promo_code">
<ion-slides pager="false" slidesPerView="1" shouldLockSwipes="1">
<ion-slide *ngFor="let promocode of promocodedata">
<ion-card>
<ion-card-header>
{{promocode.code}}
</ion-card-header>
<ion-card-content>
Upto <br>
<p>{{promocode.rate}}% Off</p>
<p style="font-size: 9px;">{{promocode.description}}</p>
</ion-card-content>
</ion-card>
</ion-slide>
</ion-slides>
</div> -->
</ion-content>
\ No newline at end of file
import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { TranslateModule } from '@ngx-translate/core';
import { HomePage } from './home';
@NgModule({
declarations: [
HomePage,
],
imports: [
IonicPageModule.forChild(HomePage),
TranslateModule.forChild()
],
})
export class HomePageModule {}
page-home {
.top_banner_section {
background-color: #fff;
padding-bottom: 30px;
border-bottom-left-radius: 40px;
-webkit-box-shadow: 0px 5px 5px 0px rgba(0, 0, 0, 0.25);
-moz-box-shadow: 0px 5px 5px 0px rgba(0, 0, 0, 0.25);
box-shadow: 0px 5px 5px 0px rgba(0, 0, 0, 0.25);
.home_tab {
padding: 10px;
padding-top: 25px;
ul {
text-align: center;
padding: 0px;
margin: 0px;
li {
display: inline-block;
width: 44%;
color: rgba(213, 213, 213, 1);
border: 1px solid rgba(213, 213, 213, 1);
margin: 8px;
padding: 5px;
font-size: 16px;
position: relative;
text-align: left;
padding-left: 35px;
border-radius: 20px;
border-left: 0px;
.circle {
width: 35px;
height: 35px;
border: 1px solid #d5d5d5;
border-radius: 50%;
position: absolute;
top: -3px;
left: -10px;
background-color: #fff;
}
}
.active {
color: #fe8e09;
border: 1px solid #fe8e09;
.circle {
border: 1px solid #fe8e09;
background-image: url("../assets/imgs/active_tick.png");
background-position: center;
background-size: 25px;
background-repeat: no-repeat;
}
}
}
}
.card {
margin: 0px;
width: 100%;
border-radius: 0px;
padding: 20px;
box-shadow: none;
padding-top: 5px;
padding-bottom: 0px;
p {
color: #62381c;
padding-left: 20px;
font-weight: 500;
padding-bottom: 5px;
font-size: 16px;
}
.suggestion_list {
padding: 0px;
margin: 0px;
box-shadow: 0px 5px 5px 0px rgba(0, 0, 0, 0.25);
li {
list-style: none;
padding: 15px;
font-size: 14px;
border-bottom: 1px solid rgba(213, 213, 213, 1);
color: #62381c;
&:hover {
background-color: #fe8e09;
color: #fff;
}
&:focus {
background-color: #fe8e09;
color: #fff;
}
}
}
.list {
.date {
background-image: url("assets/imgs/calender.png");
background-position: center;
background-repeat: no-repeat;
background-size: 50px;
width: 50px;
height: 50px;
}
.item {
margin-bottom: 20px;
border: none !important;
box-shadow: none !important;
.item-inner {
border: none !important;
box-shadow: none !important;
.input-wrapper {
ion-datetime {
border: 1px solid rgba(213, 213, 213, 1);
border-radius: 30px;
border-bottom-right-radius: 0px;
min-width: 100%;
background-image: url("/assets/imgs/calender.png");
background-repeat: no-repeat;
background-size: 20px;
background-position: right 15px top 15px;
}
select {
border: 1px solid #d5d5d5;
border-radius: 30px;
border-bottom-right-radius: 0px;
padding-left: 20px !important;
width: 100%;
height: 45px;
-webkit-appearance: none;
-moz-appearance: none;
background-image: url("/assets/imgs/drop.png");
background-repeat: no-repeat;
background-position: right 10px top 5px;
background-size: 35px;
}
ion-input {
border: 1px solid rgba(213, 213, 213, 1);
border-radius: 30px;
border-bottom-right-radius: 0px;
input {
height: 100%;
padding-left: 20px !important;
color: rgba(213, 213, 213, 1);
}
}
.dashed {
border: 1px dashed rgba(213, 213, 213, 1);
}
}
}
}
.login_btn {
background-color: rgba(254, 142, 9, 1);
color: #fff;
height: 45px;
font-size: 18px;
font-weight: 400;
border-radius: 30px;
background-image: url("/assets/imgs/search.png");
background-position: 18px;
background-repeat: no-repeat;
background-size: 20px;
padding-left: 45px;
padding-right: 25px;
border-bottom-right-radius: 0px;
}
}
}
}
.recent_list {
padding: 15px;
padding-top: 25px;
h4 {
color: #62381c;
margin: 0px;
padding: 0px;
font-size: 18px;
padding-bottom: 15px;
}
ul {
margin: 0px;
padding: 0px;
li {
list-style: none;
-webkit-box-shadow: 0px 5px 5px 0px rgba(0, 0, 0, 0.25);
-moz-box-shadow: 0px 5px 5px 0px rgba(0, 0, 0, 0.25);
box-shadow: 0px 5px 5px 0px rgba(0, 0, 0, 0.25);
background-color: #fff;
padding: 20px;
border-radius: 15px;
background-image: url("../assets/imgs/recent.png");
background-position: right bottom;
background-repeat: no-repeat;
background-size: 45px;
border-bottom-right-radius: 0px;
margin-bottom: 10px;
h3 {
margin: 0px;
padding: 0px;
font-size: 18px;
}
p {
margin: 0px;
padding: 0px;
color: rgba(114, 114, 114, 1);
padding-top: 5px;
}
}
}
}
}
\ No newline at end of file
import { Component } from '@angular/core';
import {FormGroup ,FormBuilder ,Validators} from '@angular/forms'
import { IonicPage, NavController, NavParams, Events } from 'ionic-angular';
//import { InAppBrowser, InAppBrowserOptions } from "@ionic-native/in-app-browser";
/*-------------Edited by Adarsh-----------------*/
import { Myservice } from "./../../providers/services/myservice";
import { TranslateService } from "@ngx-translate/core";
import { Storage } from "@ionic/storage";
import {debounceTime, distinctUntilChanged, switchMap} from 'rxjs/operators'
import { InAppBrowser, InAppBrowserEvent } from '@ionic-native/in-app-browser/ngx';
@IonicPage()
@Component({
selector: 'page-home',
templateUrl: 'home.html',
})
export class HomePage {
promocodedata:any;
funcName: any;
desfuncName: any;
homeForm: FormGroup;
today: any; //Date
results:any[];
destResults: any[];
board_point_item: any[];
drop_point_item: any[];
sourceLoad: boolean;
destload : boolean;
searchdata :any;
is_toggled: boolean = false;
drop_flag:boolean = true;
myDate: String = new Date().toISOString();
lang: string = 'en';
sourceFlag:boolean;
source_state:boolean;
destFlag :boolean;
dest_state:boolean;
check_flag:boolean;
searchSubmit:boolean;
sendingdata:any;
isActive:any;
isShow:any;
parcelType: FormGroup;
tracking = ['Parcel Tracking', 'Bus Tracking']
/*-------------------------Beginning of Constructor------------------------------------------------ */
constructor(
private iab: InAppBrowser,
public navCtrl: NavController,
public navParams: NavParams,
public myservice: Myservice,
private translate: TranslateService,
private formBuilder: FormBuilder,
public events: Events,
public storage: Storage,
private fb: FormBuilder
) {
this.myservice.get_promo('get_promocode').subscribe(response=> {
if(response.status === "success") {
this.promocodedata = this.myservice.ObjArray(response.data);
}
console.log('Promocodedata', this.promocodedata);
});
this.events.subscribe('user:lang', data => {
setTimeout(() => {
this.langTrans();
}, 500);
});
this.homeForm = this.formBuilder.group({
fromStationId: ['', Validators.compose([Validators.required])],
toStationId: ['', Validators.compose([Validators.required])],
travelDate: ['', Validators.compose([Validators.required])],
sourceName: ['', Validators.compose([Validators.required])],
destinationName: ['', Validators.compose([Validators.required])],
});
this.searchSubmit = false;
this.sourceFlag = false;
this.source_state = false;
this.dest_state = false;
this.destFlag = false;
this.check_flag=false;
this.destload = false;
this.sourceLoad = false;
this.today= new Date().toISOString() ; // myDate: new Date()
this.isShow = false;
}
/*------------------------------- End of constructor------------------------------------------------*/
ngOnInit() {
this.parcelType = this.fb.group({
parcelControl: ['Parcel Tracking']
});
}
// getVal(){
// alert(this.parcelType);
// }
ionViewDidLoad() {
console.log('ionViewDidLoad HomePage');
this.langTrans();
}
showTab(){
this.isShow = !this.isShow;
}
track(){
this.navCtrl.push("TrackingPage");
}
paymentopen()
{
//let bookdata = 'totalamount_'++'/passengernaame_'+this.user.name+'/bookingcode_'+this.bookingId
const browser = this.iab.create('https://techlabz.in/adarsh/razorpay/index.php/razorpay/checkout/1/TGR123456');
// browser.on('loadstop').subscribe(event => {
// console.log('Inside subscribe function');
// browser.insertCSS({ code: "body{color: red;" });
// console.log('eventdata',event)
// });
browser.on('loadstop').subscribe((event: InAppBrowserEvent) => {
console.log("LOG: API Response");
console.log('Event url',event.url);
var str = event.url;
var n = str.includes("http://www.ticketrobo.in/razorpay/success");
if(n == true) {
console.log('Inside truecondition');
browser.close();
var res = str.split("http://www.ticketrobo.in/razorpay/success/");
var trans_id = res[1];
console.log('Transactionid', trans_id);
//this.success(trans_id);
}
});
//
}
/*-----------------------------------Source location----------------------------------------------*/
search_board(value:string){
this.board_point_item = [];
var data = {"term":value,"type":"board_point"}
this.myservice.get_points('source_location/'+value.replace(/\s/g,'')).subscribe(res=>{
if(res.status=="success"){
this.results=res.data;
if(this.results.length>0){
this.sourceFlag = true;
} else {
this.sourceFlag = false;
}
} else{
this.results = [];
this.sourceFlag = false;
this.myservice.presentToast("Could not find a Source point start with '"+value+"'");
}
},err=>{
this.myservice.presentToast("Please contact your service team something wrong happend");
});
}
/*--------------------------------Destination location----------------------------------------------*/
search_drop(value:string)
{
console.log(value)
this.board_point_item = [];
this.myservice.get_points('destination_location/'+value.replace(/\s/g,'') + '/'+ this.homeForm.controls['fromStationId'].value).subscribe(res=>{
if(res.status=="success"){
this.destResults=res.data;
if(this.destResults.length>0){
this.destFlag = true;
this.drop_point_item = res.result;
} else {
this.destFlag = false;
this.drop_point_item = [];
}
} else {
this.destFlag = false;
this.drop_point_item = [];
this.myservice.presentToast("Could not find a drop point start with '"+value+"'");
}
},err=> {
this.myservice.presentToast("Please contact your service team something wrong happend");
});
}
select_source(data) {
this.sourceFlag = false;
this.source_state = false;
this.homeForm.controls['sourceName'].patchValue(data.stationName);
this.homeForm.controls['fromStationId'].patchValue(data.stationCode);
}
select_dest(data) {
this.destFlag = false;
this.dest_state = false;
this.homeForm.controls['destinationName'].patchValue(data.stationName);
this.homeForm.controls['toStationId'].patchValue(data.stationCode);
}
initCalled() {
this.sourceFlag = false;
this.destFlag = false;
console.log(this.source_state);
}
/*------------------------------Search Bus----------------------------------------------*/
bus_search() {
this.searchSubmit = true;
if (this.homeForm.valid)
{
this.searchdata = this.homeForm.value;
console.log('Search data to passs',this.searchdata)
console.log('traveldate',this.searchdata.travelDate);
this.sendingdata= 'search?username=javatest&password=123456&travelDate=' + this.searchdata.travelDate +'&fromStationCode=' + this.searchdata.fromStationId + '&toStationCode=' + this.searchdata.toStationId;
console.log('sending data',this.sendingdata);
var data= {"url":this.sendingdata ,"data":null}
this.myservice.show_loader();
this.myservice.online_service('online_service',data).subscribe(response =>
{
this.myservice.hide_loader()
console.log('Response code',response)
if(response.message == "Success")
{
this.navCtrl.push("SearchresultsPage",{result: response, search:this.homeForm.value})
}
else {
this.myservice.presentToast('Sorry , no bus found')
}
})
}
}
/*-----------------------Language Change------------------------------------- */
langTrans() {
this.storage.get('lang').then(lang => {
if (lang != null) {
this.translate.use(lang)
this.lang = lang;
}
else {
this.translate.use('en');
this.lang = 'en';
}
})
}
/*-----------------------------Validating form---------------------------------------------*/
check_validate() {
for (var key in this.homeForm) {
if (this.homeForm[key] == null || this.homeForm[key] == "")
{
this.check_flag=true;
console.log('Check flag status',this.check_flag)
}
}
return false;
}
/*------------------------------------End------------------------------------------------------------*/
}
<ion-content>
<div class="landing_wrapper">
<ion-slides pager="false" (ionSlideDidChange)="slideChanged()">
<ion-slide>
<img src="assets/imgs/Group [email protected]">
<div class="slide_caption">
<h3>BOOK BUS TICKETS</h3>
<p>Select your favourite seat and book. Also <br>available online payment. </p>
</div>
</ion-slide>
<ion-slide>
<img src="assets/imgs/Group [email protected]">
<div class="slide_caption">
<h3>parcel Service</h3>
<p>Check availability and send parcels. Also tracking available. </p>
</div>
</ion-slide>
</ion-slides>
</div>
<div class="footerbtn_bay">
<div class="footer_next floatRight" (click)="goToNextSlide()" [hidden]="currentIndex != 0">
</div>
<div class="footer_started floatRight" (click)="started()" [hidden]="currentIndex != 1">
Get Started
</div>
<div class="footer_prev floatLeft" (click)="goToPrevSlide()" [hidden]="currentIndex == 0">
</div>
<div class="clear"></div>
</div>
</ion-content>
\ No newline at end of file
import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { LandingPage } from './landing';
@NgModule({
declarations: [
LandingPage,
],
imports: [
IonicPageModule.forChild(LandingPage),
],
})
export class LandingPageModule {}
page-landing {
.landing_wrapper {
width: 100%;
height: calc(100vh - 90px);
img {}
.slide_caption {
padding: 20px;
h3 {
text-align: left;
text-transform: uppercase;
font-weight: 700;
}
p {
text-align: left;
color: rgba(114, 114, 114, 1);
font-size: 15px;
}
}
}
.footerbtn_bay {
padding-top: 25px;
.footer_next {
width: 45px;
height: 40px;
background-image: url("../assets/imgs/next.png");
background-size: 45px;
background-repeat: no-repeat;
}
.footer_prev {
width: 45px;
height: 40px;
background-image: url("../assets/imgs/prev.png");
background-size: 45px;
background-repeat: no-repeat;
}
.footer_started {
padding: 12px;
padding-left: 25px;
padding-right: 25px;
height: 40px;
background-color: rgba(254, 142, 9, 1);
color: #fff;
border-radius: 20px;
position: relative;
right: 15px;
border-bottom-right-radius: 0px;
}
}
}
\ No newline at end of file
import { Component, ViewChild } from '@angular/core';
import { IonicPage, NavController, NavParams, Slides } from 'ionic-angular';
@IonicPage()
@Component({
selector: 'page-landing',
templateUrl: 'landing.html',
})
export class LandingPage {
@ViewChild(Slides) slides: Slides;
currentIndex: any;
constructor(public navCtrl: NavController, public navParams: NavParams) {
this.currentIndex = 0;
}
ionViewDidLoad() {
console.log('ionViewDidLoad LandingPage');
}
slideChanged() {
this.currentIndex = this.slides.getActiveIndex();
console.log(this.currentIndex);
}
goToNextSlide() {
this.slides.slideNext();
this.slides.getActiveIndex();
}
goToPrevSlide() {
this.slides.slidePrev();
this.slides.getActiveIndex();
}
started(){
this.navCtrl.push("HomePage");
}
}
import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { ListPage } from './list';
@NgModule({
declarations: [
ListPage,
],
imports: [
IonicPageModule.forChild(ListPage),
],
})
export class ListPageModule {}
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
import{ServicesProvider} from'../../providers/services/services';
@IonicPage()
@Component({
selector: 'page-list',
templateUrl: 'list.html',
})
export class ListPage {
farelist :any
constructor(public navCtrl: NavController, public navParams: NavParams,private servicesProvider: ServicesProvider) {
}
ionViewDidLoad() {
console.log('ionViewDidLoad ListPage');
}
}
<ion-content class="theme_background">
<div class="login_wrapper">
<div class="logo_section">
<img src="assets/imgs/logo.png">
</div>
<div class="login_form">
<h3 class="floatLeft">LOGIN</h3>
<div class="google floatRight" (click)="socialSignIn()">
<ion-icon name="logo-google"></ion-icon>
</div>
<div class="clear"></div>
<form [formGroup]="loginForm">
<ion-list>
<ion-item>
<ion-input formControlName="phone_no" type="text" placeholder="{{'login.Username' | translate}}">
</ion-input>
</ion-item>
<div class="alert error" *ngIf="loginForm.controls.phone_no.invalid && (loginForm.get('phone_no').dirty || loginForm.get('phone_no').touched)">
{{'login.Invalid email id' | translate}}
</div>
<div class="clear"></div>
<ion-item class="borderNone">
<ion-input formControlName="password" type="password" placeholder="{{'login.Password' | translate}}">
</ion-input>
</ion-item>
<div class="alert error" *ngIf="loginForm.controls.password.invalid && (loginForm.get('password').dirty || loginForm.get('password').touched)">
{{'login.Minimum 6 characters required' | translate}}
</div>
<div class="textRight">
<button class="login_btn" (click)="login()" [disabled]="loginForm.invalid">
{{'login.Login' | translate}}</button>
</div>
<div class="clear"></div>
<p (click)="forgot()">{{'login.Forgot Password ?' | translate}}</p>
<p (click)="signup()"><span>New User?</span> {{'login.Add a new account' | translate}}</p>
</ion-list>
</form>
</div>
</div>
</ion-content>
\ No newline at end of file
import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { LoginPage } from './login';
import { TranslateModule } from '@ngx-translate/core';
@NgModule({
declarations: [
LoginPage,
],
imports: [
IonicPageModule.forChild(LoginPage),
TranslateModule.forChild()
],
})
export class LoginPageModule {}
page-login {
.login_wrapper {
width: 100%;
padding-top: 45px;
padding-left: 20px;
padding-right: 20px;
.logo_section {
text-align: center;
padding-bottom: 30px;
img {
width: 160px;
}
}
.login_form {
h3 {
margin: 0px;
padding: 20px;
font-weight: 600;
font-size: 25px;
text-transform: uppercase;
}
.google {
background-color: rgba(241, 67, 54, 1);
color: #fff;
width: 50px;
height: 45px;
text-align: center;
font-size: 23px;
padding: 9px;
border-radius: 20px;
border-bottom-right-radius: 0px;
}
.list {
.date {
background-image: url("/assets/imgs/calender.png");
background-position: center;
background-repeat: no-repeat;
background-size: 50px;
width: 50px;
height: 50px;
}
.item {
margin-bottom: 20px;
border: none !important;
box-shadow: none !important;
.item-inner {
border: none !important;
box-shadow: none !important;
.input-wrapper {
ion-datetime {
border: 1px solid rgba(213, 213, 213, 1);
border-radius: 30px;
border-bottom-right-radius: 0px;
min-width: 100%;
background-image: url("/assets/imgs/calender.png");
background-repeat: no-repeat;
background-size: 20px;
background-position: right 15px top 15px;
}
select {
border: 1px solid #d5d5d5;
border-radius: 30px;
border-bottom-right-radius: 0px;
padding-left: 20px !important;
width: 100%;
height: 45px;
-webkit-appearance: none;
-moz-appearance: none;
background-image: url("/assets/imgs/drop.png");
background-repeat: no-repeat;
background-position: right 10px top 5px;
background-size: 35px;
}
ion-input {
border: 1px solid rgba(213, 213, 213, 1);
border-radius: 30px;
background-color: #fff;
border-bottom-right-radius: 0px;
input {
height: 100%;
padding-left: 20px !important;
color: rgba(213, 213, 213, 1);
}
}
.dashed {
border: 1px dashed rgba(213, 213, 213, 1);
}
}
}
}
.login_btn {
background-color: rgba(254, 142, 9, 1);
color: #fff;
height: 45px;
font-size: 18px;
font-weight: 400;
border-radius: 30px;
background-position: 18px;
background-repeat: no-repeat;
background-size: 20px;
padding-left: 25px;
padding-right: 25px;
border-bottom-right-radius: 0px;
text-transform: capitalize;
font-weight: 300;
letter-spacing: 1px;
}
p {
color: rgba(254, 142, 9, 1);
font-size: 16px;
padding-top: 15px;
span {
color: rgba(114, 114, 114, 1);
}
}
}
}
}
}
\ No newline at end of file
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams, Events,ViewController } from 'ionic-angular';
import { Validators, FormGroup, FormBuilder } from '@angular/forms'
import { Storage } from '@ionic/storage';
import { GooglePlus } from '@ionic-native/google-plus';
import { Myservice } from "./../../providers/services/myservice";
import { user } from "../../models/mymodel";
import { TranslateModule } from '@ngx-translate/core';
import { HomePage } from '../home/home';
import { THROW_IF_NOT_FOUND } from '@angular/core/src/di/injector';
@IonicPage()
@Component({
selector: 'page-login',
templateUrl: 'login.html',
})
export class LoginPage {
cancelResponse: any;
local:user;
loginForm: FormGroup;
device_id: any ='';
funcName:any;
loading:boolean;
constructor(
private googlePlus:GooglePlus,
public navCtrl: NavController,
public navParams: NavParams,
private formBuilder: FormBuilder,
private myservice: Myservice,
public storage: Storage,
public events: Events,
//private googlePlus: GooglePlus,
// private fb: Facebook,
public translate: TranslateModule,
public viewCtrl: ViewController,
// private socialAuthService: AuthService
) {
this.loginForm = this.formBuilder.group({
phone_no: ['',Validators.compose([Validators.required, Validators.pattern("[a-zA-Z0-9.-_]{1,}@[a-zA-Z.-]{2,}[.]{1}[a-zA-Z]{2,}")])],
password: ['', Validators.compose([Validators.required, Validators.minLength(6)])],
})
this.storage.get('get_deviceId').then(data => {
console.log("asdasdasdsad");
console.log(data);
this.device_id = data.userId;
console.log('Device id',this.device_id);
})
}
ionViewDidLoad() {
console.log('ionViewDidLoad LoginPage');
// this.storage.get('get_deviceId').then(data => {
// console.log(data);
// this.device_id = data.userId;
// })
}
socialSignIn()
{
this.googlePlus.login({}).then(res => {
console.log(res);
var obj ={'email':res.email,'id':res.userId,'idToken':res.accessToken,'name':res.displayName,'provider': "google",'device_id':this.device_id}
this.myservice.show_loader();
this.myservice.online_service('social_login',obj).subscribe(responseData => {
this.myservice.hide_loader();
console.log(responseData)
if (responseData.status == 'success'){
this.myservice.presentToast('Login Successfully.Please wait while you are redirecting to searchbus');
this.storage.set('user_data', responseData);
this.events.publish('user:created', responseData, Date.now());
var This = this;
setTimeout(() => {
This.navCtrl.setRoot('HomePage');
}, 500);
}
else {
this.myservice.presentToast('Sorry, Login failed');
}
});
});
}
login(){
console.log('Device id',this.device_id);
// this.loginForm.controls['device_id'].setValue(this.device_id);
var obj = {"username":this.loginForm.value.phone_no,"password":this.loginForm.value.password,'device_id':this.device_id}
console.log('Username & Password',obj);
this.myservice.show_loader()
this.myservice.login_user('user_login',obj).subscribe(data => {
this.myservice.hide_loader();
console.log ('Responsedata',data);
console.log('Json data ',JSON.stringify(data))
if (data.status === 'success'){
this.myservice.presentToast('Login Successfully.Please wait while you are redirecting to searchbus')
console.log('response',data.status)
this.storage.set('user_data', data);
console.log('User data in storage', data)
this.events.publish('user:created', data, Date.now());
var This = this;
setTimeout(() => {
This.navCtrl.setRoot('HomePage')
}, 500);
}
else{
var This = this;
this.myservice.presentToast("Invalid username or Password");
setTimeout(() => {
This.viewCtrl.dismiss();
//This.navCtrl.setRoot('HomePage')
}, 500);
}
},err=>{
this.myservice.presentToast("Please contact service team something wrong happend");
console.log(err)
})
}
signup(){
this.navCtrl.push("SignupPage");
}
forgot(){
this.navCtrl.push("ForgotPage");
}
}
// google_login() {
// this.googlePlus.login({})
// .then(res => {
// console.log(res);
// var post_data = {"social_id":res.userId,"email_id":res.email,"name":res.displayName,"device_id":this.device_id};
// this.myservice.web_post('social_login',post_data).subscribe(response => {
// if (response.status == 'success'){
// this.storage.set('user_data', response.user);
// this.events.publish('user:created', response.user, Date.now());
// var This = this;
// setTimeout(() => {
// This.navCtrl.setRoot('HomePage')
// }, 500);
// }
// else{
// this.myservice.presentToast("Something wrong happend");
// }
// },err=>{
// this.myservice.presentToast("Please contact your service team something wrong happend");
// })
// }).catch(err => console.error(err));
// }
// fb_login() {
// this.fb.login(['public_profile', 'email'])
// .then(res => {
// if (res.status === "connected") {
// //this.isLoggedIn = true;
// this.getUserDetail(res.authResponse.userID);
// } else {
// //this.isLoggedIn = false;
// }
// })
// .catch(e => console.log('Error logging into Facebook', e));
// }
// getUserDetail(userid) {
// this.fb.api("/" + userid + "/?fields=id,email,name,picture,gender", ["public_profile"])
// .then(res => {
// console.log(res);
// var emails = '';
// //this.myservice.show_loader();
// if (res.email)
// emails = res.email;
// var post_data = {"social_id":res.id,"email_id":emails,"name":res.name,"device_id":this.device_id};
// this.myservice.web_post('social_login',post_data).subscribe(response=>{
// if (response.status == 'success'){
// this.storage.set('user_data', response.user);
// this.events.publish('user:created', response.user, Date.now());
// var This = this;
// setTimeout(() => {
// This.navCtrl.setRoot('HomePage')
// }, 500);
// }
// else{
// this.myservice.presentToast("Something wrong happend");
// }
// },err=>{
// this.myservice.presentToast("Please contact your service team something wrong happend");
// })
// })
// .catch(e => {
// console.log(e);
// });
// }
// public socialSignIn(socialPlatform: string)
// {
// let socialPlatformProvider: any;
// const This = this;
// if (socialPlatform === 'facebook') {
// socialPlatformProvider = FacebookLoginProvider.PROVIDER_ID
// }
// else {
// socialPlatformProvider = GoogleLoginProvider.PROVIDER_ID;
// }
// this.socialAuthService.signIn(socialPlatformProvider).then(
// (userData) => {
// this.funcName = 'social_login';
// this.loading = true
// this.myservice.post_data2(this.funcName, userData).subscribe(res => {
// this.loading = false;
// const respdata = res.json();
// console.log('Response data', respdata);
// if(respdata.status === "success")
// {
// this.storage.set('user_data', respdata);
// }
// else {
// this.myservice.presentToast('Something happend wrong');
// }
// }, (error) => {
// this.myservice.presentToast('Something went wrong');
// });
// }
// )}
<ion-header class="nav_header" [ngClass]="lang=='ar' ? 'ar' : ''">
<button class="nav_btn floatLeft" menuToggle>
<ion-icon name="menu"></ion-icon>
</button>
<div class="nav_header_title floatLeft textLeft">
{{'others.My Notification' | translate}}
</div>
<div class="clear"></div>
</ion-header>
<div class="clear"></div>
<ion-content class="" [ngClass]="lang=='ar' ? 'ar' : ''">
<div *ngIf="notify_info">
<ion-card *ngFor="let notify of notify_info.data">
<ion-card-content>
<ion-row>
<ion-col col-12 class=" p0 bus_name">
{{notify.subject}}
</ion-col>
</ion-row>
<ion-row>
<ion-col col-1 class="p0">
<ion-icon name="clock" class="bus_icon"></ion-icon>
</ion-col>
<ion-col col-8 class=" p0 bus_type ">
{{notify.message}}
</ion-col>
<ion-col col-3 class="textRight p0 bus_seat ">
<br> <strong>{{notify.date | date:'MM-dd-yyyy'}}</strong>
</ion-col>
</ion-row>
</ion-card-content>
</ion-card>
</div>
</ion-content>
\ No newline at end of file
import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { NotificationPage } from './notification';
import { TranslateModule } from '@ngx-translate/core';
@NgModule({
declarations: [
NotificationPage,
],
imports: [
IonicPageModule.forChild(NotificationPage),
TranslateModule.forChild()
],
})
export class NotificationPageModule {}
page-notification {
.background {
padding-top: 50px;
}
.bus_icon {
color: #767676;
font-size: 35px;
}
.bus_name {
color: #e46262;
font-size: 18px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.bus_time {
color: #a1a1a1;
font-size: 13px;
letter-spacing: 1px;
}
.bus_type {
color: #575757;
padding-left: 10px !important;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.bus_seat {
strong {
color: #3a3a3a;
}
}
.trip_bay {
width: 100%;
background: #FF585E;
color: #fff;
p {
color: #fff;
margin: 0px;
text-align: center;
padding: 10px;
font-weight: 300;
font-size: 18px;
}
}
}
\ No newline at end of file
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams, Events } from 'ionic-angular';
import { TranslateService } from '@ngx-translate/core';
/*-------------Edited by Adarsh-----------------*/
import { Myservice } from "./../../providers/services/myservice";
import { user } from "../../models/mymodel";
import { Storage } from '@ionic/storage';
/**
* Generated class for the TripPage page.
*
* See https://ionicframework.com/docs/components/#navigation for more info on
* Ionic pages and navigation.
*/
@IonicPage()
@Component({
selector: 'page-notification',
templateUrl: 'notification.html',
})
export class NotificationPage {
notify_info:any[];
user:user;
lang:string = 'en';
constructor(
public navCtrl: NavController,
public navParams: NavParams,
public myservice: Myservice,
public storage: Storage,
public translate: TranslateService,
public events: Events
) {
this.events.subscribe('user:lang', data => {
setTimeout(() => {
this.langTrans();
}, 500);
})
}
ionViewDidLoad() {
this.storage.get('user_data').then(data => {
var post_data = {"user_id":data.id};
this.myservice.web_post('notification',post_data).subscribe(res=>{
if(res.message=="success"){
this.notify_info = res;
console.log(this.notify_info);
} else {
this.myservice.presentToast("No trips found.!!");
}
this.notify_info = res;
},err=>{
this.myservice.presentToast("Please contact your service team something wrong happend");
});
});
this.langTrans();
}
langTrans(){
this.storage.get('lang').then(lang => {
if (lang != null) {
this.translate.use(lang)
this.lang = lang;
}
else {
this.translate.use('en');
this.lang = 'en';
}
})
}
}
<ion-header>
<div class="nav_header">
<button class="nav_btn nav_menu floatLeft" menuToggle>
</button>
<div class="nav_header_title floatLeft">
VERIFICATION
</div>
<div class="clear"></div>
</div>
</ion-header>
<ion-content class="theme_background">
<div class="login_wrapper">
<div class="logo_section">
<img src="assets/imgs/logo.png">
</div>
<div class="login_form">
<h3 class="floatLeft">We have sent an OTP <br> to <strong>+00 0000 000 000</strong></h3>
<div class="clear"></div>
<ion-list>
<ion-item>
<ion-input type="password" placeholder="Type the OTP here">
</ion-input>
</ion-item>
<div class="alert error">
Invalid OTP
</div>
<div class="textRight">
<button ion-button class="login_btn">Submit</button>
</div>
</ion-list>
</div>
</div>
</ion-content>
\ No newline at end of file
import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { OtpPage } from './otp';
@NgModule({
declarations: [
OtpPage,
],
imports: [
IonicPageModule.forChild(OtpPage),
],
})
export class OtpPageModule {}
page-otp {
.login_wrapper {
width: 100%;
padding-top: 45px;
padding-left: 20px;
padding-right: 20px;
.logo_section {
text-align: center;
padding-bottom: 30px;
img {
width: 130px;
}
}
.login_form {
h3 {
margin: 0px;
padding: 20px;
font-weight: 600;
font-size: 25px;
text-transform: uppercase;
strong {
color: rgba(254, 142, 9, 1);
}
}
.google {
background-color: rgba(241, 67, 54, 1);
color: #fff;
width: 50px;
height: 45px;
text-align: center;
font-size: 23px;
padding: 9px;
border-radius: 20px;
border-bottom-right-radius: 0px;
}
.list {
.date {
background-image: url("assets/imgs/calender.png");
background-position: center;
background-repeat: no-repeat;
background-size: 50px;
width: 50px;
height: 50px;
}
.item {
margin-bottom: 20px;
border: none !important;
box-shadow: none !important;
.item-inner {
border: none !important;
box-shadow: none !important;
.input-wrapper {
ion-datetime {
border: 1px solid rgba(213, 213, 213, 1);
border-radius: 30px;
border-bottom-right-radius: 0px;
min-width: 100%;
background-image: url("../assets/imgs/calender.png");
background-repeat: no-repeat;
background-size: 20px;
background-position: right 15px top 15px;
}
select {
border: 1px solid #d5d5d5;
border-radius: 30px;
border-bottom-right-radius: 0px;
padding-left: 20px !important;
width: 100%;
height: 45px;
-webkit-appearance: none;
-moz-appearance: none;
background-image: url("../assets/imgs/drop.png");
background-repeat: no-repeat;
background-position: right 10px top 5px;
background-size: 35px;
}
ion-input {
border: 1px solid rgba(213, 213, 213, 1);
border-radius: 30px;
background-color: #fff;
border-bottom-right-radius: 0px;
input {
height: 100%;
padding-left: 20px !important;
color: rgba(213, 213, 213, 1);
}
}
.dashed {
border: 1px dashed rgba(213, 213, 213, 1);
}
}
}
}
.login_btn {
background-color: rgba(254, 142, 9, 1);
color: #fff;
height: 45px;
font-size: 18px;
font-weight: 400;
border-radius: 30px;
background-position: 18px;
background-repeat: no-repeat;
background-size: 20px;
padding-left: 25px;
padding-right: 25px;
border-bottom-right-radius: 0px;
text-transform: capitalize;
font-weight: 300;
letter-spacing: 1px;
}
.inside_check {
padding-bottom: 10px;
.checkbox-icon {
width: 30px;
height: 30px;
border-radius: 50%;
border: none;
border: 1px solid rgba(213, 213, 213, 1);
}
.checkbox-checked {
background-color: rgba(254, 142, 9, 1);
}
.checkbox-inner {
left: 12px;
top: 9px;
}
ion-checkbox {
float: left;
}
ion-label {
float: left;
margin: 0px;
padding: 5px;
margin-left: 5px;
color: #000;
font-size: 16px;
a {
color: #000;
}
}
}
p {
color: rgba(254, 142, 9, 1);
font-size: 16px;
}
}
}
}
}
\ No newline at end of file
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
/**
* Generated class for the OtpPage page.
*
* See https://ionicframework.com/docs/components/#navigation for more info on
* Ionic pages and navigation.
*/
@IonicPage()
@Component({
selector: 'page-otp',
templateUrl: 'otp.html',
})
export class OtpPage {
constructor(public navCtrl: NavController, public navParams: NavParams) {
}
ionViewDidLoad() {
console.log('ionViewDidLoad OtpPage');
}
}
<ion-header [ngClass]="lang=='ar' ? 'ar' : ''">
<div class="nav_header">
<button class="nav_btn nav_back floatLeft" (click)="back()">
</button>
<div class="nav_header_title floatLeft">
{{'passanger.Passenger details' | translate}}
</div>
<div class="clear"></div>
</div>
</ion-header>
<ion-content [ngClass]="lang=='ar' ? 'ar' : ''">
<form [formGroup]="customerForm" (ngSubmit)="book_customer(customerForm.value)">
<div class="passenger_detail">
<div class="passenger_header">
<h5>CONTACT DETAILS</h5>
<p>Your Ticket will be send to these details</p>
</div>
<ion-list>
<ion-item>
<ion-input type="email" formControlName="email" placeholder="Email"></ion-input>
</ion-item>
<ion-item>
<ion-input type="number" formControlName="mobnumber" placeholder="Mobile Number"></ion-input>
</ion-item>
</ion-list>
<div formArrayName="customer" *ngFor="let child of customerForm.get('customer').controls; let i = index">
<div class="passenger_header">
<h5><strong>SEAT:{{selectedseats[i].seatNumber}} </strong> {{'passanger.Passenger detail' | translate}}</h5>
</div>
<ion-list [formGroupName]="i">
<ion-item>
<ion-input type="hidden" formControlName="seatNumber" [value]="selectedseats[i].seatNumber">
</ion-input>
</ion-item>
<ion-item>
<ion-input type="text" formControlName="name" placeholder="{{'Passenger Name' | translate}}">
</ion-input>
</ion-item>
<div class="row">
<div class="width50 floatLeft pr10">
<ion-item>
<ion-input type="number" formControlName="age" placeholder="Age">
</ion-input>
</ion-item>
</div>
<div class="width50 floatRight" style="padding-top: 10px;">
<ion-row radio-group formControlName="gender">
<ion-col col-6>
<ion-label class="floatLeft">{{'passanger.Male' | translate}}</ion-label>
<ion-radio class="floatLeft" value="Male" *ngIf="getGender_state(i,'F')">
</ion-radio>
<div class="clear"></div>
</ion-col>
<ion-col col-6>
<ion-label class="floatLeft">{{'passanger.Female' | translate}}</ion-label>
<ion-radio class="floatLeft" value="Female" *ngIf="getGender_state(i,'M')">
</ion-radio>
<div class="clear"></div>
</ion-col>
</ion-row>
</div>
<div class="clear"></div>
</div>
<ion-item>
<ion-input type="text" placeholder="Add ID Number" class="add">
</ion-input>
</ion-item>
</ion-list>
</div>
<div class="passenger_header">
<div class="row">
<div class="width50 floatLeft pr10">
<h5>FARE DETAILS</h5>
</div>
<div class="width50 floatRight pr10 textRight">
<h6><strong>Asian Travels</strong> Seats :6</h6>
</div>
</div>
</div>
<div class="fare_details">
<ion-row>
<ion-col class="p0">
<p>Base Price</p>
</ion-col>
<ion-col class="textRight p0">
<p><strong>$ {{bookFare.sum}}</strong></p>
</ion-col>
</ion-row>
<ion-row>
<ion-col class="p0">
<p>Service Tax</p>
</ion-col>
<ion-col class="textRight p0">
<p><strong>$ {{bookFare.ServiceTax}}</strong></p>
</ion-col>
</ion-row>
<ion-row>
<ion-col class="p0">
<p>Transaction Fee</p>
</ion-col>
<ion-col class="textRight p0">
<p><strong>$ {{bookFare.trasactionfee}}</strong></p>
</ion-col>
</ion-row>
<ion-row>
<ion-col class="p0">
<p>Discount</p>
</ion-col>
<ion-col class="textRight p0">
<p><strong>-$ {{passfare.discount}}</strong></p>
</ion-col>
</ion-row>
<hr>
<br>
<ion-row>
<ion-col class="p0">
<p>Total Amount</p>
</ion-col>
<ion-col class="textRight p0">
<p><strong>$ {{passfare.total}}</strong></p>
</ion-col>
</ion-row>
<hr>
<br>
<div>
<button class="login_btn">Proceed to Payment</button>
</div>
</div>
</div>
</form>
</ion-content>
\ No newline at end of file
import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { PassengerdetailPage } from './passengerdetail';
import { TranslateModule } from '@ngx-translate/core';
import { CurrencyPipe } from '@angular/common';
@NgModule({
declarations: [
PassengerdetailPage,
],
imports: [
IonicPageModule.forChild(PassengerdetailPage),
TranslateModule.forChild()
],
providers:[CurrencyPipe]
})
export class PassengerdetailPageModule {}
page-passengerdetail {
.passenger_detail {
width: 100%;
padding: 20px;
.passenger_header {
padding-bottom: 20px;
padding-top: 20px;
h5 {
color: rgba(98, 56, 28, 1);
margin: 0px;
padding: 0px;
font-size: 16px;
font-weight: 600;
strong {
color: rgba(254, 142, 9, 1);
}
}
h6 {
margin: 0px;
padding: 0px;
font-size: 16px;
font-weight: 400;
color: #000;
strong {
margin-right: 5px;
}
}
p {
color: rgba(114, 114, 114, 1);
padding-top: 5px;
padding-bottom: 5px;
margin: 0px;
}
}
.fare_details {
width: 100%;
.row {
padding-bottom: 20px;
}
p {
margin: 0px;
color: rgba(114, 114, 114, 1);
font-size: 16px;
strong {
color: #000;
}
}
.login_btn {
background-color: rgba(254, 142, 9, 1);
color: #fff;
height: 45px;
font-size: 18px;
font-weight: 400;
border-radius: 30px;
background-position: 18px;
background-repeat: no-repeat;
background-size: 20px;
padding-left: 25px;
padding-right: 25px;
border-bottom-right-radius: 0px;
text-transform: capitalize;
font-weight: 300;
letter-spacing: 1px;
width: 100%;
}
}
.list {
margin: 0px;
.label {
margin: 0px;
}
.radio {
margin: 0px;
margin-left: 15px;
.radio-icon {
border-color: rgba(213, 213, 213, 1)
}
.radio-checked {
border-color: rgba(254, 142, 9, 1);
.radio-inner {
background-color: rgba(254, 142, 9, 1);
}
}
}
.date {
background-image: url("assets/imgs/calender.png");
background-position: center;
background-repeat: no-repeat;
background-size: 50px;
width: 50px;
height: 50px;
}
.item {
margin-bottom: 20px;
border: none !important;
box-shadow: none !important;
.item-inner {
border: none !important;
box-shadow: none !important;
.input-wrapper {
.add {
background-image: url("../assets/imgs/add.png");
background-repeat: no-repeat;
background-size: 28px;
background-position: right 10px top 10px;
}
ion-label {
margin: 0px;
}
ion-datetime {
border: 1px solid rgba(213, 213, 213, 1);
border-radius: 30px;
border-bottom-right-radius: 0px;
min-width: 100%;
background-image: url("../assets/imgs/calender.png");
background-repeat: no-repeat;
background-size: 20px;
background-position: right 15px top 15px;
}
select {
border: 1px solid #d5d5d5;
border-radius: 30px;
border-bottom-right-radius: 0px;
padding-left: 20px !important;
width: 100%;
height: 45px;
-webkit-appearance: none;
-moz-appearance: none;
background-image: url("../assets/imgs/drop.png");
background-repeat: no-repeat;
background-position: right 10px top 5px;
background-size: 35px;
}
ion-input {
border: 1px solid rgba(213, 213, 213, 1);
border-radius: 30px;
background-color: #fff;
border-bottom-right-radius: 0px;
input {
height: 100%;
padding-left: 25px !important;
color: rgba(213, 213, 213, 1);
&::placeholder {
color: #000;
}
}
}
.dashed {
border: 1px dashed rgba(213, 213, 213, 1);
}
}
}
}
p {
color: rgba(254, 142, 9, 1);
font-size: 16px;
padding-top: 15px;
span {
color: rgba(114, 114, 114, 1);
}
}
}
}
}
\ No newline at end of file
import { Component } from '@angular/core';
import { Validators, FormBuilder, FormGroup, FormArray, FormControl } from '@angular/forms';
import { IonicPage, NavController, NavParams, ModalController, Events,AlertController } from 'ionic-angular';
import { ValidationService } from '../../providers/services/validation.service'
import { Myservice } from "./../../providers/services/myservice";
import { Storage } from '@ionic/storage';
import { TranslateService } from '@ngx-translate/core';
import { CurrencyPipe } from '@angular/common';
import { InAppBrowser, InAppBrowserEvent } from '@ionic-native/in-app-browser/ngx';
@IonicPage()
@Component({
selector: 'page-passengerdetail',
templateUrl: 'passengerdetail.html',
})
export class PassengerdetailPage {
offervalue:any;
promocodeamount:any;
promocodereposne:any;
promocode: any;
dropointname:any;
droplacedata:any;
boardplacedata:any;
total_amount:any;
book_result:any;
bookingId: any;
gstflag:boolean;
passfare:any;
bookFare :any;
passingdata: any;
bookingdata: any;
mobnumPattern = '^((\\+?)|0)?[0-9]{0,20}$';
emailPattern = '^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$';
bookData: any;
selectedseats: any;
droppingpointcode: any;
boardingpointcode: any;
operatordata: any;
searchData: any;
seatcount: number;
result: any;
customerForm: FormGroup;
bookLoad: boolean;
user: any;
gstResponse: any;
lang = 'en';
funcName: any;
get_val: any;
constructor(public alertCtrl: AlertController,private iab: InAppBrowser,public currencyPipe: CurrencyPipe,public navCtrl: NavController, public vs: ValidationService, public navParams: NavParams, private formBuilder: FormBuilder, public myservice: Myservice, public storage: Storage, public modalCtrl: ModalController, public translate: TranslateService, public events: Events) {
this.get_val = '';
this.promocodeamount=0;
this.events.subscribe('user:created', (user, time) => {
this.user = user.data;
console.log('User data' , this.user)
});
this.storage.get('user_data').then(data =>{
console.log(data);
if (data != null) {
console.log('User Logged in');
this.user = data.data;
console.log('User data' , this.user);
}
})
this.myservice.post_data2('getGst',null).subscribe(res => {
const gstres = res.json();
this.gstResponse = gstres.data;
console.log('Gst response', this.gstResponse);
this.bookFare = this.fareCharge(this.selectedseats,0);
})
this.dropointname = this.navParams.get('dropointname');
this.droplacedata = this.navParams.get('droplacedata');
this.boardplacedata = this.navParams.get('brdPlace');
this.droppingpointcode = this.navParams.get('droppingpointcode');
this.selectedseats = this.navParams.get('selectedseats');
this.boardingpointcode = this.navParams.get('boardingpointcode');
this.operatordata = this.navParams.get('operatordata');
this.searchData = this.navParams.get('search');
this.result = this.navParams.get('data');
this.bookFare = this.fareCharge(this.selectedseats,0);
this.events.subscribe('user:lang', data => {
setTimeout(() => {
this.langTrans();
}, 500);
})
this.customerForm = this.formBuilder.group({
'email': ['', Validators.compose([Validators.required, Validators.maxLength(50), Validators.pattern(this.emailPattern)])],
'mobnumber': ['', Validators.compose([Validators.required, Validators.minLength(10), Validators.maxLength(15), Validators.pattern(this.mobnumPattern)])],
});
var passengerCount = this.selectedseats.length;
this.customerForm.addControl('customer', new FormArray([]));
for (let i = 0; i < passengerCount; i++) {
(<FormArray>this.customerForm.controls['customer']).push(
new FormGroup({
'seatNumber': new FormControl(''),
'name': new FormControl('', Validators.required),
'age': new FormControl(null, Validators.required),
'gender': new FormControl("Male", Validators.required)
})
);
}
}
agree_terms()
{
let profileModal = this.modalCtrl.create("PromoPage");
profileModal.onDidDismiss(data => {
this.promocodereposne=data;
if(data)
{
console.log('Promocdoe response',this.promocodereposne);
this.check_promo();
}
})
profileModal.present();
}
check_promo() {
console.log('Bookfare' , this.bookFare);
if (this.promocodereposne.status === 'success') {
console.log('this.promocodereposne.data.rate',this.bookFare.sum*this.promocodereposne.data.rate)
let offer = ((this.bookFare.sum * this.promocodereposne.data.rate) / 100);
console.log('Offer value',offer)
this.offervalue = offer;
offer = offer > this.promocodereposne.data.max_limit ? this.promocodereposne.data.max_limit : offer;
this.bookFare.discount = offer;
this.bookFare.sum = this.bookFare.sum - offer;
console.log('Bookfaresum', this.bookFare.sum);
this.promocode = this.promocodereposne.data.id;
console.log(this.promocodereposne.data);
this.promocodeamount = this.promocodereposne.data.rate;
this.bookFare = this.fareCharge(this.selectedseats,this.offervalue);
this.bookFare.discount = offer;
}
else
{
this.bookFare.discount = 0;
this.promocode = 0;
console.log('failed');
this.bookFare = this.fareCharge(this.selectedseats, 0);
}
}
langTrans() {
this.storage.get('lang').then(lang => {
if (lang != null) {
this.translate.use(lang)
this.lang = lang;
}
else {
this.translate.use('en')
}
})
}
ionViewDidLoad() {
this.langTrans();
}
back() {
this.navCtrl.pop();
}
book_customer(value)
{
var This= this
const confirm = this.alertCtrl.create({
title: 'Proceed to Payment',
message: 'I hereby accept the terms and conditions of TicketRobo ',
buttons: [
{
text: 'Disagree',
handler: () => {
this.navCtrl.push('HomePage');
this.myservice.presentToast('Sorry,booking failed')
}
},
{
text: 'Agree',
handler: () => {
This.book(value);
}
}
]
});
confirm.present();
}
book(value) {
console.log('Customer form value', this.customerForm.value);
if (this.customerForm.valid) {
var passengerCount = this.selectedseats.length;
var formData = new FormData()
console.log('Form data', formData);
const pass_data = this.customerForm.value;
this.droppingpointcode = this.droppingpointcode !== '' ? this.droppingpointcode : '0000';
this.boardingpointcode = this.boardingpointcode !== '' ? this.boardingpointcode : '0000';
if (this.user != null) {
const postData = {
'operatorCode': this.operatordata.operatorCode,
'scheduleCode': this.operatordata.scheduleCode,
'travelDate': this.searchData.travelDate,
'fromStationCode': this.searchData.fromStationId,
'toStationCode': this.searchData.toStationId,
'boardingPointCode': this.boardingpointcode,
'droppingPointCode': this.droppingpointcode,
'email': pass_data.email,
'mobile': pass_data.mobnumber,
'passenger': pass_data.customer
};
console.log('Post data values', postData);
const url1 = 'tempbooking?username=javatest&password=123456';
console.log(url1);
var url = { 'url': url1, 'data': 'data=' + JSON.stringify(postData) }
this.myservice.show_loader();
this.myservice.online_service('online_service', url).subscribe(res => {
this.myservice.hide_loader();
this.book_result = res;
if ( this.book_result.message === 'Success') {
this.bookingId = this.book_result.blockingCode;
// this.myservice.presentToast('Your seat successfully blocked for 10 Minutes');
this.paymentFun();
// this.paymentopen();
}
else {
this.myservice.presentToast('Your booking failed , Please try again');
this.navCtrl.push('HomePage');
}
})
} else {
this.myservice.presentToast('Sorry your are not logged into ticketrobo');
console.log("not logged")
let profileModal = this.modalCtrl.create("AuthcheckPage");
profileModal.onDidDismiss(data => {
this.user = data;
})
profileModal.present();
}
} else {
this.myservice.presentToast('Invalid Passenger Email or Mobile number');
}
}
fareCharge(passenger: any , promocodeamount:number) {
this.promocodeamount = 0;
this.get_val=0
console.log('Promocode',this.promocodereposne)
console.log('Gst response',this.gstResponse);
//tslint-disbale
const sum = passenger.map(item => item.baseFare).reduce((prev, next) => parseInt(prev) + parseInt(next));
// tslint:disable-next-line:radix
const ServiceTax = passenger.map(item => item.operatorServiceTax).reduce((prev, next) => parseInt(prev) + parseInt(next));
// tslint:disable-next-line:radix
const ServiceCharge = passenger.map(item => item.operatorServiceCharge).reduce((prev, next) => parseInt(prev) + parseInt(next));
// tslint:disable-next-line:radix
let total = parseFloat(sum) + parseFloat(ServiceTax) ;
let transactionfee = (total * 2.5) / 100;
console.log('Transaction fee', transactionfee);
// if(this.operatordata.acBus === "Yes") {
// this.get_val = Math.round((sum * this.gstResponse) / 100);
// console.log('GST VALUE' , this.get_val);
// }
// if(this.operatordata.acBus === "No") {
// this.get_val = 0
// }
var totalamount = parseFloat(sum) + parseFloat(ServiceTax) + Math.round(transactionfee) - Math.round(promocodeamount);
console.log('Total amount' , totalamount);
const res = { 'sum': sum, 'ServiceTax': ServiceTax, 'ServiceCharge': ServiceCharge, 'totalfarewithgst': this.getCurrency(totalamount), 'discount': 0, 'payment': 'online','Gst':this.getCurrency(this.get_val) ,'trasactionfee':this.getCurrency(transactionfee)};
const passingdata = {'ServiceCharge': ServiceCharge,'ServiceTax': ServiceTax,'discount':promocodeamount,'gst':this.get_val,'payment':'online','sum':sum ,'total':totalamount,'trasactionfee':this.getCurrency(transactionfee)}
this.passfare =passingdata ;
console.log('Total fare' , res);
return res;
}
getCurrency(amount: number) {
return this.currencyPipe.transform(amount,'₹',true,'1.2-2');
}
paymentFun() {
console.log('Total fare', this.total_amount);
this.bookLoad = true;
const This = this;
console.log('Passfare total' , this.passfare.total * 100);
var options = {
description: 'Ticket Robo Seat Booking. Booking ID:' + this.bookingId,
image: '../assets/imgs/logo.png',
currency: 'INR',
key: 'rzp_live_KBTt75APHMzR4I',
amount: (this.passfare.total * 100),
name: this.user.name,
prefill: {
email: this.user.username,
contact: '',
name: this.user.name
},
theme: {
color: '#F37254'
}
}
var successCallback = function(payment_id) {
console.log('Razopayment id',payment_id);
var paymnt_id= payment_id;
This.success(paymnt_id);
}
var cancelCallback = function(error) {
alert(error.description + ' (Error '+error.code+')')
}
RazorpayCheckout.open(options, successCallback, cancelCallback)
}
getGender_state(index: any, type: any) {
if (this.selectedseats[index].seatStatus === type) {
return false;
} else {
return true;
}
}
success(transId) {
console.log('Transaction',this.bookFare.trasactionfee)
var pass_data = {
'basic': {'from': this.searchData.sourceName, 'to': this.searchData.destinationName, 'start_time': this.operatordata.departureTime, 'arrival':this.operatordata.arrivalTime, 'travels': this.operatordata.operatorName, 'board': this.boardplacedata.brdPlace, 'drop': this.dropointname},
'fare' : this.passfare,
'boardingPointCode':this.boardingpointcode,
'busType':this.operatordata.busType,
'droppingPointCode':this.droppingpointcode,
'email': this.customerForm.value['email'],
'fromStationCode': this.searchData.fromStationId,
'mobile':this.customerForm.value['mobnumber'],
'paymentType': 'online',
'scheduleCode':this.operatordata.scheduleCode,
'toStationCode':this.searchData.toStationId,
'transId':transId,
'operatorCode':this.operatordata.operatorCode,
'travelDate': this.searchData.travelDate,
'travels' : this.operatordata.operatorName,
'passenger' : this.customerForm.value.customer,
'bookingId':this.bookingId,
'userId' :this.user.id,
'usertype':'user',
};
console.log('Passing data to server' , pass_data)
this.bookLoad = true;
const postData = {'bookingCode': this.bookingId};
const url1 = 'confirmbooking?username=javatest&password=123456';
console.log(url1);
var url = {'url': url1, 'data': 'data=' + JSON.stringify(postData)}
this.myservice.show_loader();
this.myservice.online_service('online_service', url).subscribe(res => {
console.log('Response' , res);
console.log(res.ticketDetails.bookingCode);
this.myservice.hide_loader();
if(res.message === 'Success')
{
this.funcName = 'bookseat';
this.myservice.show_loader()
this.myservice.bookseat(this.funcName , pass_data).subscribe(responseData => {
this.myservice.hide_loader();
console.log('Response data',responseData);
if ( responseData.status === 'success') {
this.navCtrl.push('BooksuccessPage',{"booking_id" : res.ticketDetails.bookingCode});
}
})
}
})
}
}
<ion-header>
<div class="nav_header">
<button class="nav_btn nav_menu floatLeft" menuToggle>
</button>
<div class="nav_header_title floatLeft">
PROFILE
</div>
<div class="clear"></div>
</div>
</ion-header>
<ion-content class="theme_background">
<div class="profile_wrapper">
<div class="profile_banner">
<div class="profile_circle">
</div>
<div class="profile_detail">
<div class="edit" (click)="edit()"></div>
<h4>Shamjith</h4>
<p>[email protected]</p>
<h6>+0 0000 888 000</h6>
</div>
<div class="clear"></div>
</div>
<ul>
<li (click)="home()"><span><img src="assets/imgs/menu1.png"></span>Home</li>
<li (click)="trip()"><span><img src="assets/imgs/menu2.png"></span>My Trips</li>
<li (click)="track()"><span><img src="assets/imgs/menu3.png"></span>Track</li>
<li (click)="cancel()"><span><img src="assets/imgs/menu4.png"></span>Cancel Ticket</li>
<li (click)="changepass()"><span><img src="assets/imgs/menu5.png"></span>Change Password</li>
<li (click)="contact()"><span><img src="assets/imgs/menu6.png"></span>Contacts</li>
</ul>
<div class="widthFull textCenter">
<button class="logout" (click)="logout()">LOGOUT</button>
</div>
</div>
</ion-content>
\ No newline at end of file
import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { ProfilePage } from './profile';
@NgModule({
declarations: [
ProfilePage,
],
imports: [
IonicPageModule.forChild(ProfilePage),
],
})
export class ProfilePageModule {}
page-profile {
.profile_wrapper {
width: 100%;
.profile_banner {
width: 100%;
padding: 20px;
.profile_circle {
width: 70px;
height: 70px;
background: #e7e7e7;
border-radius: 50%;
float: left;
img {
width: 100%;
height: 100%;
border-radius: 50%;
object-fit: cover;
object-position: center;
}
}
.profile_detail {
float: left;
width: calc(100% - 70px);
padding-left: 15px;
position: relative;
.edit {
width: 35px;
height: 35px;
background: url("../assets/imgs/edit.png");
background-position: center;
background-repeat: no-repeat;
background-size: 100%;
position: absolute;
top: 15px;
right: 0px;
}
h4 {
margin: 0px;
padding: 0px;
font-size: 20px;
font-weight: 400;
padding-bottom: 4px;
}
p {
margin: 0px;
padding: 0px;
font-weight: 300;
padding-bottom: 4px;
}
h6 {
margin: 0px;
padding: 0px;
font-weight: 400;
}
}
}
ul {
margin: 0px;
padding: 20px;
li {
font-weight: 300;
font-size: 17px;
list-style: none;
padding-bottom: 15px;
background-image: url("../assets/imgs/arrow_right.png");
background-repeat: no-repeat;
background-position: right 10px top 10px;
background-size: 17px;
span {
margin-right: 10px;
img {
width: 30px;
position: relative;
top: 8px;
}
}
}
}
.logout {
background-color: #e7e7e7;
color: #000;
height: 40px;
border-radius: 20px;
width: calc(100% - 40px);
margin: 0 auto;
}
}
}
\ No newline at end of file
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
/**
* Generated class for the ProfilePage page.
*
* See https://ionicframework.com/docs/components/#navigation for more info on
* Ionic pages and navigation.
*/
@IonicPage()
@Component({
selector: 'page-profile',
templateUrl: 'profile.html',
})
export class ProfilePage {
constructor(public navCtrl: NavController, public navParams: NavParams) {
}
ionViewDidLoad() {
console.log('ionViewDidLoad ProfilePage');
}
home(){
this.navCtrl.push('HomePage');
}
cancel(){
this.navCtrl.push('CanceltripPage');
}
track() {
this.navCtrl.push('TrackingPage');
}
trip() {
this.navCtrl.push('TripPage');
}
changepass(){
this.navCtrl.push('ChangepassPage');
}
contact(){
this.navCtrl.push('ContactPage');
}
logout(){
this.navCtrl.push('LoginPage');
}
edit() {
this.navCtrl.push("EditprofilePage");
}
}
<!--
Generated template for the PromoPage page.
See http://ionicframework.com/docs/components/#navigation for more info on
Ionic pages and navigation.
-->
<ion-card>
<ion-card-header>
Promocode
<ion-label class="details">Enter Promocode</ion-label>
</ion-card-header>
<ion-card-content>
<ion-item>
<ion-input type="email" placeholder="PROMO_CODE" #promo></ion-input>
</ion-item>
<button ion-button (click)="check_promo(promo)">APPLY</button>
</ion-card-content>
</ion-card>
\ No newline at end of file
import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { PromoPage } from './promo';
@NgModule({
declarations: [
PromoPage,
],
imports: [
IonicPageModule.forChild(PromoPage),
],
})
export class PromoPageModule {}
page-promo {
.card {
border-radius: 10px;
.card-header {
background: #4f5cd5;
color: #fff;
padding: 10px;
font-size: 20px;
font-weight: 300;
}
.checkbox {
margin-right: 15px !important;
}
.label {
font-weight: 600;
font-size: 16px;
}
.text-input {
width: 100%;
height: 35px !important;
border-bottom: 1px solid #c7c7c7;
}
.details
{
font-size: 15px;
color: wheat;
}
}
.done_btn {
height: 50px;
border-radius: 0px;
font-size: 20px;
font-weight: 400;
letter-spacing: 2px;
left: 0px;
right: 0px;
bottom: 0px;
background-image: linear-gradient(to right, #28328c, #4f5cd5);
}
.amount
{
font-weight: 600;
font-size: 16px;
color : red;
}
}
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams,ViewController } from 'ionic-angular';
import { Storage } from '@ionic/storage';
import { Myservice } from "./../../providers/services/myservice";
/**
* Generated class for the PromoPage page.
*
* See https://ionicframework.com/docs/components/#navigation for more info on
* Ionic pages and navigation.
*/
@IonicPage()
@Component({
selector: 'page-promo',
templateUrl: 'promo.html',
})
export class PromoPage {
funcName:any;
user:any;
constructor( public viewCtrl: ViewController,public navCtrl: NavController, public navParams: NavParams,public storage: Storage,public myservice: Myservice) {
this.storage.get('user_data').then(data =>{
console.log(data);
if (data != null) {
console.log('User Logged in');
this.user = data.data;
console.log('User data' , this.user);
}
})
}
ionViewDidLoad() {
console.log('ionViewDidLoad PromoPage');
}
check_promo(promo)
{
this.myservice.show_loader();
console.log('Values',promo.value);
const sendData = {'userId': this.user.id, 'code': promo.value};
this.funcName = 'check_promo';
this.myservice.online_service(this.funcName, sendData).subscribe(response => {
this.myservice.hide_loader();
console.log('Response in payment',response);
if(response.status === "error")
{
this.myservice.presentToast(response.message);
this.viewCtrl.dismiss(response);
}
else {
this.myservice.presentToast('Your Promocode has been applied');
this.viewCtrl.dismiss(response);
}
})
}
}
<ion-header [ngClass]="lang=='ar' ? 'ar' : ''">
<div class="nav_header">
<button class="nav_btn nav_back floatLeft" (click)="back()">
</button>
<div class="nav_header_title floatLeft">
AVAILABLE BUSES
</div>
<button class="nav_btn nav_filter floatLeft" (click)="filter()">
</button>
<div class="clear"></div>
</div>
<div class="nav_header">
<div class="trip_bay" *ngIf="search">
<ion-row>
<ion-col col-4 class="p0">
<p>{{search.sourceName}}</p>
</ion-col>
<ion-col col-4 class="p0">
<p>
<ion-icon name="md-swap" (click)="switch_trip(search)"></ion-icon>
</p>
</ion-col>
<ion-col col-4 class="p0">
<p>{{search.destinationName}}</p>
</ion-col>
</ion-row>
</div>
</div>
<div class="nav_header">
<div class="trip_bay" *ngIf="search">
<ion-row>
<ion-col col-3 class="p0">
<p>
<ion-icon name="arrow-back" (click)="change_date('prev')"></ion-icon>
</p>
</ion-col>
<ion-col col-6 class="p0">
<p>{{search.travelDate | date:'dd - MMMM - yyyy'}}</p>
</ion-col>
<ion-col col-3 class="p0">
<p>
<ion-icon name="arrow-forward" (click)="change_date('next')"></ion-icon>
</p>
</ion-col>
</ion-row>
</div>
</div>
</ion-header>
<ion-content class="theme_background" *ngIf="bus_data" [ngClass]="lang=='ar' ? 'ar' : ''">
<div *ngIf="!user_filter">
<ion-card *ngFor="let bus of bus_data.searchResult ;let i = index" [attr.data-target]="'#viewseat' + i" (click)="get_seats(bus.scheduleCode,bus.scheduleCode,bus.operatorCode)">
<ion-card-content>
<ion-row>
<ion-col col-8 class="p0 bus_name">{{bus.operatorName}}</ion-col>
<ion-col col-4 class="textRight p0 bus_seats">
{{bus.availableSeats}} {{'search.Seats' | translate}}
</ion-col>
</ion-row>
<ion-row>
<ion-col col-6 class="textLeft p0 bus_time">{{bus.departureTime | dateSet}} - {{bus.arrivalTime | dateSet}}</ion-col>
<ion-col col-6 class="textRight bus_type">{{bus.busType}}</ion-col>
</ion-row>
<ion-row>
<ion-col col-6 class=" p0 bus_fare ">
<strong>{{checkPrice(bus.ticketFare,bus.scheduleCode)}}</strong>
</ion-col>
<ion-col col-6 class="textRight p0">
</ion-col>
</ion-row>
</ion-card-content>
<button class="book_btn">Book</button>
</ion-card>
</div>
<div *ngIf="user_filter">
<ion-card *ngFor="let bus of bus_data.searchResult | searchPipe: user_filter;let i = index" [attr.data-target]="'#viewseat' + i" (click)="get_seats(bus.scheduleCode,bus.scheduleCode,bus.operatorCode)">
<ion-card-content>
<ion-row>
<ion-col col-8 class="p0 bus_name">{{bus.operatorName}}</ion-col>
<ion-col col-4 class="textRight p0 bus_seats">
{{bus.availableSeats}} {{'search.Seats' | translate}}
</ion-col>
</ion-row>
<ion-row>
<ion-col col-6 class="textLeft p0 bus_time">{{bus.departureTime | dateSet}} - {{bus.arrivalTime | dateSet}}</ion-col>
<ion-col col-6 class="textRight bus_type">{{bus.busType}}</ion-col>
</ion-row>
<ion-row>
<ion-col col-8 class=" p0 bus_fare ">
<strong>{{checkPrice(bus.ticketFare,bus.scheduleCode)}}</strong>
</ion-col>
<ion-col col-4 class="textRight p0">
</ion-col>
</ion-row>
</ion-card-content>
<button class="book_btn">Book</button>
</ion-card>
</div>
</ion-content>
\ No newline at end of file
import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { SearchresultsPage } from './searchresults';
import { TranslateModule } from '@ngx-translate/core';
import { DateSet }from '../../providers/pipe/dateSet.pipe';
import { SearchPipe} from '../../providers/pipe/search.pipe';
@NgModule({
declarations: [
SearchresultsPage,
DateSet,
SearchPipe
],
imports: [
IonicPageModule.forChild(SearchresultsPage),
TranslateModule.forChild()
],
})
export class SearchresultsPageModule {}
page-searchresults {
.nav_header {
box-shadow: none !important;
}
.background {
background-image: url("../assets/imgs/bg.png");
}
.card {
border-radius: 20px;
-webkit-border-radius: 20px;
-moz-border-radius: 20px;
-ms-border-radius: 20px;
-o-border-radius: 20px;
border-bottom-right-radius: 0px;
border: 1px solid rgba(213, 213, 213, 1);
position: relative;
box-shadow: none;
.book_btn {
position: absolute;
bottom: -1px;
right: 0px;
border-radius: 20px;
background-color: rgba(254, 142, 9, 1);
border-bottom-right-radius: 0px;
color: #fff;
height: 40px;
padding-left: 25px;
padding-right: 25px;
font-size: 16px;
}
}
.card-header {
border-bottom: 1px solid #c7c7c7;
}
.card-content {
padding-top: 15px !important;
}
.bus_icon {
color: #767676;
font-size: 35px;
}
.bus_name {
color: rgba(98, 56, 28, 1);
font-size: 18px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
font-weight: 500;
}
.bus_seats {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
font-size: 18px;
}
.bus_time {
color: rgba(114, 114, 114, 1);
font-size: 14px;
letter-spacing: 1px;
}
.bus_type {
color: #575757;
padding-left: 10px !important;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.bus_fare {
strong {
color: #3a3a3a;
font-size: 18px;
}
}
.trip_bay {
width: 100%;
background-color: rgba(248, 247, 246, 1);
color: #fff;
p {
margin: 0px;
text-align: center;
padding: 10px;
font-weight: 300;
font-size: 18px;
color: #3a3a3a;
background-color: #fff;
ion-icon {
color: rgba(98, 56, 28, 1);
}
}
}
}
\ No newline at end of file
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams,ModalController, Events } from 'ionic-angular';
/*-------------Edited by Adarsh-----------------*/
import { Myservice } from "./../../providers/services/myservice";
import { TranslateService } from '@ngx-translate/core';
import { Storage } from '@ionic/storage';
import {DateSet} from "./../../providers/pipe/dateSet.pipe"
@IonicPage()
@Component({
selector: 'page-searchresults',
templateUrl: 'searchresults.html',
})
export class SearchresultsPage {
load:boolean;
funcName:any;
selectseatdata:any;
operatorData :any;
seatlayout :any;
boardingpointdata:any;
droppingpointdata:any;
url_seatlayout :any;
resp_data:any;
book_type:any;
currentTime:any;
finalTime: any;
choosen_date :any;
today :any;
sendingdata:any;
result:any;
bus_data:any;
operator_data:any;
search:any;
filter_result:any;
lang:any;
user_filter:any;
empty_flag : boolean;
booking_selected: any[];
customAmount: any[];
public time :number;
/*---------------------------------Begin of constructor------------------------------------------------------------*/
constructor(
public navCtrl: NavController,
public navParams: NavParams,
public modalCtrl: ModalController,
public myservice: Myservice,
public translate: TranslateService,
public events: Events,
public storage: Storage
)
{
this.user_filter = null;
this.customAmount = [];
this.booking_selected = new Array();
this.empty_flag= false;
this.result = navParams.get('result'); //Recieve data from homepage
this.search = navParams.get('search'); //Recieve data from homepage
if( this.result.code == 0) { //Condition if no bus available
this.empty_flag= true;
this.myservice.presentToast("Currently no service avilable in this route on "+this.search.travelDate);
}
this.bus_data= this.result;
if (this.bus_data.code === '1') { //Checking if result from server array or not
if (this.bus_data.searchResult instanceof Array !== true) {
this.bus_data.searchResult = new Array(this.bus_data.searchResult);
}
console.log(this.bus_data);
}
this.events.subscribe('user:lang', data => {
setTimeout(() => {
this.langTrans();
}, 500);
})
var This = this;
This. customprice();
}
/***********************End of Constructor***************************** */
ionViewDidLoad() {
this.langTrans();
}
/*-----------------------------------------Language Change------------------------------*/
langTrans() {
this.storage.get('lang').then(lang =>{
if (lang != null) {
this.translate.use(lang)
this.lang = lang;
}
else {
this.lang = 'en';
this.translate.use('en') //s
}
})
}
/*--------------------------Filter Begins---------------------------------------------------------------*/
/*------------------------------Opening filter model----------------------------------------------------------*/
filter() {
let profileModal = this.modalCtrl.create("FilterPage",{params:this.bus_data.searchResult});
profileModal.onDidDismiss(data => {
console.log(data);
this.user_filter = data;
console.log('User filter', this.user_filter)
});
profileModal.present();
}
back() {
this.navCtrl.pop();
}
/*---------------------------- Calling custom price----------------------------------------------------------------*/
customprice() {
var passdata = {
destinationName: this.search.destinationName,
fromStationId: this.search.fromStationId,
returnDate: "",
sourceName: this.search.sourceName,
toStationId: this.search.toStationId,
travelDate: this.search.travelDate,
}
this.funcName = 'customPrice';
this.myservice.show_loader();
this.myservice.online_service(this.funcName, passdata).subscribe(response =>{
this.myservice.hide_loader();
console.log('Response' , response);
if ( response.status === 'success') {
this.customAmount = response.data;
} else {
this.customAmount = [];
}
});
}
/*---------------------------------------Top bar switching between routes--------------------------- */
switch_trip(search) {
/* Swaping station id for search*/
var temp = search.fromStationId;
this.search.fromStationId = search.toStationId;
this.search.toStationId = temp;
/* Swaping source and destination names for search*/
var temp1 = search.sourceName;
this.search.sourceName = search.destinationName;
this.search.destinationName=temp1;
this.sendingdata= 'search?username=javatest&password=123456&travelDate=' + this.search.travelDate+'&fromStationCode=' + this.search.fromStationId + '&toStationCode=' + this.search.toStationId;
var data= {"url":this.sendingdata ,"data":null}
this.myservice.show_loader();
this.myservice.online_service('online_service',data).subscribe(res=>{
this.myservice.hide_loader();
this.result = res;
this.bus_data=this.result;
this.time= this.bus_data.departureTime;
},err=>{
this.myservice.presentToast("Please contact your service team something wrong happend");
});
}
/*----------------------------Filter data to pass----------------------------------------------------------------*/
filter_pass() {
var bus_type = [];
var travels = [];
var amenities = [];
var Dpoints = [];
var Stoppoints = [];
var result = this.bus_data;
console.log(result);
result.forEach(function(item){
bus_type.push(item.bus_type);
travels.push(item.bus_name);
item.amenities.forEach(function(amenity){
amenities.push(amenity);
})
item.singleD.forEach(function(drop){
Dpoints.push(drop);
})
item.singleP.forEach(function(board){
Stoppoints.push(board);
})
})
var response = {"bus_type":bus_type,"travels":travels,"amenities":amenities,"Dpoints":Dpoints,"Stoppoints":Stoppoints};
return response;
}
insersection(source,destination) {
if(source.length>0){
if(destination.length===0){
destination = source;
} else {
destination = destination.filter(value => -1 !== source.indexOf(value));
}
}
return destination;
}
/*---------------------------Change date concept-----------------------------------------------------*/
change_date(type:string) {
const curr_date = new Date().getTime();
const set_date = new Date(this.search.travelDate);
let choose_date;
if (type === 'prev') {
choose_date = set_date.setDate(set_date.getDate() - 1);
} else {
choose_date = set_date.setDate(set_date.getDate() + 1);
}
if (curr_date <= choose_date) {
const d = new Date(choose_date).toISOString();
const datechoose = d.split('T');
this.search.travelDate = datechoose[0];
const mydate = new Date(this.search.travelDate);
this.choosen_date = datechoose[0];
}
this.sendingdata= 'search?username=javatest&password=123456&travelDate=' + this.choosen_date +'&fromStationCode=' + this.search.fromStationId + '&toStationCode=' + this.search.toStationId;
var data= {"url":this.sendingdata ,"data":null};
this.myservice.show_loader()
this.myservice.online_service('online_service',data).subscribe(res=>{
this.myservice.hide_loader();
this.result = res;
this.bus_data=this.result;
this.time= this.bus_data.departureTime;
},err=>{
this.myservice.presentToast("Please contact your service team something wrong happend");
});
}
/*------------------------------------Selecting Bus and passing data into selectseatpage----------------------*/
get_seats(index: any, scheduleCode: any, operatorCode: any) {
index = this.result.searchResult.findIndex(items => items.scheduleCode === scheduleCode);
this. operatorData = this.result.searchResult[index];
this.boardingpointdata=this.operatorData.boardingPointDetails;
this.url_seatlayout= 'busmapV2?username=javatest&password=123456&travelDate=' + this.search.travelDate + '&fromStationCode=' + this.search.fromStationId + '&toStationCode=' + this.search.toStationId + '&scheduleCode=' + this.operatorData.scheduleCode + '&operatorCode=' + this.operatorData.operatorCode;
var data = {"url":this.url_seatlayout, "data":null};
this.myservice.show_loader();
this.myservice.online_service('online_service',data).subscribe(res=>
{
this.myservice.hide_loader();
this.resp_data = res;
console.log('Result from server',res);
if(res.code === '1')
{
this.result.searchResult[index].seat_layout = res;
this.seatlayout = this.result.searchResult[index].seat_layout;
this.result.searchResult[index].seat_layout['boardingPoints'] = this.boardingpointdata;
console.log('Operatordata' , this.operatorData);
var This = this;
setTimeout(function(){
This.navCtrl.push("SelectseatPage",{result: This.resp_data , search :This.search , operatordata : This.operatorData})
},500);
}
})
}
/*----------------------------------------Custom amount----------------------------------------------------- */
checkPrice(amount: any, scheduleCode: any){
let amtArray = amount.toString().split(',');
const rate = this.customAmount.forEach(function (el) {
if (el.scheduleId === scheduleCode) {
amtArray = amtArray.map(function(val) {
return parseFloat(val) + parseFloat(el.amount);
});
}
});
return amtArray.join(',');
}
}
<ion-header [ngClass]="lang=='ar' ? 'ar' : ''">
<div class="nav_header">
<button class="nav_btn nav_back floatLeft" (click)="back()">
</button>
<div class="nav_header_title floatLeft">
{{'seat.Pick your seats' | translate}}
</div>
<button class="nav_btn floatLeft">
</button>
<div class="clear"></div>
</div>
<div class="nav_header" *ngIf="search">
<div class="trip_bay">
<ion-row>
<ion-col col-4 class="p0">
<!------------------------------ point------------------------------->
<p>{{search.sourceName}}</p>
</ion-col>
<ion-col col-4 class="p0">
<p>
<ion-icon name="arrow-forward"></ion-icon>
</p>
</ion-col>
<ion-col col-4 class="p0">
<!------------------------------Destination point------------------------------->
<p>{{search.destinationName}}</p>
</ion-col>
</ion-row>
</div>
</div>
<div class="nav_header" *ngIf="search">
<div class="trip_bay">
<ion-row>
<ion-col col-12 class="p0">
<!-------------------------------------------- Date of travel--------------------------------->
<p style="text-align: center;">{{search.travelDate | date:'dd - MMMM - yyyy'}}</p>
</ion-col>
</ion-row>
</div>
</div>
</ion-header>
<!-------------------------------------- Dummy data starts here---------------------------------------->
<ion-content class="theme_background">
<div class="seat_wrapper">
<!-- <div class="seat_index">
<ion-row>
<ion-col col-3>
<div class="seats seat">
{{'seat.Available Seats' | translate}}
</div>
</ion-col>
<ion-col col-3>
<div class="selected seat">
{{'seat.Selected Seats' | translate}}
</div>
</ion-col>
<ion-col col-3>
<div class="booked seat">
{{'seat.Booked Seats' | translate}}
</div>
</ion-col>
<ion-col col-3>
<div class="ladies seat">
Ladies Seat
</div>
</ion-col>
</ion-row>
<ion-row>
</ion-row>
</div> -->
<!---------------------------Seat layout----------------------------------------------->
<div>
<ion-segment [(ngModel)]="deck">
<ion-segment-button value="lower" [attr.href]="'#lower' + i" (click)="tabvalue('lower')">
Lower Deck
</ion-segment-button>
<ion-segment-button value="upper" [attr.href]="'#upper' + i" *ngIf="layercount == '2'" (click)="tabvalue('upper')">
Upper Deck
</ion-segment-button>
</ion-segment>
</div>
<!---------------------------------------Lower Duck---------------------------------->
<div [ngSwitch]="deck" class="layout_outter">
<div *ngSwitchCase="'lower'">
<div class="seat_positioning" *ngIf="recievedresult">
<div class="seat_driver floatRight">
</div>
<div class="clear"></div>
<ion-row>
<ion-col id="lower{{i}}" col-12 *ngIf="seatlayout">
<ul class="" *ngFor="let row_set of seatlayout.lower_seats">
<li *ngFor="let items of row_set" [ngStyle]="{'width':getWidth(seatlayout.numList.lower_column)}" [ngClass]="{sleeper_content:items.seatType== 'Sleeper'}">
<button [attr.id]="getIds(items.seatType)" *ngIf="items.seatNumber != ''">
<label>
<input id="1" *ngIf="items.seatStatus !== 'B'" type="checkbox" name="services" value="A" (click)="set_book(items,recievedresult.scheduleCode)">
<p *ngIf="items.seatType== 'Sleeper'" [ngClass]="{sleeper_booked:items.seatStatus == 'B',sleeper_lady:items.seatStatus == 'F'}"></p>
<p *ngIf="items.seatType== 'Seater'" [ngClass]="{seats_booked:items.seatStatus == 'B',seat_lady:items.seatStatus == 'F'}"></p>
<div *ngIf="items.seatType== 'Sleeper'">
<p *ngIf="check_exist(items.seatNumber)" class="sleeper_selected">{{items.seatNumber}}</p>
</div>
<div *ngIf="items.seatType== 'Seater'">
<p *ngIf="check_exist(items.seatNumber)" class="seats_selected">{{items.seatNumber}}</p>
</div>
</label>
</button>
</li>
</ul>
</ion-col>
</ion-row>
</div>
</div>
<!--------------------------------------------------------Upper Deck-=------------------------->
<div *ngSwitchCase="'upper'">
<div class="seat_positioning">
<div class="clear"></div>
<ion-row>
<ion-col id="upper{{i}}" col-12 *ngIf="seatlayout">
<ul class="" *ngFor="let row_set of seatlayout.upper_seats">
<li *ngFor="let items of row_set" [ngStyle]="{'width':getWidth(seatlayout.numList.upper_column)}" [ngClass]="{sleeper_content:items.seatType== 'Sleeper'}">
<button [attr.id]="getIds(items.seatType)" *ngIf="items.seatNumber != ''">
<label>
<input id="1" *ngIf="items.seatStatus !== 'B'" type="checkbox" name="services" value="A" (click)="set_book(items,recievedresult.scheduleCode)">
<p *ngIf="items.seatType== 'Sleeper'" [ngClass]="{sleeper_booked:items.seatStatus == 'B' ,sleeper_lady:items.seatStatus == 'F'}"></p>
<p *ngIf="items.seatType== 'Seater'" [ngClass]="{seats_booked:items.seatStatus == 'B',seat_lady:items.seatStatus == 'F'}"></p>
<p *ngIf="check_exist(items.seatNumber)" class="sleeper_selected">{{items.seatNumber}}</p>
</label>
</button>
</li>
</ul>
</ion-col>
</ion-row>
</div>
</div>
</div>
</div>
<div [ngClass]="lang=='ar' ? 'ar' : ''" class="footer_bay" *ngIf="selected_seats && selected_seats.length>0">
<ion-row>
<ion-col col-9 class="p0">
<p>Seat Number :
<strong class="seat_color">{{book_details('seats')}}</strong>
</p>
<p>Fare :
<strong class="amount">{{book_details('seat_fare')}}</strong>
</p>
</ion-col>
<ion-col col-3 class="p0">
<button ion-button class="done_btn widthFull m0" (click)="done()">
{{'seat.DONE' | translate}}
</button>
</ion-col>
</ion-row>
</div>
</ion-content>
<!---------------------------------------------------------------------Book deatils-->
\ No newline at end of file
import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { SelectseatPage } from './selectseat';
import { TranslateModule } from '@ngx-translate/core';
@NgModule({
declarations: [
SelectseatPage,
],
imports: [
IonicPageModule.forChild(SelectseatPage),
TranslateModule.forChild()
],
})
export class SelectseatPageModule {}
page-selectseat {
.nav_header {
box-shadow: none !important;
}
.background {
background-image: url("../assets/imgs/bg.png");
}
.layout_outter {
height: calc(100vh - 275px);
padding: 20px;
}
.trip_bay {
width: 100%;
background-color: rgba(248, 247, 246, 1);
color: #fff;
p {
margin: 0px;
text-align: center;
padding: 10px;
font-weight: 300;
font-size: 18px;
color: #3a3a3a;
background-color: #fff;
ion-icon {
color: rgba(98, 56, 28, 1);
}
}
}
.seat_wrapper {
width: 100%;
height: calc(100vh - 136px);
text-align: center;
ion-segment {
background-color: #fff;
.segment-button {
color: #000 !important;
font-size: 16px;
font-weight: 400;
text-transform: capitalize;
}
.segment-activated {
background-color: rgba(254, 142, 9, 1);
color: #fff !important;
border-color: rgba(254, 142, 9, 1) !important;
}
}
.seat_index {
width: 100%;
background: #fff;
border-radius: 0px;
padding: 10px;
color: #959595;
padding-left: 20px;
padding-right: 20px;
margin-bottom: 10px;
display: inline-block;
-webkit-border-radius: 0px;
-moz-border-radius: 0px;
-ms-border-radius: 0px;
-o-border-radius: 0px;
.seat {
background-repeat: no-repeat !important;
background-size: 21px !important;
font-size: 10px;
padding-left: 21px;
}
.seats {
background: url("../assets/imgs/seat_available.png");
}
.selected {
background: url("../assets/imgs/seat_selected.png");
}
.booked {
background: url("../assets/imgs/seat_booked.png");
}
.ladies {
background: url("../assets/imgs/seat_ladies.png")
}
}
.seat_positioning {
background: #fff;
padding: 10px;
display: inline-block;
height: calc(100vh - 290px);
width: 215px;
overflow: scroll;
border-radius: 35px;
border: 1px solid rgba(213, 213, 213, 1);
.seat_driver {
width: 53px;
height: 37px;
background: url("../assets/imgs/driver.png");
background-position: center;
background-size: 32px;
background-repeat: no-repeat !important;
margin-right: 10px;
}
ul {
padding: 0px;
margin: 0px;
li {
list-style: none;
display: inline-block;
#seat_button {
margin: 4px;
background-color: #fff;
overflow: auto;
color: #000;
position: relative;
width: 30px;
height: 30px;
outline: none;
color: #fff;
font-size: 9px;
}
#seat_button p {
margin: 0px;
position: absolute;
left: 0px;
right: 7px;
top: 0px;
bottom: 0px;
padding: 5px;
padding-top: 8px;
background: url("../assets/imgs/seat_available.png");
background-repeat: no-repeat;
background-position: center;
background-size: 22px;
}
.seats_available {
background: url("../assets/imgs/seat_available.png")!important;
background-repeat: no-repeat !important;
background-position: center !important;
background-size: 22px !important;
}
.seats_selected {
background: url("../assets/imgs/seat_selected.png")!important;
background-repeat: no-repeat !important;
background-position: center !important;
background-size: 22px !important;
}
.seat_lady {
background: url("../assets/imgs/seat_ladies.png")!important;
background-repeat: no-repeat !important;
background-position: center !important;
background-size: 22px !important;
}
.seats_booked {
background: url("../assets/imgs/seat_booked.png")!important;
background-repeat: no-repeat !important;
background-position: center !important;
background-size: 22px !important;
}
#seat_button label {
width: 100%;
}
#seat_button label span {
text-align: center;
display: block;
}
#seat_button label input {
position: absolute;
top: -20px;
}
//Edited By Kevin
#sleeper_button {
margin: 4px;
background-color: #fff;
overflow: auto;
color: #000;
position: relative;
width: 30px;
height: 35px;
outline: none;
font-size: 9px;
color: #fff;
}
#sleeper_button p {
margin: 0px;
position: absolute;
left: 0px;
right: 4px;
top: 0px;
bottom: 0px;
padding: 5px;
padding-top: 8px;
background: url("../assets/imgs/sleeper_available.png");
background-repeat: no-repeat;
background-position: center;
background-size: 17px !important;
}
.sleeper_available {
background: url("../assets/imgs/sleeper_available.png")!important;
background-repeat: no-repeat !important;
background-position: center !important;
background-size: 17px !important;
}
.sleeper_selected {
background: url("../assets/imgs/sleeper_selected.png")!important;
background-repeat: no-repeat !important;
background-position: center !important;
background-size: 30px !important;
}
.sleeper_lady {
background: url("../assets/imgs/sleeper_ladies.png")!important;
background-repeat: no-repeat !important;
background-position: center !important;
background-size: 17px !important;
}
.sleeper_booked {
background: url("../assets/imgs/sleeper_booked.png")!important;
background-repeat: no-repeat !important;
background-position: center !important;
background-size: 17px !important;
}
#sleeper_button label {
width: 100%;
}
#sleeper_button label span {
text-align: center;
display: block;
}
#sleeper_button label input {
position: absolute;
top: -20px;
}
//End
}
}
}
}
.footer_bay {
padding: 10px;
position: fixed;
bottom: 0px;
left: 0px;
right: 0px;
background-color: #fff;
box-shadow: 0px 5px 19px -5px rgba(0, 0, 0, 0.5);
p {
color: rgba(114, 114, 114, 1);
margin: 0px;
padding: 0px;
padding-bottom: 5px;
font-size: 16px;
strong {
color: #000;
font-weight: 400;
}
}
.done_btn {
background-color: rgba(254, 142, 9, 1);
color: #fff;
border-radius: 20px;
border-bottom-right-radius: 0px;
font-weight: 400;
text-transform: capitalize;
position: relative;
top: 6px;
}
}
}
\ No newline at end of file
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams, Events } from 'ionic-angular';
/*-------------Edited by Adarsh-----------------*/
import { Myservice } from "./../../providers/services/myservice";
import { TranslateService } from '@ngx-translate/core';
import { Storage } from '@ionic/storage';
@IonicPage()
@Component({
selector: 'page-selectseat',
templateUrl: 'selectseat.html',
})
export class SelectseatPage {
load:boolean;
funcName:any;
layercount :any
totalfare:any;
deck: string = "lower";
isAndroid: boolean = false;
operatordata:any;
recievedresult:any;
seatsystem:any;
lowerseats :any;
upperseats:any;
seatlayout:any;
searchdatarecieved:any;
result:any;
search:any;
selected_seats:any[];
total_price:any;
seat_booked:any;
customAmount: any[];
lang:any;
constructor(
public navCtrl: NavController,
public navParams: NavParams,
public myservice: Myservice,
public translate: TranslateService,
public events: Events,
public storage: Storage
) {
this.operatordata = this.navParams.get('operatordata');
console.log('operatordata',this.operatordata);
this.customAmount = [];
this.search= this.navParams.get('search');
console.log('search data recieved',this.search);
this.selected_seats = new Array();
this.events.subscribe('user:lang', data =>
{
setTimeout(() => {
this.langTrans();
}, 500);
});
var This = this;
This. customprice()
const sendingdata= 'busmapV2?username=javatest&password=123456&travelDate=' + this.search.travelDate + '&fromStationCode=' + this.search.fromStationId + '&toStationCode=' + this.search.toStationId + '&scheduleCode=' + this.operatordata.scheduleCode + '&operatorCode=' + this.operatordata.operatorCode;
var data = {"url":sendingdata, "data":null};
var This = this;
this.myservice.online_service('online_service',data).subscribe(res=>{
if(res.code === '1')
{
this.recievedresult = res;
this.layercount = this.recievedresult.layerCount;
console.log('Layer count Result' , this.layercount);
setTimeout(function(){
This.seatlayout = This.seat_arrange();
console.log('Seat layout' , this.seatlayout);
},3000);
}
})
}
customprice() {
var passdata = {
destinationName: this.search.destinationName,
fromStationId: this.search.fromStationId,
returnDate: "",
sourceName: this.search.sourceName,
toStationId: this.search.toStationId,
travelDate: this.search.travelDate,
}
this.funcName = 'customPrice';
this.myservice.show_loader();
this.myservice.online_service(this.funcName, passdata).subscribe(response => {
this.myservice.hide_loader();
console.log('Response' , response);
if ( response.status === 'success'){
this.customAmount = response.data;
}
else {
this.customAmount = [];
}
});
}
tabvalue(type:string) {
this.deck = type;
}
book_details(type: string,) {
if (this.selected_seats instanceof Array === true && typeof this.selected_seats !== 'undefined' && this.selected_seats.length > 0) {
if (type === 'seats')
{
return this.selected_seats.map(e => e.seatNumber).join(',');
} else if (type === 'seat_fare')
{
const sum = this.selected_seats.map(item => item.baseFare).reduce((prev, next) => parseInt(prev) + parseInt(next));
return sum;
} else if (type === 'operator') {
const oper = this.selected_seats.map(item => item.operatorServiceTax).reduce(
(prev, next) => parseInt(prev) + parseInt(next));
return oper;
} else {
const oper = this.selected_seats.map(item => item.seatFare).reduce((prev, next) => parseInt(prev) + parseInt(next));
return oper;
}
}
}
getWidth(col: number) {
const col_width = (100 / col);
return col_width + '%';
}
check_exist(seatNumber: any, index: number) {
const id = this.selected_seats.length + 1;
const found = this.selected_seats.some(function (el: any) {
return el.seatNumber === seatNumber;
});
if (found) { return true; }
}
getIds(type: string) {
if (type === 'Sleeper') {
return 'sleeper_button';
} else if (type === 'Seater') {
return 'seat_button';
} else {
return '';
}
}
set_book(item: any, param :any) {
let scheduleCode= this.operatordata.scheduleCode;
console.log('Item',item , 'Schedule',scheduleCode);
const obj = this.selected_seats.findIndex(items => items.seatNumber === item.seatNumber);
console.log(obj);
if (obj === -1) {
const item_price = this.checkPrice(item.baseFare, scheduleCode);
item.baseFare = item_price;
const seat_price = this.checkPrice(item.seatFare, scheduleCode);
item.seatFare = seat_price;
if(this.selected_seats.length < 6)
{
this.selected_seats.push(item);
console.log('selected seats array', this.selected_seats);
}
else {
this.myservice.presentToast('Maximum booking limit reached.');
}
} else {
this.selected_seats.splice(obj, 1);
}
}
checkPrice(amount: any, scheduleCode: any) {
let amtArray = amount.toString().split(',');
const rate = this.customAmount.forEach(function (el) {
if (el.scheduleId === scheduleCode) {
amtArray = amtArray.map(function(val) {
return parseFloat(val) + parseFloat(el.amount);
});
}
});
return amtArray.join(',');
}
ionViewDidLoad() {
this.langTrans();
}
langTrans() {
this.storage.get('lang').then(lang => {
if (lang != null) {
this.translate.use(lang)
this.lang = lang;
}
else {
this.lang = 'en';
this.translate.use('en')
}
})
}
back() {
this.navCtrl.pop();
}
done() {
console.log('Selected seats' , this.selected_seats);
this.navCtrl.push("BoardingpointPage", {"operatordata":this.operatordata, "search":this.search , "selectedseats":this.selected_seats, "data":this.recievedresult });
}
select_seat(seat) {
if(seat.status=="false") {
var index = this.selected_seats.indexOf(seat.seat_name);
if(index >= 0) {
this.selected_seats.splice(index,1);
var divToChange = document.getElementById('tag_'+seat.seat_name);
divToChange.className = "seat";
} else {
if(this.selected_seats.length < 6){
this.selected_seats.push(seat.seat_name);
var divToChange = document.getElementById('tag_'+seat.seat_name);
divToChange.className = "selected";
console.log('Selected seat length', this.selected_seats.length)
} else {
this.myservice.presentToast("Please not the booking seat limit has been exceeded!");
}
}
} else {
this.myservice.presentToast("Already booked seat, You can't book the seat");
}
console.log(this.selected_seats);
var fare = this.result.fare;
var seat_count = this.selected_seats.length;
var seats_val = this.selected_seats.join();
var total_price = parseInt(fare) * seat_count;
this.seat_booked = {"fare":this.result.symbols+" "+total_price,"seats_val":seats_val,"selected_seats":this.selected_seats}
console.log(this.seat_booked);
}
seat_arrange() {
var response = this.recievedresult;
console.log('Response data at seat arrange page', response);
console.log('Layer count',this.recievedresult.layerCount);
let lower_rows: any, lower_column: any;
let upper_rows: any, upper_column: any;
const lower_seats = [];
let upper_seats_rows = [];
const upper_seats = [];
let lower_seats_rows = [];
if (response.layerCount === '2') {
lower_rows = response.rowsList[0];
lower_column = response.columnsList[0];
upper_rows = response.rowsList[1];
upper_column = response.columnsList[1];
for ( let i = 1; i <= upper_rows; i++) {
upper_seats_rows = [];
for (let j = 1; j <= upper_column; j++) {
response.busMapStructure.upper.filter(seats => {
if (seats.row == i && seats.column == j) {
upper_seats_rows.push(seats);
}
});
}
upper_seats.push(upper_seats_rows);
}
} else {
lower_rows = response.rowsList;
lower_column = response.columnsList;
}
console.log('Lower Colounmns and upper coloumns',lower_rows, lower_column);
for ( let i = 1; i <= lower_rows; i++) {
lower_seats_rows = [];
for (let j = 1; j <= lower_column; j++) {
response.busMapStructure.lower.filter(seats => {
if (seats.row == i && seats.column == j) {
lower_seats_rows.push(seats);
}
});
}
lower_seats.push(lower_seats_rows);
}
const numList = {'lower_rows': lower_rows, 'lower_column': lower_column, 'upper_rows': upper_rows, 'upper_column': upper_column };
const seats_return = {'lower_seats' : lower_seats, 'upper_seats': upper_seats, 'numList': numList};
console.log(seats_return);
return seats_return
}
}
<ion-header>
<div class="nav_header">
<button class="nav_btn nav_menu floatLeft" menuToggle>
</button>
<div class="nav_header_title floatLeft">
NEW REGISTRATION
</div>
<div class="clear"></div>
</div>
</ion-header>
<ion-content class="theme_background">
<div class="login_wrapper">
<div class="login_form">
<h3 class="floatLeft">SIGNUP</h3>
<div class="google floatRight" (click)="socialSignIn()">
<ion-icon name="logo-google"></ion-icon>
</div>
<div class="clear"></div>
<ion-list>
<form [formGroup]="signupForm">
<ion-item>
<ion-input type="text" placeholder="{{'signup.Name' | translate}}" formControlName="name"></ion-input>
</ion-item>
<div class="clear"></div>
<ion-item>
<ion-input type="email" placeholder="{{'signup.Email' | translate}}" formControlName="email_id">
</ion-input>
</ion-item>
<div class="alert error" *ngIf="signupForm.controls.email_id.invalid && (signupForm.get('email_id').dirty || signupForm.get('email_id').touched)">
{{'signup.Invalid Email ID' | translate}}
</div>
<div class="clear"></div>
<ion-item>
<ion-input type="number" placeholder="{{'signup.Mobile Number' | translate}}" formControlName="phone_no" type="number"></ion-input>
</ion-item>
<div class="clear"></div>
<div class="alert error" *ngIf="signupForm.controls.phone_no.invalid && (signupForm.get('phone_no').dirty || signupForm.get('phone_no').touched)">
{{'signup.Enter a valid Mobile' | translate}}
</div>
<ion-item>
<ion-input type="password" placeholder="{{'signup.Password' | translate}}" formControlName="password" type="password"></ion-input>
</ion-item>
<div class="alert error" *ngIf="signupForm.controls.password.invalid && (signupForm.get('password').dirty || signupForm.get('password').touched)">
{{'signup.Minimum 6 characters' | translate}}
</div>
<div class="clear"></div>
<br>
<div class="inside_check">
<ion-checkbox formControlName="terms"></ion-checkbox>
<ion-label>I accept<a (click)="agree_terms()">Terms and Conditions</a></ion-label>
<div class="clear"></div>
</div>
<div class="alert error" *ngIf="signupForm.controls.terms.invalid && (signupForm.get('terms').dirty || signupForm.get('terms').touched)">
{{'signup.Please accept terms & conditions' | translate}}
</div>
<div class="textRight">
<button class="login_btn" (click)="register()" [disabled]="signupForm.invalid">
{{'signup.Signup' | translate}}</button>
</div>
<p (click)="login()">{{'signup.Already had an account ?' | translate}}</p>
</form>
</ion-list>
</div>
</div>
</ion-content>
\ No newline at end of file
import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { SignupPage } from './signup';
import { TranslateModule } from '@ngx-translate/core';
@NgModule({
declarations: [
SignupPage,
],
imports: [
IonicPageModule.forChild(SignupPage),
TranslateModule.forChild()
],
})
export class SignupPageModule {}
page-signup {
.login_wrapper {
width: 100%;
padding-top: 45px;
padding-left: 20px;
padding-right: 20px;
.logo_section {
text-align: center;
padding-bottom: 30px;
img {
width: 160px;
}
}
.login_form {
h3 {
margin: 0px;
padding: 20px;
font-weight: 600;
font-size: 25px;
text-transform: uppercase;
}
.google {
background-color: rgba(241, 67, 54, 1);
color: #fff;
width: 50px;
height: 45px;
text-align: center;
font-size: 23px;
padding: 9px;
border-radius: 20px;
border-bottom-right-radius: 0px;
}
.list {
.date {
background-image: url("../assets/imgs/calender.png");
background-position: center;
background-repeat: no-repeat;
background-size: 50px;
width: 50px;
height: 50px;
}
.item {
margin-bottom: 20px;
border: none !important;
box-shadow: none !important;
.item-inner {
border: none !important;
box-shadow: none !important;
.input-wrapper {
ion-datetime {
border: 1px solid rgba(213, 213, 213, 1);
border-radius: 30px;
border-bottom-right-radius: 0px;
min-width: 100%;
background-image: url("../assets/imgs/calender.png");
background-repeat: no-repeat;
background-size: 20px;
background-position: right 15px top 15px;
}
select {
border: 1px solid #d5d5d5;
border-radius: 30px;
border-bottom-right-radius: 0px;
padding-left: 20px !important;
width: 100%;
height: 45px;
-webkit-appearance: none;
-moz-appearance: none;
background-image: url("../assets/imgs/drop.png");
background-repeat: no-repeat;
background-position: right 10px top 5px;
background-size: 35px;
}
ion-input {
border: 1px solid rgba(213, 213, 213, 1);
border-radius: 30px;
background-color: #fff;
border-bottom-right-radius: 0px;
input {
height: 100%;
padding-left: 20px !important;
color: rgba(213, 213, 213, 1);
}
}
.dashed {
border: 1px dashed rgba(213, 213, 213, 1);
}
}
}
}
.login_btn {
background-color: rgba(254, 142, 9, 1);
color: #fff;
height: 45px;
font-size: 18px;
font-weight: 400;
border-radius: 30px;
background-position: 18px;
background-repeat: no-repeat;
background-size: 20px;
padding-left: 25px;
padding-right: 25px;
border-bottom-right-radius: 0px;
text-transform: capitalize;
font-weight: 300;
letter-spacing: 1px;
}
.inside_check {
padding-bottom: 10px;
a {
color: rgba(254, 142, 9, 1) !important;
padding-left: 10px;
padding-right: 10px;
font-style: italic;
}
.checkbox-icon {
width: 30px;
height: 30px;
border-radius: 50%;
border: none;
border: 2px solid rgba(254, 142, 9, 1);
}
.checkbox-checked {
background-color: rgba(254, 142, 9, 1);
}
.checkbox-inner {
left: 10px;
top: 7px;
}
ion-checkbox {
float: left;
}
ion-label {
float: left;
margin: 0px;
padding: 5px;
margin-left: 5px;
color: #000;
font-size: 16px;
a {
color: #000;
}
}
}
p {
color: rgba(254, 142, 9, 1);
font-size: 16px;
}
}
}
}
}
\ No newline at end of file
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams, Events,ModalController } from 'ionic-angular';
import { Validators, FormBuilder, FormGroup } from "@angular/forms";
import { Myservice } from "./../../providers/services/myservice";
import { Storage } from '@ionic/storage';
// import { GooglePlus } from '@ionic-native/google-plus';
// import { Facebook, FacebookLoginResponse } from '@ionic-native/facebook';
import { TranslateModule } from '@ngx-translate/core';
import { GooglePlus } from '@ionic-native/google-plus';
@IonicPage()
@Component({
selector: 'page-signup',
templateUrl: 'signup.html',
})
export class SignupPage {
signupForm: FormGroup;
device_id:any;
constructor(
public googlePlus:GooglePlus,
public modalCtrl: ModalController,
public navCtrl: NavController,
public navParams: NavParams,
public formBuilder: FormBuilder,
private myservice: Myservice,
private events: Events,
public storage: Storage,
// private googlePlus: GooglePlus,
// private fb: Facebook,
public translate: TranslateModule
) {
this.signupForm = this.formBuilder.group({
name :[''],
phone_no: ['', Validators.compose([Validators.required, this.myservice.checkLimit(10000000, 999999999999999)])],
email_id: ['', Validators.compose([Validators.required, Validators.pattern("[a-zA-Z0-9.-_]{1,}@[a-zA-Z.-]{2,}[.]{1}[a-zA-Z]{2,}")])],
password: ['', Validators.compose([Validators.required, Validators.minLength(6)])],
terms: [null, Validators.compose([Validators.required, Validators.pattern('true')])],
device_id:['']
})
this.device_id = '';
this.storage.get('get_deviceId').then(data => {
console.log("asdasdasdsad");
console.log(data);
if(data){
this.device_id = data.userId;
console.log(this.device_id.userId);
}
})
}
ionViewDidLoad() {
console.log('ionViewDidLoad SignupPage');
}
register() {
var obj = {"name":this.signupForm.value.name,"username":this.signupForm.value.email_id,"mob":this.signupForm.value.phone_no,"password":this.signupForm.value.password}
console.log("Entering value into server", obj);
this.signupForm.controls['device_id'].setValue(this.device_id);
this.myservice.show_loader();
this.myservice.web_post('user_signup',obj).subscribe(response => {
this.myservice.hide_loader();
console.log('Response',response);
if (response.status == 'success') {
console.log('Succesfuuly created')
console.log('response with event' , response.user);
this.storage.set('user_data', response.user);
this.events.publish('user:created', response.user, Date.now());
this.navCtrl.setRoot('LoginPage');
} else {
this.myservice.presentToast(response.message);
}
},err=>{
this.myservice.presentToast("Please contact your service team something wrong happend");
})
}
login() {
this.navCtrl.push("LoginPage")
}
MatchPassword(val) {
return new Promise(resolve => {
if (val.value == this.signupForm.value.password) {
resolve(null);
}
else {
resolve({ 'match': false });
}
})
}
agree_terms()
{
let termsModal = this.modalCtrl.create('TermsPage');
termsModal.present();
}
socialSignIn()
{
this.googlePlus.login({})
.then(res => console.log(res))
.catch(err => console.error(err));
}
}
// google_login() {
// this.googlePlus.login({})
// .then(res => {
// console.log(res);
// var post_data = {"social_id":res.userId,"email_id":res.email,"name":res.displayName,"device_id":this.device_id};
// this.myservice.web_post('social_login',post_data).subscribe(response=>{
// if (response.status == 'success'){
// this.storage.set('user_data', response.user);
// this.events.publish('user:created', response.user, Date.now());
// var This = this;
// setTimeout(() => {
// This.navCtrl.setRoot('HomePage')
// }, 500);
// }
// else{
// this.myservice.presentToast("Something wrong happend");
// }
// },err=>{
// this.myservice.presentToast("Please contact your service team something wrong happend");
// })
// }).catch(err => console.error(err));
// }
// fb_login() {
// this.fb.login(['public_profile', 'email'])
// .then(res => {
// if (res.status === "connected") {
// //this.isLoggedIn = true;
// this.getUserDetail(res.authResponse.userID);
// } else {
// //this.isLoggedIn = false;
// }
// })
// .catch(e => console.log('Error logging into Facebook', e));
// }
// getUserDetail(userid) {
// this.fb.api("/" + userid + "/?fields=id,email,name,picture,gender", ["public_profile"])
// .then(res => {
// console.log(res);
// var emails = '';
// //this.myservice.show_loader();
// if (res.email)
// emails = res.email;
// var post_data = {"social_id":res.id,"email_id":emails,"name":res.name,"device_id":this.device_id};
// this.myservice.web_post('social_login',post_data).subscribe(response=>{
// if (response.status == 'success'){
// this.storage.set('user_data', response.user);
// this.events.publish('user:created', response.user, Date.now());
// var This = this;
// setTimeout(() => {
// This.navCtrl.setRoot('HomePage')
// }, 500);
// }
// else{
// this.myservice.presentToast("Something wrong happend");
// }
// },err=>{
// this.myservice.presentToast("Please contact your service team something wrong happend");
// })
// })
// .catch(e => {
// console.log(e);
// });
// }
\ No newline at end of file
<ion-card class="terms_wrapper">
<ion-card-header>
Terms and Conditions
</ion-card-header>
<ion-card-content class="terms_content theme_background">
<br>Mogo Bus is an internet marketplace. It doesn't operate bus services of its own. So as to provide a comprehensive selection of bus operators, departure times and costs to customers, it's involved with many Bus Operators.
<br> Mogo Bus's recommendation to customers is to decide on the bus operators that they're responsive to and whose services they're snug with.
<br> Mogo Bus's responsibilities include:
<br>
<ul style="list-style-type:disc;">
<li>Issuing a sound price tag (a ticket that may be accepted by the bus operator) for its network of bus operators.
</li>
<li>Providing refund and support within the event of cancellation.</li>
<li>Providing client support data and knowledge and data just in case of any delay(s) / inconvenience.</li>
</ul>
<br>
<u>Mogo Bus's responsibilities do NOT include</u>
<ul style="list-style-type:disc;">
<li>If buses of the bus operators don't depart from the station or reach the station on time.
</li>
<li>If the workers of the bus operators demonstrate rude behavior or misconduct with the purchasers.</li>
<li>If bound aspects of the buses of the bus operators akin to seats aren't up to the customer's expectations.
</li>
<li>If the bus operator cancels the trip for reasons unknown.
</li>
<li>If the bags of a client gets lost / purloined / broken within the event of travel.
</li>
<li>
If the bus operator changes a customer's seat at the eleventh hour to accommodate a girl / baby / aged traveler.
</li>
<li>
If the client waits at the incorrect boarding purpose (please decision the bus operator to search out out the precise boarding purpose if you're not an everyday person on it specific bus).
</li>
<li>
If the bus operator changes the boarding purpose and / or uses a pick-up vehicle at the boarding purpose to require customers to the bus departure purpose.
</li>
<li>
The timings of bus arrivals and departures square measure as per the scheduled departure and arrival timings. However, the bus company supplier might amendment the departure and arrival timings or the pickup locations, or the buses might get delayed because
of inevitable reasons akin to traffic jams.
</li>
<li>
On the date of journey, the passengers square measure requested to appeal the service supplier contact variety mentioned within the price tag and reassert their obtain purpose and temporal order.
</li>
</ul>
<br> At the time of boarding the bus, the passengers could also be needed to furnish the following:
<br>
<ul style="list-style-type:disc;">
<li>A copy of the ticket (A print out of the ticket or the print out of the ticket e-mail)
</li>
<li>Photo identity proof of the person whose name was provided whereas creating the booking. This includes license, Student ID card, Company ID card, Passport, PAN Card or elector ID Card.
</li>
<li>Failing to try and do thus, the passengers might not be allowed to board the bus.
</li>
<li>Once a ticket is issued, it's non-transferable. If a price tag is conferred by somebody but the person entitled to be carried there-under or to refund in affiliation thereupon, Ticketrobo or any of its travel partners shall not be at risk
of the person thus entitled, if in honestness it provides carriage or makes a refund to the person presenting the price tag.
</li>
</ul>
</ion-card-content>
<button class="accept" (click)="dismiss()">
Accept Terms
</button>
</ion-card>
\ No newline at end of file
import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { TermsPage } from './terms';
@NgModule({
declarations: [
TermsPage,
],
imports: [
IonicPageModule.forChild(TermsPage),
],
})
export class TermsPageModule {}
page-terms {
.terms_wrapper {
border-radius: 20px;
border-bottom-right-radius: 0px;
position: relative;
top: 40px;
ion-card-header {
background-color: rgba(254, 142, 9, 1);
color: #fff;
font-weight: 300;
font-size: 18px;
}
.terms_content {
height: 65vh;
overflow: scroll;
margin-top: 10px;
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
}
.accept {
background-color: rgba(254, 142, 9, 1);
color: #fff;
height: 40px;
width: 100%;
font-size: 16px;
font-weight: 400;
padding-left: 25px;
padding-right: 25px;
border-bottom-left-radius: 20px;
}
}
}
\ No newline at end of file
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
import { ModalController, ViewController } from 'ionic-angular';
@IonicPage()
@Component({
selector: 'page-terms',
templateUrl: 'terms.html',
})
export class TermsPage {
constructor(public navCtrl: NavController, public navParams: NavParams, public modalCtrl: ModalController, public viewCtrl: ViewController) {
}
ionViewDidLoad() {
console.log('ionViewDidLoad TermsPage');
}
dismiss() {
this.viewCtrl.dismiss();
}
}
<ion-header>
<div class="nav_header">
<button class="nav_btn nav_back floatLeft" (click)="back()">
</button>
<div class="nav_header_title floatLeft">
PARCEL TRACKING
</div>
<div class="clear"></div>
</div>
</ion-header>
<ion-content>
<div class="tracking_map_div">
<div class="track_div">
<div class="track_div_inner">
<h5><strong>30 Km.</strong>4 hrs</h5>
<p>RJ Lastoursville, Gabon</p>
<hr>
<ion-row class="p0">
<ion-col col-8 class="p0">
<h4>Universal Travels</h4>
</ion-col>
<ion-col col-4 class="p0">
<h6>ID 45P356OP</h6>
</ion-col>
</ion-row>
<ion-row class="p0">
<ion-col col-12 class="p0">
<h3>Bengaluru ===== Kochin</h3>
</ion-col>
</ion-row>
</div>
</div>
</div>
</ion-content>
\ No newline at end of file
import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { TrackingPage } from './tracking';
@NgModule({
declarations: [
TrackingPage,
],
imports: [
IonicPageModule.forChild(TrackingPage),
],
})
export class TrackingPageModule {}
page-tracking {
.tracking_map_div {
width: 100%;
height: 92vh;
position: relative;
.track_div {
width: 100%;
position: absolute;
bottom: 0px;
left: 0px;
right: 0px;
padding: 20px;
.track_div_inner {
width: 100%;
padding: 25px;
background: #fff;
margin: 0 auto;
box-shadow: 0px 5px 19px -5px rgba(0, 0, 0, 0.5);
border-radius: 25px;
border-bottom-right-radius: 0px;
h5 {
padding: 0px;
margin: 0px;
font-size: 17px;
font-weight: 400;
strong {
font-size: 28px;
margin-right: 5px;
}
}
p {
color: rgba(114, 114, 114, 1);
margin: 0px;
padding-top: 5px;
font-weight: 400;
font-size: 14px;
padding-bottom: 15px;
}
hr {
margin-bottom: 15px;
}
h4 {
margin: 0px;
padding: 0px;
color: rgba(98, 56, 28, 1);
font-size: 17px;
}
h6 {
text-align: right;
margin: 0px;
padding: 0px;
font-size: 14px;
font-weight: 400;
}
h3 {
margin: 0px;
padding: 0px;
padding-top: 5px;
color: rgba(114, 114, 114, 1);
font-weight: 400;
font-size: 15px;
}
}
}
}
}
\ No newline at end of file
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
@IonicPage()
@Component({
selector: 'page-tracking',
templateUrl: 'tracking.html',
})
export class TrackingPage {
constructor(public navCtrl: NavController, public navParams: NavParams) {
}
ionViewDidLoad() {
console.log('ionViewDidLoad TrackingPage');
}
back(){
this.navCtrl.pop();
}
}
<ion-header class="nav_header" [ngClass]="lang=='ar' ? 'ar' : ''">
<div class="nav_header">
<button class="nav_btn nav_menu floatLeft" menuToggle>
</button>
<div class="nav_header_title floatLeft">
{{'others.My trips' | translate}}
</div>
<div class="clear"></div>
</div>
</ion-header>
<ion-content class="theme_background" (ionScrollEnd)="logScrolling($event)" [ngClass]="lang=='ar' ? 'ar' : ''">
<div class="mytrip_list">
<ul *ngIf="bookDetails">
<li *ngFor="let bookData of bookDetails; let i = index" [attr.data-target]="'#viewseat' + i" (click)="getBookinfo(bookData.bookingId,i)">
<ion-row>
<ion-col col-6 class="p0">
<h4>{{bookData.operatorName}}</h4>
</ion-col>
<ion-col col-6 class="p0 textRight">
<h5>₹{{bookData.amount | number : '1.2-2'}}</h5>
</ion-col>
</ion-row>
<ion-row>
<ion-col col-12 class="p0">
<h3>{{bookData.fromStation | titlecase}} === {{bookData.toStation | titlecase}}</h3>
</ion-col>
</ion-row>
<ion-row>
<ion-col col-12 class="p0">
<h6>Booking ID: {{bookReplace(bookData.bookingId)}}</h6>
</ion-col>
</ion-row>
</li>
</ul>
</div>
<!-- <div *ngIf="!emptydataflag">
<div style="text-align:center;"> <strong>
Sorry , no bookings found!</strong>
</div>
</div> -->
</ion-content>
\ No newline at end of file
import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { TripPage } from './trip';
import { TranslateModule } from '@ngx-translate/core';
@NgModule({
declarations: [
TripPage,
],
imports: [
IonicPageModule.forChild(TripPage),
TranslateModule.forChild()
],
})
export class TripPageModule {}
page-trip {
.mytrip_list {
ul {
margin: 0px;
padding: 10px;
li {
list-style: none;
background-color: rgba(249, 249, 249, 1);
padding: 15px;
border-radius: 20px;
border-bottom-right-radius: 0px;
box-shadow: 0px 5px 19px -5px rgba(0, 0, 0, 0.2);
margin-bottom: 10px;
h4 {
margin: 0px;
padding: 0px;
color: rgba(98, 56, 28, 1);
font-size: 18px;
}
h5 {
margin: 0px;
padding: 0px;
}
h6 {
margin: 0px;
padding: 0px;
background-image: url("../assets/imgs/arrow_right.png");
background-repeat: no-repeat;
background-position: right;
color: #000;
font-weight: 400;
background-size: 30px;
}
h3 {
margin: 0px;
padding: 0px;
color: rgba(114, 114, 114, 1);
font-size: 16px;
font-weight: 400;
padding-top: 5px;
padding-bottom: 8px;
}
}
}
}
.background {
padding-top: 50px;
}
.card {
border-radius: 10px;
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
-ms-border-radius: 10px;
-o-border-radius: 10px;
}
.card-header {
border-bottom: 1px solid #c7c7c7;
}
.card-content {
padding-top: 15px !important;
}
.bus_icon {
color: #767676;
font-size: 35px;
}
.bus_name {
color: #e46262;
font-size: 15px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.bus_time {
color: #a1a1a1;
font-size: 13px;
letter-spacing: 1px;
}
.bus_type {
color: #575757;
padding-left: 10px !important;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.bus_seat {
strong {
color: #3a3a3a;
font-size: 12px;
}
}
.trip_bay {
width: 100%;
background: #FF585E;
color: #fff;
p {
color: #fff;
margin: 0px;
text-align: center;
padding: 10px;
font-weight: 300;
font-size: 18px;
}
}
}
\ No newline at end of file
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams, Events } from 'ionic-angular';
/*-------------Edited by Adarsh-----------------*/
import { Myservice } from "./../../providers/services/myservice";
import { user } from "../../models/mymodel";
import { TranslateService } from '@ngx-translate/core';
import { Storage } from '@ionic/storage';
import { TitleCasePipe } from '@angular/common'; //Use for converting firstletter into Capitalletter
@IonicPage()
@Component({
selector: 'page-trip',
templateUrl: 'trip.html',
})
export class TripPage {
emptydataflag : boolean;
passingdata : any;
bookDetails: any;
user1:any;
funcName:any
private current_page = 0;
trip_info:any[];
user:user;
lang:string = 'en';
local : any
data_array:any;
constructor(
public navCtrl: NavController,
public navParams: NavParams,
public myservice: Myservice,
public storage: Storage,
public translate: TranslateService,
public events: Events
) {
this.emptydataflag = true;
this.get_userdata();
this.bookDetails = [];
setTimeout(() => {
this.book_details();
}, 500);
this.events.subscribe('user:lang', data => {
setTimeout(() => {
this.langTrans();
}, 500);
})
}
langTrans() {
this.storage.get('lang').then(lang => {
if (lang != null) {
this.translate.use(lang)
this.lang = lang;
} else {
this.translate.use('en');
this.lang = 'en';
}
})
}
ionViewDidLoad() {
this.langTrans();
this.get_userdata();
}
get_userdata() {
this.storage.get('user_data').then(data => {
this.local = data;
console.log('Local data' , this.local);
});
this.events.subscribe('user:created', (user, time) => {
this.user = user.data;
console.log('User data' , this.local)
});
}
/*-------------------------Getting Book details--------------------------------------------------------- */
book_details() {
console.log('User data', this.local);
const sendData = { 'userId': this.local.data.id, 'page': this.current_page, 'type': 'user' };
this.funcName = 'bookDetails';
this.myservice.show_loader();
this.myservice.online_service(this.funcName, sendData).subscribe(response => {
if ( response.status === 'success' && response.data.length > 0) {
this.bookDetails = this.bookDetails.concat(response.data);
++this.current_page;
} else {
this.bookDetails = this.bookDetails.length > 0 ? this.bookDetails : [];
this.emptydataflag = false;
}
this.myservice.hide_loader();
})
}
/*------------------------------Formating time to AM and PM--------------------------------- */
check_time(time: string, type: string) {
const timeArray = time.split(' - ');
if (type === 'start') {
return timeArray[0];
} else {
return timeArray[1];
}
}
/*---------------------------------------Passing data into TripdetailsPage----------------------------*/
getBookinfo(id: string, index: number) {
this.navCtrl.push("TripdetailsPage",{"bookingid": id });
}
/*--------------------------------------Enablinig Srolling effect------------------------------------------ */
logScrolling(event) {
this.book_details();
}
/*------------------------------------------End --------------------------------------------------------------*/
bookReplace(bookID: any) {
const str = bookID;
return str.replace(/^.{2}/g, 'TR');
}
}
<ion-header [ngClass]="lang=='ar' ? 'ar' : ''">
<div class="nav_header">
<button class="nav_btn nav_back floatLeft" (click)="back()">
</button>
<div class="nav_header_title floatLeft">
{{'booking.Booking Summary' | translate}}
</div>
<div class="clear"></div>
</div>
</ion-header>
<ion-content class="theme_background" [ngClass]="lang=='ar' ? 'ar' : ''">
<div class="ticket_wrapper" *ngIf="isResponce">
<div class="ticket_detail_top">
<div class="booking_id">
{{bookReplace(bookDetails.bookingCode)}}
</div>
<div class="ticket_details" *ngIf="boardingdetails">
<h5>BOARDING POINT</h5>
<p>{{bookDetails.travelDate}} {{bookDetails.fromStationName}}:{{bookDetails.boardingPointDetails.time}} </p>
<h2>{{boardingdetails.name}}</h2>
<!-- <h3></h3> -->
<h4>{{boardingdetails.landMark}}<br>{{boardingdetails.address}}</h4>
<h6>{{boardingdetails.contactNumber}}</h6>
</div>
</div>
<!-- <div class="ticket_details" style="background-color:rgba(248, 247, 246,1);">
<h5>BOARDING POINT</h5>
<p>June 26th 2019, 08:00 AM</p>
<h2>Chennai Central</h2>
<h3>Chennai</h3>
<h4>Shop No. 10, Platform No. 1, Omni Bus, <br>
Terminus, Landmark: Omni Bus Stand</h4>
<h6>+0 8888 000 000</h6>
</div> -->
<div class="busdetails" *ngIf="bookDetails">
<h5>BUS DETAILS</h5>
<ion-row>
<ion-col col-8 class="p0">
<h4>{{bookDetails.travelsName}}</h4>
</ion-col>
<ion-col col-4 class="p0 textRight">
<p>36 Seats</p>
</ion-col>
</ion-row>
<ion-row>
<ion-col class="p0">
<p>{{bookDetails.fromStationName}}:{{bookDetails.boardingPointDetails.time}} </p>
</ion-col>
<ion-col class="p0 textRight">
<p>{{bookDetails.busType}}</p>
</ion-col>
</ion-row>
<div *ngFor="let board of passengerdetails; let i=index">
<br>
<h5><strong>SEAT: {{passengerdetails[i].seatNbr}}</strong>PASSENGER</h5>
<h4>{{passengerdetails[i].name}}</h4>
<p>{{passengerdetails[i].age}}, {{passengerdetails[i].gender}}</p>
</div>
</div>
<div class="faredetails">
<ion-row>
<ion-col class="p0">
<h5>FARE DETAILS</h5>
</ion-col>
<ion-col class="p0 textRight">
<h4>Seats:5</h4>
</ion-col>
</ion-row>
<br>
<ion-row>
<ion-col class="p0">
<h6>Base Price</h6>
</ion-col>
<ion-col class="p0 textRight">
<h4>$464</h4>
</ion-col>
</ion-row>
<ion-row>
<ion-col class="p0">
<h6>Service Tax</h6>
</ion-col>
<ion-col class="p0 textRight">
<h4>$464</h4>
</ion-col>
</ion-row>
<ion-row>
<ion-col class="p0">
<h6>Transaction Fee</h6>
</ion-col>
<ion-col class="p0 textRight">
<h4>$464</h4>
</ion-col>
</ion-row>
<ion-row>
<ion-col class="p0">
<h6>Discount</h6>
</ion-col>
<ion-col class="p0 textRight">
<h4>$464</h4>
</ion-col>
</ion-row>
</div>
<div class="ticket_btm">
<ion-row>
<ion-col class="p0">
<h4>Total Amount</h4>
</ion-col>
<ion-col class="p0 textRight">
<h4><strong>$464</strong></h4>
</ion-col>
</ion-row>
</div>
</div>
</ion-content>
\ No newline at end of file
import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { TripdetailsPage } from './tripdetails';
import { TranslateModule } from '@ngx-translate/core';
@NgModule({
declarations: [
TripdetailsPage,
],
imports: [
IonicPageModule.forChild(TripdetailsPage),
TranslateModule.forChild()
],
})
export class TripdetailsPageModule {}
page-tripdetails {
.ticket_wrapper {
padding: 10px;
padding-bottom: 50px;
.ticket_detail_top {
background-image: url("../assets/imgs/ticket.png");
background-repeat: no-repeat;
background-position: center top;
background-size: 100%;
.booking_id {
text-align: right;
color: rgba(98, 56, 28, 1);
font-size: 20px;
padding-bottom: 0px;
padding-left: 20px;
padding-right: 20px;
padding-top: 50px;
}
border-bottom:1px dashed rgba(98,
56,
28,
1);
}
.ticket_details {
padding-left: 20px;
padding-right: 20px;
padding-top: 30px;
padding-bottom: 30px;
h2 {
margin: 0px;
padding: 0px;
text-transform: uppercase;
color: #000;
font-size: 20px;
padding-top: 15px;
font-weight: 600;
padding-bottom: 5px;
}
h3 {
margin: 0px;
color: #727272;
font-weight: 300;
padding-top: 5px;
padding-bottom: 5px;
font-size: 18px;
}
h4 {
margin: 0px;
color: #727272;
font-weight: 300;
padding-top: 10px;
padding-bottom: 15px;
font-size: 16px;
}
h5 {
margin: 0px;
padding: 0px;
color: rgba(98, 56, 28, 1);
padding-bottom: 5px;
font-size: 16px;
}
p {
margin: 0px;
padding: 0px;
color: #000;
padding-bottom: 4px;
}
h6 {
margin: 0px;
padding: 0px;
}
}
.busdetails {
padding-left: 20px;
padding-right: 20px;
padding-top: 30px;
padding-bottom: 30px;
background: rgba(255, 237, 210, 1);
h5 {
margin: 0px;
padding: 0px;
color: #62381c;
padding-bottom: 5px;
font-size: 16px;
font-weight: 600;
padding-bottom: 15px;
strong {
color: rgba(255, 138, 0, 1);
padding-right: 5px;
}
}
h4 {
margin: 0px;
padding: 0px;
font-size: 16px;
font-weight: 700;
padding-bottom: 5px;
text-transform: uppercase;
}
p {
margin: 0px;
padding: 0px;
padding-bottom: 4px;
}
}
.faredetails {
padding-left: 20px;
padding-right: 20px;
padding-top: 30px;
padding-bottom: 10px;
background: rgba(254, 221, 183, 1);
border-bottom: 1px dashed #fff;
h5 {
margin: 0px;
padding: 0px;
color: #62381c;
padding-bottom: 5px;
font-size: 16px;
font-weight: 600;
padding-bottom: 15px;
strong {
color: rgba(255, 138, 0, 1);
padding-right: 5px;
}
}
h4 {
margin: 0px;
padding: 0px;
color: #62381c;
padding-bottom: 5px;
font-size: 16px;
font-weight: 400;
padding-bottom: 15px;
}
h6 {
margin: 0px;
padding: 0px;
color: #000;
padding-bottom: 5px;
font-size: 16px;
font-weight: 400;
padding-bottom: 15px;
}
}
.ticket_btm {
padding-left: 20px;
padding-right: 20px;
padding-top: 20px;
padding-bottom: 20px;
background-image: url("../assets/imgs/bottom_ticket.png");
background-repeat: no-repeat;
background-position: center bottom;
background-size: 100%;
h4 {
margin: 0px;
padding: 0px;
color: #62381c;
padding-bottom: 5px;
font-size: 16px;
font-weight: 400;
padding-bottom: 15px;
}
h6 {
margin: 0px;
padding: 0px;
color: #000;
padding-bottom: 5px;
font-size: 16px;
font-weight: 400;
padding-bottom: 15px;
}
}
}
}
\ No newline at end of file
/*----Imported Storage as extra pacakge------*/
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams, Events } from 'ionic-angular';
import { TranslateService } from '@ngx-translate/core';
import { Storage } from '@ionic/storage';
import {Myservice} from '../../providers/services/myservice'
@IonicPage()
@Component({
selector: 'page-tripdetails',
templateUrl: 'tripdetails.html',
})
export class TripdetailsPage {
boardingdetails:any;
isResponce: boolean =false;
passengerdetails:any;
id:any;
funName:any;
bookDetails: any;
local :any
result:any;
lang:string = 'en';
sendingdata:any;
constructor(public navCtrl: NavController, public navParams: NavParams, public translate: TranslateService, public events: Events, public storage: Storage ,public myservice: Myservice, ) {
this.id = this.navParams.get('bookingid');
console.log('Booking Id',this.id);
this.events.subscribe('user:lang', data => {
setTimeout(() => {
this.langTrans();
}, 500);
})
}
/* -------------------------------Construtor end -----------------------------------------*/
langTrans() {
this.storage.get('lang').then(lang => {
if (lang != null) {
this.translate.use(lang)
this.lang = lang;
}
else {
this.translate.use('en');
this.lang = 'en';
}
})
}
ionViewDidLoad() {
this.langTrans();
this.ticketdetails();
}
back() {
this.navCtrl.pop();
}
/*--------------------------Details of particular ticket----------------------------------------- */
ticketdetails() {
this.funName = 'online_service';
var url = { url:'bookingdetails?username=javatest&password=123456&bookingCode=' + this.id};
console.log(url);
this.myservice.show_loader();
this.myservice.presentToast('Please wait ,your ticket details are loading')
this.myservice.online_service(this.funName,url).subscribe(response => {
this.myservice.hide_loader();
if (response.message === 'Success') {
console.log('True')
this.isResponce= true;
this.bookDetails = response;
console.log(this.isResponce)
this.passengerdetails = this.myservice.ObjArray(this.bookDetails.passengerDetails);
console.log('Passenger details' , this.passengerdetails);
this.boardingdetails = this.bookDetails.boardingPointDetails;
}
else {
this.isResponce = false
console.log(this.isResponce)
this.myservice.presentToast('Ticket already Cancelled');
}
})
console.log('Book details outside function' , this.bookDetails)
}
bookReplace(bookID: any) {
const str = bookID;
return str.replace(/^.{2}/g, 'TR');
}
/*--------------------------------End of Code---------------------------------------------------------------------- */
}
import { Injectable } from '@angular/core';
import { AngularFireAuth } from 'angularfire2/auth';
import { usercreds } from '../../models/interfaces/usercreds';
/*
Generated class for the AuthProvider provider.
See https://angular.io/docs/ts/latest/guide/dependency-injection.html
for more info on providers and Angular 2 DI.
*/
@Injectable()
export class AuthProvider {
constructor(public afireauth: AngularFireAuth) {
}
/*
For logging in a particular user. Called from the login.ts file.
*/
login(credentials: usercreds) {
var promise = new Promise((resolve, reject) => {
this.afireauth.auth.signInWithEmailAndPassword(credentials.email, credentials.password).then(() => {
resolve(true);
}).catch((err) => {
reject(err);
})
})
return promise;
}
}
\ No newline at end of file
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({ name: 'dateSet' })
export class DateSet implements PipeTransform {
transform(timeString: string ) {
let time;
time = timeString.toString ().match (/^([01]\d|2[0-3])(:)([0-5]\d)(:[0-5]\d)?$/) || [timeString];
if (time.length > 1) { // If time format correct
time = time.slice (1); // Remove full string match value
time[5] = +time[0] < 12 ? 'AM' : 'PM'; // Set AM/PM
time[3] = ' ';
time[4] = ' ';
time[0] = +time[0] % 12 || 12; // Adjust hours
}
return time.join ('');
}
}
import { Pipe, PipeTransform } from '@angular/core';
import { DatePipe } from '@angular/common';
@Pipe({
name: 'myfilter',
pure: false
})
export class MyFilterPipe implements PipeTransform {
transform(items: any[], filter_val): any {
if (!items || !filter_val) {
return items;
}
// filter items array, items which match and return true will be
// kept, false will be filtered out
return items.filter(item => item.dplace.toLowerCase().indexOf(filter_val.toLowerCase()) !== -1);
}
}
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({ name: 'searchPipe', pure: false })
export class SearchPipe implements PipeTransform {
transform(result, filters ) {
console.log(filters);
return result.filter(function(item) {
let index;
let time_state: any;
let state = 1;
if ( filters.travels.length !== 0 || filters.drop_point.length !== 0 || filters.pick_point.length !== 0
|| filters.time.length !== 0 || filters.type.length !== 0) {
if (filters.travels.length !== 0) {
state = 0;
index = filters.travels.indexOf(item.operatorCode);
if (index !== -1) {
state = 1;
}
}
if (filters.pick_point.length !== 0 && state === 1) {
state = 0;
if (item.boardingPointDetails instanceof Array) {
let pick_state = false;
item.boardingPointDetails.forEach((items: any) => {
index = filters.pick_point.indexOf(items.name);
if (index !== -1) {
pick_state = true;
}
});
if ( pick_state !== false ) {
state = 1;
}
} else {
if (item.boardingPointDetails !== undefined) {
index = filters.pick_point.indexOf(item.boardingPointDetails.name);
if (index !== -1) {
state = 1;
}
}
}
}
if (filters.drop_point.length !== 0 && state === 1) {
state = 0;
if (item.droppingPointDetails instanceof Array) {
let pick_state = false;
item.droppingPointDetails.forEach((items: any) => {
index = filters.drop_point.indexOf(items.name);
if (index !== -1) {
pick_state = true;
}
});
if ( pick_state !== false ) {
state = 1;
}
} else {
if (item.droppingPointDetails !== undefined) {
index = filters.drop_point.indexOf(item.droppingPointDetails.name);
if (index !== -1) {
state = 1;
}
}
}
}
if (filters.time.length !== 0 && state === 1) {
state = 0;
const time_split = item.departureTime.split(':');
const date1 = new Date();
date1.setHours(time_split[0]);
date1.setMinutes(time_split[1]);
const bus_time = date1.getTime();
const item_list = [];
time_state = false;
filters.time.filter(times => {
const date_list = times.split('-');
// tslint:disable-next-line:radix
const start_time = parseInt(date_list[0]);
// tslint:disable-next-line:radix
const end_time = parseInt(date_list[1]);
if (start_time < bus_time && bus_time < end_time) {
time_state = true;
}
});
if (time_state !== false) {
state = 1;
}
}
if (filters.type.length !== 0 && state === 1) {
state = 0;
const str = item.busType;
let type_state = false;
filters.type.forEach((items: any) => {
if (items === 'A/C' || items === 'Sleeper') {
if (items === 'A/C') {
index = str.includes('Non');
if (index !== true) {
type_state = true;
}
} else {
index = str.includes('Semi');
if (index !== true) {
type_state = true;
}
}
} else {
index = str.includes(items);
if (index === true) {
type_state = true;
}
}
});
if (type_state !== false) {
state = 1;
}
}
if (state === 1) {
return item;
}
} else {
return item;
}
})
//return result;
}
}
/*-------- Created by Adarsh ------------*/
import { Injectable } from '@angular/core';
import {Http} from '@angular/http';
import 'rxjs/add/operator/map';
import { Toast } from '@ionic-native/toast';
@Injectable()
export class Common {
constructor(
private toast: Toast
) {
}
presentToast(message:string) {
this.toast.show(message, 'short', 'bottom').subscribe(
toast => {
console.log(toast);
}
);
}
}
\ No newline at end of file
/*-------- Created by Adarsh ------------*/
import { Injectable } from '@angular/core';
import { Http, RequestOptions } from '@angular/http';
import {HttpHeaders,HttpClient} from'@angular/common/http'
import 'rxjs/add/operator/map';
import { map, catchError ,retry} from 'rxjs/operators';
import 'rxjs/add/operator/catch';
import {Observable} from 'rxjs/Observable';
import { LoadingController, ToastController, Events,AlertController } from 'ionic-angular';
import { AbstractControl, ValidatorFn } from '@angular/forms'
import { Storage } from '@ionic/storage';
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json',
'Auth': 'my_key'
})
};
@Injectable()
export class Myservice {
test_url1='http://techlabz.in/fixmyauto/Webservice_user/';
newurl = 'https://ticketrobo.in/admin/Mob_api/online_service'
base_url = 'https://ticketrobo.in/admin/Web_api/';
test_url= 'https://ticketrobo.in/admin/web-api/';
bookseaturl= 'https://ticketrobo.in/admin/Web_api/';
webservice_url = this.base_url;
webservicee_url= "https://ticketrobo.in/admin/web_api/";
serverApiDev = 'http://devapp.ticketgoose.com/bookbustickets/rest/json/2.0/';
loader: any;
loaderStatus:boolean;
alert : any;
post_url: any;
data: any;
result: any;
onlineurl:any;
constructor(public alertCtrl: AlertController,public http: Http, public loadingCtrl: LoadingController, public toastCtrl: ToastController, public events: Events, public storage: Storage) {
}
show_loader() {
this.loader = this.loadingCtrl.create({
content: ""
});
this.loader.present();
}
hide_loader() {
this.loader.dismissAll();
}
get_promo(url){
return this.http.get(this.bookseaturl+url).map( res => res.json());
}
get_points(url) {
return this.http.get(this.webservice_url+url).map(res => res.json());
}
get_data(url) {
return this.http.get(this.webservice_url+url).map(res => res.json());
}
post_data2(url: string, data) {
return this.http.get(this.webservicee_url+url, data).pipe(map((response: any) => response));
}
online_service(url,data = null ) {
return this.http.post(this.webservice_url+ url, JSON.stringify(data)).map(res=>res.json())
}
post_data1(url: string, data) {
return this.http.post(this.webservice_url+url, JSON.stringify(data)).map((response: any) => response);
}
login_user(url , data=null) {
return this.http.post(this.webservicee_url+ url, JSON.stringify(data)).map(res=>res.json())
}
post_data(url,data) {
return new Promise((resolve, reject) => {
this.http.post(this.webservice_url+url, JSON.stringify(data)).map(res=>{
// console.log(res.json());
resolve(res.json());
}).subscribe(
data => {//console.log(data)
},
err => {
reject(err);
this.presentToast("Something went wrong, please contact our team");
console.log("Something went wrong, please contact your developer")
}
);
})
}
login(url:string,data)
{
return this.http.post(this.webservice_url+url, JSON.stringify(data)).map(res=>res.text());
}
web_post(url,data){
return this.http.post(this.webservice_url+url, JSON.stringify(data)).map(res=>res.json());
}
handleError(error: Response) {
console.log(error);
//return Observable.throw(error.json().error || 'Server error');
}
presentToast(message) {
let toast = this.toastCtrl.create({
message: message,
duration: 5000,
position: 'bottom'
});
toast.onDidDismiss(() => {
console.log('Dismissed toast');
});
toast.present();
}
checkLimit(min: number, max: number): ValidatorFn {
return (c: AbstractControl): { [key: string]: boolean } | null => {
if (c.value && (isNaN(c.value) || c.value < min || c.value > max)) {
return { 'range': true };
}
return null;
};
}
ObjArray(data: any) {
if (data instanceof Array !== true) {
if (data !== undefined) {
return new Array(data);
} else {
return undefined;
}
} else {
return data;
}
}
bookingdetail_service(url: string, data = null) {
// tslint:disable-next-line:max-line-length
// return this.http.post('http://devapp.ticketgoose.com/bookbustickets/rest/json/2.0/search?username=javatest&password=123456&travelDate=2018-12-20&fromStationCode=72&toStationCode=76', {}, httplive).pipe(map((response: any) => response));
return this.http.post(this.webservice_url+ url, JSON.parse(data)).map(res=>res.json());
}
bookseat(url,data = null)
{
return this.http.post(this.bookseaturl+url ,JSON.stringify(data)).map(res=>res.json())
}
show_alert(title, message) {
this.alert = this.alertCtrl.create({
title: title,
subTitle: message,
buttons: ['OK']
});
this.alert.present();
}
post_data3(url: string, data) {
return this.http.post(this.test_url1+url, JSON.stringify(data)).map((response: any) => response);
}
}
\ No newline at end of file
import { Injectable } from '@angular/core';
import {Http} from '@angular/http';
import 'rxjs/add/operator/map';
import {Observable} from 'rxjs/Observable';
@Injectable()
export class ServicesProvider {
constructor(private http:Http) {
}
searchMovies(movieName) {
var url = 'http://api.themoviedb.org/3/search/movie?query=&query=' + encodeURI(movieName) + '&api_key=5fbddf6b517048e25bc3ac1bbeafb919';
var response = this.http.get(url).map(res => res.json());
return response;
}
}
\ No newline at end of file
import { Injectable} from '@angular/core'
@Injectable()
export class ValidationService {
errorList = {
'required': 'This field is required',
'email': 'Please enter a valid email',
'phone': 'Please enter a valid phone number',
'password': 'Please enter a valid password',
'minLength': 'Minimum characters length is',
'maxLength': 'Maximum characters length is',
'min': 'Age min start at ',
'max': 'Age max end at ',
'confirm': 'Password mismatch'
};
constructor() { }
getErrorList() {
return this.errorList;
}
getError(error: any): string {
if (this.errorList.hasOwnProperty(error.code)) { // check whether the error code having our definition
return this.errorList[error.code]; // return our definition
} else {
return error.message;
}
}
}
/**
* Check out https://googlechromelabs.github.io/sw-toolbox/ for
* more info on how to use sw-toolbox to custom configure your service worker.
*/
'use strict';
importScripts('./build/sw-toolbox.js');
self.toolbox.options.cache = {
name: 'ionic-cache'
};
// pre-cache our key assets
self.toolbox.precache(
[
'./build/main.js',
'./build/vendor.js',
'./build/main.css',
'./build/polyfills.js',
'index.html',
'manifest.json'
]
);
// dynamically cache any other local assets
self.toolbox.router.any('/*', self.toolbox.fastest);
// for any other requests go to the network, cache,
// and then only use that cached resource if your user goes offline
self.toolbox.router.default = self.toolbox.networkFirst;
// Ionic Variables and Theming. For more info, please see:
// http://ionicframework.com/docs/theming/
// Font path is used to include ionicons,
// roboto, and noto sans fonts
$font-path: "../assets/fonts";
// The app direction is used to include
// rtl styles in your app. For more info, please see:
// http://ionicframework.com/docs/theming/rtl-support/
$app-direction: ltr;
@import "ionic.globals";
// Shared Variables
// --------------------------------------------------
// To customize the look and feel of this app, you can override
// the Sass variables found in Ionic's source scss files.
// To view all the possible Ionic variables, see:
// http://ionicframework.com/docs/theming/overriding-ionic-variables/
// Named Color Variables
// --------------------------------------------------
// Named colors makes it easy to reuse colors on various components.
// It's highly recommended to change the default colors
// to match your app's branding. Ionic uses a Sass map of
// colors so you can add, rename and remove colors as needed.
// The "primary" color is the only required color in the map.
$colors: ( primary: #28328c, secondary: #4f5cd5, danger: #f53d3d, light: #f4f4f4, dark: #222, hcolor: #03b6b3, );
// App iOS Variables
// --------------------------------------------------
// iOS only Sass variables can go here
// App Material Design Variables
// --------------------------------------------------
// Material Design only Sass variables can go here
// App Windows Variables
// --------------------------------------------------
// Windows only Sass variables can go here
// App Theme
// --------------------------------------------------
// Ionic apps can have different themes applied, which can
// then be future customized. This import comes last
// so that the above variables are used and Ionic's
// default are overridden.
@import "ionic.theme.default";
// Ionicons
// --------------------------------------------------
// The premium icon font for Ionic. For more info, please see:
// http://ionicframework.com/docs/ionicons/
@import "ionic.ionicons";
// Fonts
// --------------------------------------------------
@import "roboto";
@import "noto-sans";
\ No newline at end of file
{
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"declaration": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"lib": [
"dom",
"es2015"
],
"module": "es2015",
"moduleResolution": "node",
"sourceMap": true,
"target": "es5"
},
"include": [
"src/**/*.ts"
],
"exclude": [
"node_modules",
"src/**/*.spec.ts",
"src/**/__tests__/*.ts"
],
"compileOnSave": false,
"atom": {
"rewriteTsconfig": false
}
}
{
"extends": "tslint-ionic-rules/strict",
"rules": {
"no-duplicate-variable": true,
"no-unused-variable": [
true
]
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment