add accepet task in app

This commit is contained in:
CHIEFSOFT\ameye
2024-09-24 23:15:22 -04:00
parent 59e816e396
commit f80b4f2470
6 changed files with 762 additions and 7 deletions
@@ -0,0 +1,110 @@
<div class="ion-padding">
<!-- <div class="flex hdt">-->
<!-- <ion-label class="bold_text">You have {{total_offers}} Offer(s)</ion-label>-->
<!-- </div>-->
<div *ngIf="total_offers>3;">
<ion-accordion-group>
<ion-accordion *ngFor="let item of myOffersData" value="{{item.offer_uid}}">
<ion-item slot="header" color="light">
<ion-label>{{item.title}}</ion-label>
</ion-item>
<div class="ion-padding" slot="content">
<div class="offers_div">
<ion-grid>
<ion-row>
<ion-col>
<img class="offer_banner" alt="{{item.title}}" src="{{session_image_server+'/'+curr_session+'/job/'+item.job_uid}}" />
</ion-col>
<ion-col>
<div>
<div class="offer_title">{{item.title}}</div>
<div class="expire">Expiration : {{item.expire | date}}</div>
<div class="price">Price : {{item.price*0.01| number : '1.2-2'}} {{item.currency}}</div>
</div>
<div class="detail_txt">
{{(item.job_description.length<95)? item.job_description :item.job_description.substring(0,95)+'...' }}
</div>
</ion-col>
</ion-row>
<ion-row>
<ion-col>
<ion-grid class="action_area">
<ion-row>
<ion-col>
<ion-button size="small" (click)="requestReject(item)" color="danger" fill="solid" shape="round">Reject</ion-button>
</ion-col>
<ion-col>
</ion-col>
<ion-col>
<ion-button size="small" (click)="requestStart(item)" color="success" fill="solid" shape="round">Start Now</ion-button>
</ion-col>
</ion-row>
</ion-grid>
</ion-col>
</ion-row>
</ion-grid>
</div>
</div>
</ion-accordion>
</ion-accordion-group>
</div>
<div *ngIf="total_offers>0 && total_offers<4;">
<div *ngFor="let item of myOffersData">
<div class="offers_div">
<ion-grid>
<ion-row>
<ion-col>
<img class="offer_banner" alt="{{item.title}}" src="{{session_image_server+'/'+curr_session+'/job/'+item.job_uid}}" />
</ion-col>
<ion-col>
<div>
<div class="offer_title">{{item.title}}</div>
<div class="expire">Expiration : {{item.expire | date}}</div>
<div class="price">Price : {{item.price*0.01| number : '1.2-2'}} {{item.currency}}</div>
</div>
<div class="detail_txt">
{{(item.job_description.length<95)? item.job_description :item.job_description.substring(0,95)+'...' }}
</div>
</ion-col>
</ion-row>
<ion-row>
<ion-col>
<ion-grid class="action_area">
<ion-row>
<ion-col>
<ion-button size="small" (click)="requestReject(item)" color="danger" fill="solid" shape="round">Reject</ion-button>
</ion-col>
<ion-col>
</ion-col>
<ion-col>
<ion-button size="small" (click)="requestStart(item)" color="success" fill="solid" shape="round">Start Now</ion-button>
</ion-col>
</ion-row>
</ion-grid>
</ion-col>
</ion-row>
</ion-grid>
</div>
</div>
</div>
</div>
@@ -0,0 +1,467 @@
ion-content {
.offers_div{
background-color: aliceblue;
border-radius: 10px;
border-color: #383a3e;
margin: 10px 0 10px 0;
.offer_title{
font-size: 18px;
font-weight: bolder;
}
.action_area{
background-color:whitesmoke;
}
.offer_banner{
border-radius: 100%;
background-color: white;
width: 100%;
height: auto;
}
.price{
margin-top: 5px;
margin-bottom: 5px;
color:green;
font-size: 14px;
}
.expire{
font-weight: bold;
color: red;
font-size: 10px;
}
.detail_txt{
font-size: 14px;
margin: 5px;
font-weight: bold;
background-color: white;
border-radius: 10px;
min-height: 120px;
padding: 3px;
overflow: hidden;
text-overflow:ellipsis;
}
}
.hdt{
padding-bottom: 10px;
}
.back_image {
width: 100%;
height: 100px;
.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-card{
border-color: #3dc2ff;
background-color: aliceblue;
margin-left: 0px;
margin-right: 0px;
ion-card-content{
font-size: 14px;
}
ion-card-subtitle{
color: red;
}
.top_banner{
background-color: white;
width: 100%;
//background-color: #2dd36f;
margin-left: auto;
margin-right: auto;
text-align: center;
.offer_banner{
width: auto;
height: 100px;
background-size: contain;
background-repeat: no-repeat;
}
}
.offer_title{
font-size: 18px;
}
ion-grid{
background-color: white;
ion-col{
text-align: center;
}
}
}
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 { OffersReceivedComponent } from './offers-received.component';
describe('OffersReceivedComponent', () => {
let component: OffersReceivedComponent;
let fixture: ComponentFixture<OffersReceivedComponent>;
beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
declarations: [ OffersReceivedComponent ],
imports: [IonicModule.forRoot()]
}).compileComponents();
fixture = TestBed.createComponent(OffersReceivedComponent);
component = fixture.componentInstance;
fixture.detectChanges();
}));
it('should create', () => {
expect(component).toBeTruthy();
});
});
@@ -0,0 +1,145 @@
import { Component, OnInit } from '@angular/core';
import {AlertController, LoadingController, NavController} from "@ionic/angular";
import {Router} from "@angular/router";
import {SessionDataProviderService} from "../../store/session-data-provider.service";
import {WrenchService} from "../../services/wrench.service";
@Component({
selector: 'app-offers-received',
templateUrl: './offers-received.component.html',
styleUrls: ['./offers-received.component.scss'],
})
export class OffersReceivedComponent implements OnInit {
constructor(
private navctrl: NavController,
private router: Router,
public sessionDataProviderService: SessionDataProviderService,
private alertController:AlertController,
private wrenchService: WrenchService,
private loadingCtrl: LoadingController
) { }
ngOnInit() {
this.getMyOffersData();
}
session_image_server:string='';
curr_session:string='';
//
usrData: {
action:number, member_id: number, uid: string,
sessionid: string,
limit:20,
page:1, offset:number
};
total_offers:number = 0;
myOffersTotalData:any;
myOffersData: [];
async getMyOffersData(){
this.usrData = {action:15010,
member_id: this.sessionDataProviderService.member_id,
uid: this.sessionDataProviderService.member_uid,
sessionid: this.sessionDataProviderService.session ,
limit:20, page:1,offset: 0}
this.curr_session = this.sessionDataProviderService.session;
this.wrenchService.getMyOffers(this.usrData).subscribe(
myOffersTotalData => {
this.myOffersTotalData = myOffersTotalData;
this.session_image_server = this.myOffersTotalData.session_image_server;
console.log("myOffersTotalData RETURN->", this.myOffersTotalData);
this.myOffersData = this.myOffersTotalData.result_list;
console.log("myOffersData RETURN DATA->", this.myOffersData);
this.total_offers = this.myOffersData?.length;
}
);
}
async requestStart(item) {
const alert = await this.alertController.create({
header: "Ready to start",
message: "You will start the task now, offer shall be completed in allocated timeline.",
buttons: [
{
text: "Cancel",
role: "cancel",
handler: () => {
this.getMyOffersData();
},
},
{
text: "Start Now",
handler: () => {
this.sendOfferResponse(item, 100);
this.getMyOffersData();
},
},
],
});
await alert.present();
}
async requestReject(item) {
const alert = await this.alertController.create({
header: "Confirm Reject",
message: "This task will go away, you dont have to do anything.",
buttons: [
{
text: "Cancel",
role: "cancel",
handler: () => {
this.getMyOffersData();
},
},
{
text: "Reject",
handler: () => {
this.sendOfferResponse(item, 333);
this.getMyOffersData();
},
},
],
});
await alert.present();
}
responseData: {
action:number,
member_id: number,
uid: string,
sessionid: string,
offer_result:number,
contract:string,
offer_code:string
};
offerRespData:any;
// offferResponse(respData)
async sendOfferResponse(item, respType){
const loading = await this.loadingCtrl.create({
message: 'Processing',
duration: 3000,
});
this.responseData = {
action:15010,
member_id: this.sessionDataProviderService.member_id,
uid: this.sessionDataProviderService.member_uid,
sessionid: this.sessionDataProviderService.session ,
offer_result:respType,
contract:item.contract,
offer_code: item.contract
};
await loading.present();
this.wrenchService.offferResponse(this.responseData).subscribe(
offerRespData => {
this.offerRespData = offerRespData;
console.log("offerRespData RETURN->", this.offerRespData);
this.getMyOffersData();
}
);
}
}
+15 -7
View File
@@ -25,7 +25,8 @@ import {WorkersDashComponent} from "../../components/workers-dash/workers-dash.c
import {FamilyhomeComponent} from "../../components/familyhome/familyhome.component";
import {FamilyConnectComponent} from "../../components/family-connect/family-connect.component";
import {GenerativeActivityComponent} from "../../components/generative-activity/generative-activity.component";
import { MyjobOffersComponent } from "../../components/myjob-offers/myjob-offers.component";
import { OffersReceivedComponent } from "../../components/offers-received/offers-received.component";
// @NgModule({
// schemas: [CUSTOM_ELEMENTS_SCHEMA]
// })
@@ -38,18 +39,25 @@ import {GenerativeActivityComponent} from "../../components/generative-activity/
HomePageRoutingModule
],
declarations: [
HomePage,SuggestedlistComponent,FamilypendingComponent,
TrackingComponent,FastrewardComponent,
LatestMarketComponent,HelpListingComponent,
FamiliyDashComponent,FamiliyNokidsComponent,
FamiliyNotaskComponent,FamiliyAddfamilyComponent,
HomePage,SuggestedlistComponent,
FamilypendingComponent,
TrackingComponent,
FastrewardComponent,
LatestMarketComponent,
HelpListingComponent,
FamiliyDashComponent,
FamiliyNokidsComponent,
FamiliyNotaskComponent,
FamiliyAddfamilyComponent,
FamiliyAllowanceComponent,
DashToptoolComponent,
JobownerDashComponent,
WorkersDashComponent,
FamilyhomeComponent,
FamilyConnectComponent,
GenerativeActivityComponent
GenerativeActivityComponent,
MyjobOffersComponent,
OffersReceivedComponent
],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
})
+1
View File
@@ -78,6 +78,7 @@
</ion-grid>
</div>
<ng-template #elseFulltag>
<app-offers-received></app-offers-received>
<div *ngIf="home_dash_type=='DEFAULT_HOME_DASH'; ">
<app-latest-market></app-latest-market>
<ion-card class="map-sec" *ngIf="enableTracking > 0">