Pending offers

This commit is contained in:
CHIEFSOFT\ameye
2023-08-22 15:49:48 -04:00
parent 86477146d0
commit 5adf98f455
15 changed files with 663 additions and 32 deletions
+4
View File
@@ -198,6 +198,10 @@ const routes: Routes = [
path: 'joboffers', path: 'joboffers',
loadChildren: () => import('./pages/joboffers/joboffers.module').then(m => m.JoboffersPageModule) loadChildren: () => import('./pages/joboffers/joboffers.module').then(m => m.JoboffersPageModule)
}, },
{
path: 'pendingoffers',
loadChildren: () => import('./pages/pendingoffers/pendingoffers.module').then(m => m.PendingoffersPageModule)
},
]; ];
@NgModule({ @NgModule({
+2 -2
View File
@@ -16,10 +16,10 @@
</div> </div>
<div class="row"> <div class="row">
<ion-label class="bg_text">{{jobData.offer_code}}</ion-label> <ion-label class="bg_text">{{jobData.contract}}</ion-label>
<div class="rate"> <div class="rate">
<!-- <ion-icon name="star-half-outline" color="warning"></ion-icon>--> <!-- <ion-icon name="star-half-outline" color="warning"></ion-icon>-->
<ion-label class="review"> Due date: {{jobData.delivery_date}} </ion-label> <ion-label class="review"> Due date: {{jobData.delivery_date |date}} </ion-label>
</div> </div>
</div> </div>
+30 -15
View File
@@ -14,14 +14,19 @@
<!-- <ion-icon slot="end" name="bookmark-outline" color="primary"></ion-icon>--> <!-- <ion-icon slot="end" name="bookmark-outline" color="primary"></ion-icon>-->
</div> </div>
<div class="row"> <!-- <div class="row">-->
<ion-label class="bg_text">.....</ion-label> <!-- <ion-label class="bg_text">.....</ion-label>-->
<div class="rate"> <!-- <div class="rate">-->
<ion-button size="small" fill="outline" (click)="onMyJobs()"> <!-- <ion-button size="small" fill="outline" (click)="onMyJobs()">-->
<ion-icon name="star-half-outline" color="warning"></ion-icon> <!-- <ion-icon name="star-half-outline" color="warning"></ion-icon>-->
My Jobs</ion-button> <!-- My Jobs</ion-button>-->
</div> <!-- </div>-->
</div> <!-- <div class="rate">-->
<!-- <ion-button size="small" fill="outline" (click)="onMyJobs()">-->
<!-- <ion-icon name="star-half-outline" color="warning"></ion-icon>-->
<!-- Pending</ion-button>-->
<!-- </div>-->
<!-- </div>-->
<!-- <ion-label class="color_text">$40</ion-label>--> <!-- <ion-label class="color_text">$40</ion-label>-->
@@ -31,24 +36,34 @@
<ion-label>{{total_active}} Active</ion-label> <ion-label>{{total_active}} Active</ion-label>
</div> </div>
<div class="stud"> <div class="stud">
<ion-icon slot="start" name="time" color="primary"></ion-icon> <!-- <ion-icon slot="start" name="time" color="primary"></ion-icon>-->
<ion-label>{{total_review}} Review</ion-label> <!-- <ion-label>{{total_review}} Review</ion-label>-->
<ion-button size="small" fill="outline" (click)="onMyJobs()">
<ion-icon name="time" color="warning"></ion-icon>
My Jobs</ion-button>
</div> </div>
<div class="stud"> <div class="stud">
<ion-icon slot="start" name="document-text" color="primary"></ion-icon> <!-- <ion-icon slot="start" name="document-text" color="primary"></ion-icon>-->
<ion-label>{{total_pastdue}} Past Due</ion-label> <!-- <ion-label>{{total_pastdue}} Past Due</ion-label>-->
<ion-button size="small" fill="outline" (click)="onMyPendingJobs()">
<ion-icon name="document-text" color="warning"></ion-icon>
Pending</ion-button>
</div> </div>
</div> </div>
<ion-segment [(ngModel)]="tabs"> <ion-segment [(ngModel)]="tabs">
<ion-segment-button value="active"> <ion-segment-button value="active">
<ion-label>Active</ion-label> <ion-label>Active ({{total_active}})</ion-label>
</ion-segment-button> </ion-segment-button>
<ion-segment-button value="review"> <ion-segment-button value="review">
<ion-label>Review</ion-label> <ion-label>Review ({{total_review}})</ion-label>
</ion-segment-button> </ion-segment-button>
<ion-segment-button value="pastdue"> <ion-segment-button value="pastdue">
<ion-label>Past Due</ion-label> <ion-label>Past Due ( {{total_pastdue}} )</ion-label>
</ion-segment-button> </ion-segment-button>
</ion-segment> </ion-segment>
@@ -104,4 +104,8 @@ export class JobmanagerPage implements OnInit {
jobPastDue(item){ jobPastDue(item){
this.router.navigate(['jobpastdue'],{state: item}); this.router.navigate(['jobpastdue'],{state: item});
} }
onMyPendingJobs(){
this.router.navigate(['pendingoffers']);
}
} }
@@ -10,17 +10,17 @@
<div class="boxed_contents"> <div class="boxed_contents">
<div class="flex"> <div class="flex">
<ion-label class="bold_text_red">Past Due Task</ion-label> <ion-label class="bold_text_red">Past Due Task</ion-label>
<ion-icon slot="end" name="bookmark-outline" color="primary"></ion-icon> <!-- <ion-icon slot="end" name="bookmark-outline" color="primary"></ion-icon>-->
</div> </div>
<div class="flex"> <div class="flex">
<ion-label class="bold_text">{{jobData.title}}</ion-label> <ion-label class="bold_text">{{jobData.title}}</ion-label>
</div> </div>
<div class="row"> <div class="row">
<ion-label class="bg_text">{{jobData.offer_code}}</ion-label> <ion-label class="bg_text">{{jobData.contract}}</ion-label>
<div class="rate"> <div class="rate">
<!-- <ion-icon name="star-half-outline" color="warning"></ion-icon>--> <!-- <ion-icon name="star-half-outline" color="warning"></ion-icon>-->
<ion-label class="review"> Due date: {{jobData.delivery_date}} </ion-label> <ion-label class="review"> Due date: {{jobData.delivery_date |date}} </ion-label>
</div> </div>
</div> </div>
@@ -38,9 +38,9 @@
</div> </div>
<ion-card> <ion-card>
<ion-card-header> <!-- <ion-card-header>-->
<ion-card-subtitle>Task Actions</ion-card-subtitle> <!-- <ion-card-subtitle>Task Actions</ion-card-subtitle>-->
</ion-card-header> <!-- </ion-card-header>-->
<ion-card-content> <ion-card-content>
This task is already past the due date. You can extend the timeline or cancel the job. This task is already past the due date. You can extend the timeline or cancel the job.
</ion-card-content> </ion-card-content>
+5 -5
View File
@@ -17,10 +17,10 @@
</div> </div>
<div class="row"> <div class="row">
<ion-label class="bg_text">{{jobData.offer_code}}</ion-label> <ion-label class="bg_text">{{jobData.contract}}</ion-label>
<div class="rate"> <div class="rate">
<!-- <ion-icon name="star-half-outline" color="warning"></ion-icon>--> <!-- <ion-icon name="star-half-outline" color="warning"></ion-icon>-->
<ion-label class="review"> Due date: {{jobData.delivery_date}} </ion-label> <ion-label class="review"> Due date : {{jobData.delivery_date |date}} </ion-label>
</div> </div>
</div> </div>
@@ -38,9 +38,9 @@
</div> </div>
<ion-card> <ion-card>
<ion-card-header> <!-- <ion-card-header>-->
<ion-card-subtitle>Task is Completed </ion-card-subtitle> <!-- <ion-card-subtitle>Task is Completed </ion-card-subtitle>-->
</ion-card-header> <!-- </ion-card-header>-->
<ion-card-content> <ion-card-content>
This job is in review, you can accept or reject completion. This job is in review, you can accept or reject completion.
</ion-card-content> </ion-card-content>
@@ -0,0 +1,17 @@
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { PendingoffersPage } from './pendingoffers.page';
const routes: Routes = [
{
path: '',
component: PendingoffersPage
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule],
})
export class PendingoffersPageRoutingModule {}
@@ -0,0 +1,20 @@
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { IonicModule } from '@ionic/angular';
import { PendingoffersPageRoutingModule } from './pendingoffers-routing.module';
import { PendingoffersPage } from './pendingoffers.page';
@NgModule({
imports: [
CommonModule,
FormsModule,
IonicModule,
PendingoffersPageRoutingModule
],
declarations: [PendingoffersPage]
})
export class PendingoffersPageModule {}
@@ -0,0 +1,66 @@
<ion-content>
<ion-icon slot="start" name="arrow-back" class="back" (click)="onBack()"></ion-icon>
<div class="ion-padding">
<div class="flex">
<ion-label class="bold_text">Pending Offers</ion-label>
<!-- <ion-icon slot="end" name="bookmark-outline" color="primary"></ion-icon>-->
</div>
<!-- <div class="row">-->
<!-- <ion-label class="bg_text">3D Design</ion-label>-->
<!-- <div class="rate">-->
<!-- <ion-icon name="star-half-outline" color="warning"></ion-icon>-->
<!-- <ion-label class="review">4.8 (4478 reviews)</ion-label>-->
<!-- </div>-->
<!-- </div>-->
<!-- <ion-label class="color_text">$40</ion-label>-->
<div class="items">
<!-- <div class="stud">-->
<!-- <ion-icon slot="start" name="people" color="primary"></ion-icon>-->
<!-- <ion-label>9876 Students</ion-label>-->
<!-- </div>-->
<!-- <div class="stud">-->
<!-- <ion-icon slot="start" name="time" color="primary"></ion-icon>-->
<!-- <ion-label>2.5 hours</ion-label>-->
<!-- </div>-->
<!-- <div class="stud">-->
<!-- <ion-icon slot="start" name="document-text" color="primary"></ion-icon>-->
<!-- <ion-label>Certificate</ion-label>-->
<!-- </div>-->
</div>
<div class="lesson">
<div class="video" *ngFor="let item of jobManagerOffersData">
<div class="left">
<div class="bg_image men_image" [style.backgroundImage]="'url(assets/images/line.png)'"></div>
<div class="text">
<ion-label class="bold_text">{{item.title}}</ion-label>
<ion-label class="grey_text">{{item.description}}</ion-label>
<ion-label class="price_line">{{item.offer_code}} {{item.price*0.01}} {{item.currency}} </ion-label>
<ion-label class="due_date">Expire: {{item.expire |date}}</ion-label>
<ion-label class="grey_text">Send to : {{item.job_to}}</ion-label>
</div>
</div>
<div class="right">
<ion-icon name="chevron-forward-outline" color="medium"></ion-icon>
</div>
</div>
</div>
</div>
</ion-content>
<ion-footer>
<ion-toolbar>
<div class="button" (click)="onBack()">
<ion-label class="text">Return</ion-label>
</div>
</ion-toolbar>
</ion-footer>
@@ -0,0 +1,385 @@
ion-content {
.back_image {
width: 100%;
height: 230px;
.back {
font-size: 25px;
color: white;
}
}
.flex {
display: flex;
justify-content: space-between;
align-items: center;
ion-icon {
font-size: 22px;
}
}
.row {
display: flex;
align-items: center;
margin-top: 10px;
.bg_text {
color: var(--ion-color-primary);
background: #dfe1f3;
font-size: 12px;
padding: 2px 5px;
border-radius: 5px;
margin-right: 10px;
}
.rate {
display: flex;
align-items: center;
.review {
margin-left: 5px;
}
}
}
.color_text {
margin-top: 10px;
font-size: 22px;
font-family: 'semi-bold';
color: var(--ion-color-primary);
}
.items {
display: flex;
justify-content: space-between;
margin-top: 10px;
margin-bottom: 20px;
border-bottom: 1px solid lightgrey;
padding-bottom: 10px;
.stud {
display: flex;
align-items: center;
ion-icon {
margin-right: 5px;
}
ion-label {
color: grey;
}
}
}
.about {
margin-top: 10px;
.head_text {
font-size: 18px;
font-family: 'semi-bold';
margin-bottom: 10px;
}
.mentor {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
.left {
display: flex;
.men_image {
height: 50px;
width: 50px;
border-radius: 100%;
}
.bold {
font-family: 'semi-bold';
}
.grey {
color: grey;
font-size: 14px;
}
}
ion-icon {
font-size: 25px;
}
}
.description {
color: grey;
margin-bottom: 5px;
}
}
.lesson {
margin-top: 20px;
.bold {
font-family: 'semi-bold';
}
.color {
color: var(--ion-color-primary);
}
.grey {
color: grey;
}
.sec {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 10px;
}
.video {
display: flex;
justify-content: space-between;
align-items: center;
background-color: white;
padding: 15px;
box-shadow: 0px 0px 20px 1px rgba(0, 0, 0, 0.1);
border-radius: 10px;
margin-top: 20px;
.left {
display: flex;
}
.men_image {
height: 40px;
width: 40px;
border-radius: 100%;
}
.text {
margin-left: 10px;
}
.bold_text {
font-size: 16px;
font-family: 'bold';
}
.grey_text {
font-size: 14px;
color: grey;
}
}
}
.review_tab {
margin-top: 20px;
.total {
display: flex;
align-items: center;
justify-content: space-between;
.star-rate {
display: flex;
align-items: center;
.bold {
font-size: 17px;
font-family: 'semi-bold';
margin-left: 5px;
}
}
.color {
color: var(--ion-color-primary);
font-size: 14px;
}
}
.story-item {
overflow: scroll;
display: flex;
flex-direction: row;
margin-top: 20px;
.menu {
width: 100%;
display: flex;
flex-direction: row;
.item {
padding: 5px;
margin: 5px;
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
ion-thumbnail {
border-radius: 15px;
width: max-content;
height: 60px;
width: 60px;
--border-radius: 50%;
}
ion-label {
font-size: 14px;
font-family: "medium";
color: var(--ion-color-medium);
}
}
.text {
display: flex;
align-items: center;
text-align: center;
.select {
display: flex;
align-items: center;
border: 1px solid var(--ion-color-primary);
border-radius: 20px;
padding: 2px 15px;
margin-right: 10px;
.rate_num {
margin-left: 5px;
color: var(--ion-color-primary);
}
}
.show {
background-color: var(--ion-color-primary);
}
.white {
color: white !important;
}
.choice {
display: flex;
}
}
}
}
.reviw_list {
margin-top: 25px;
.profile {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 10px;
.left {
display: flex;
align-items: center;
.men_image {
height: 40px;
width: 40px;
border-radius: 100%;
}
.bold {
font-family: 'semi-bold';
}
.grey {
color: grey;
font-size: 14px;
}
}
.right {
display: flex;
align-items: center;
.select {
display: flex;
align-items: center;
border: 1px solid var(--ion-color-primary);
border-radius: 20px;
padding: 2px 15px;
margin-right: 10px;
.rate_num {
margin-left: 5px;
color: var(--ion-color-primary);
}
}
ion-icon {
font-size: 20px;
}
}
}
.like {
display: flex;
align-items: center;
margin-top: 10px;
.heart {
font-size: 25px;
margin-right: 5px;
}
.count {
margin-right: 10px;
}
.time {
color: grey;
font-size: 14px;
}
}
}
}
.bold_text {
font-size: 20px;
font-family: 'bold';
}
}
ion-footer {
--background: white;
ion-toolbar {
--border-width: 0px;
padding: 10px;
align-items: center;
ion-icon {
color: white;
font-size: 25px;
}
.button {
background-color: var(--ion-color-primary);
display: flex;
align-items: center;
justify-content: space-around;
border-radius: 30px;
padding: 12px 0;
.text {
color: white;
}
}
}
}
@@ -0,0 +1,24 @@
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { IonicModule } from '@ionic/angular';
import { PendingoffersPage } from './pendingoffers.page';
describe('PendingoffersPage', () => {
let component: PendingoffersPage;
let fixture: ComponentFixture<PendingoffersPage>;
beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
declarations: [ PendingoffersPage ],
imports: [IonicModule.forRoot()]
}).compileComponents();
fixture = TestBed.createComponent(PendingoffersPage);
component = fixture.componentInstance;
fixture.detectChanges();
}));
it('should create', () => {
expect(component).toBeTruthy();
});
});
@@ -0,0 +1,57 @@
import { Router } from '@angular/router';
import { Component, OnInit } from '@angular/core';
import { NavController } from '@ionic/angular';
import {SessionDataProviderService} from "../../store/session-data-provider.service";
import {WrenchService} from "../../services/wrench.service";
@Component({
selector: 'app-pendingoffers',
templateUrl: './pendingoffers.page.html',
styleUrls: ['./pendingoffers.page.scss'],
})
export class PendingoffersPage implements OnInit {
tabs = 'about';
constructor(
private navctr: NavController,
private router: Router,
public sessionDataProviderService: SessionDataProviderService,
private wrenchService: WrenchService
) { }
ngOnInit() {
this.getPendingOffersData();
}
onBack() {
this.navctr.back();
}
usrData: {
action:number, member_id: number, uid: string, sessionid: string, limit:20, page:1,offset: 0
};
jobManagerOffersTotalData:any;
jobManagerOffersData: [];
getPendingOffersData(){
this.usrData = {action:11309,
member_id: this.sessionDataProviderService.member_id,
uid: this.sessionDataProviderService.member_uid,
sessionid: this.sessionDataProviderService.session ,
limit:20, page:1,offset: 0}
this.wrenchService.jobmanageroffers(this.usrData).subscribe(
jobManagerOffersTotalData => {
this.jobManagerOffersTotalData = jobManagerOffersTotalData;
console.log("jobManagerOffersTotalData RETURN->", this.jobManagerOffersTotalData);
this.jobManagerOffersData = this.jobManagerOffersTotalData.result_list;
// debugger;
console.log("jobManagerOffersData RETURN DATA->", this.jobManagerOffersTotalData);
}
);
}
}
+2 -2
View File
@@ -85,11 +85,11 @@
<ion-grid> <ion-grid>
<ion-row> <ion-row>
<ion-col size-md="3">Country</ion-col> <ion-col size-md="3">Country</ion-col>
<ion-col size-md="9">{{country}}</ion-col> <ion-col size-md="9">{{signup_country}}</ion-col>
</ion-row> </ion-row>
<ion-row> <ion-row>
<ion-col size-md="3">Username</ion-col> <ion-col size-md="3">Username</ion-col>
<ion-col size-md="9">{{username}}</ion-col> <ion-col size-md="9">{{signup_username}}</ion-col>
</ion-row> </ion-row>
</ion-grid> </ion-grid>
<ion-label class="or">Enter Confirmation Received In Email</ion-label> <ion-label class="or">Enter Confirmation Received In Email</ion-label>
+38 -2
View File
@@ -69,6 +69,9 @@ export class RegisterPage implements OnInit {
signUpResult:any; signUpResult:any;
signUpData: []; signUpData: [];
signup_country :string='';
signup_username :string='';
onFillProfile() { onFillProfile() {
if (this.username == null || this.username == '' || this.validateEmail(this.username) == false if (this.username == null || this.username == '' || this.validateEmail(this.username) == false
|| this.password == null || this.password == '' || this.password == null || this.password == ''
@@ -101,7 +104,40 @@ export class RegisterPage implements OnInit {
if (this.signUpResult.internal_return > 0 && this.signUpResult?.uid != ''){ if (this.signUpResult.internal_return > 0 && this.signUpResult?.uid != ''){
this.pending_uid = this.signUpResult.uid; this.pending_uid = this.signUpResult.uid;
this.signup_country = this.signUpResult.country;
this.signup_username = this.signUpResult.username;
this.random_text = '';
this.signup_state =2; this.signup_state =2;
/*
{
"action": "11010",
"added": "2023-08-22 19:28:05.991937",
"country": "NG",
"email": "ses66181+x1234@gmail.com",
"expire": "2023-09-21 19:28:05.991937",
"firstname": "Olu",
"id": "610",
"lastname": "Ameye",
"loc": "10.10.33.15",
"mobile": "MOBILE",
"news": "1",
"password": "d0fbea2563b377ea7074bced45c88dcb",
"pending_id": "610",
"phone": "",
"pid": "100",
"sessionid": "SSSSS-SSSSSS-SSSSSS",
"signup_random": "13635",
"status": "1",
"street1": "",
"terms": "1",
"uid": "07529070-79a6-4e34-835d-a3a50283e93d",
"username": "ses66181+x1234@gmail.com",
"verify_link": "WRENCHB-1176229640-1742094704-417159648",
"zipcode": "",
"internal_return": 610
}
*/
} }
else { else {
this.presentToast('Unable to continue with this params', 'middle'); this.presentToast('Unable to continue with this params', 'middle');
@@ -123,7 +159,7 @@ export class RegisterPage implements OnInit {
onCompleteProfile(){ onCompleteProfile(){
this.completeSignupData = { this.completeSignupData = {
action:11010, action:11010,
username: this.username, username: this.signup_username,
random_text: this.random_text, random_text: this.random_text,
password: this.password, password: this.password,
pending_uid: this.pending_uid, pending_uid: this.pending_uid,
@@ -147,7 +183,7 @@ export class RegisterPage implements OnInit {
); );
// //
alert(100); // alert(100);
} }
showAlert(mtitle: string, amessage: string) { showAlert(mtitle: string, amessage: string) {
/* let alert = this.alertCtrl.create({ /* let alert = this.alertCtrl.create({
+3
View File
@@ -149,6 +149,9 @@ export class WrenchService {
return this.getPostData("profilepasschange", reqData); return this.getPostData("profilepasschange", reqData);
} }
jobmanageroffers(usrData){
return this.getPostData("jobmanageroffers", usrData);
}
/* /*