UNPKG

gaf-mobile

Version:

GAF mobile Web site

639 lines (610 loc) 86 kB
<!-- Project Info and Bids views --> <div class="project" fl-analytics-section="ProjectView"> <div class="StickyCTA-container" ng-class="{'StickyCTA--padded': ctrl.showPadding()}"> <!-- scrolling reference --> <div class="scroll-container project-views-scroll" ng-class="{'project-views-with-nda': !ctrl.isOwner && ctrl.project.upgrades.NDA && (ctrl.showBidButton || ctrl.isPendingAwarded) && !ctrl.ndaSigned && tab.name !== 'bids'}" fl-scrollpos="ctrl.position.scroll" fl-scrollpos-container fl-in-viewport-container> <!-- Use to scroll to top when click on the tab of the same name --> <a id="info"></a> <a id="bids"></a> <header class="PageHeader"> <div class="section-inner"> <div class="listing-promotions" ng-class="{ 'has-promotions': ctrl.project.upgrades.featured || ctrl.project.upgrades.urgent || ctrl.project.upgrades.assisted || ctrl.project.upgrades.sealed || ctrl.project.upgrades.fulltime || ctrl.project.upgrades.nonpublic || ctrl.project.upgrades.NDA }"> <span class="promotion-tag promotion-tag-featured" ng-if="ctrl.project.upgrades.featured">Featured</span> <span class="promotion-tag promotion-tag-urgent" ng-if="ctrl.project.upgrades.urgent">Urgent</span> <span class="promotion-tag promotion-tag-assisted" ng-if="ctrl.project.upgrades.assisted">Assisted</span> <span class="promotion-tag promotion-tag-sealed" ng-if="ctrl.project.upgrades.sealed">Sealed</span> <span class="promotion-tag promotion-tag-full-time" ng-if="ctrl.project.upgrades.fulltime">Full Time</span> <span class="promotion-tag promotion-tag-private" ng-if="ctrl.project.upgrades.nonpublic">Private</span> <span class="promotion-tag promotion-tag-nda" ng-if="ctrl.project.upgrades.NDA">NDA</span> </div> <h1 class="PageHeader-title">{{ ctrl.project.title }}</h1> </div> </header> <nav class="PageNav"> <ul class="PageNav-list"> <li class="PageNav-item"> <a fl-active-tab class="PageNav-link" ng-click="ctrl.changeTab('info')" tab="info" fl-analytics="InfoTab"> Details </a> </li> <li class="PageNav-item"> <a fl-active-tab class="PageNav-link" ng-click="ctrl.changeTab('bids')" tab="bids" fl-analytics="BidsTab"> Bids </a> </li> <li class="PageNav-item" ng-class="{'PageNav-item--urgent': ctrl.shouldShowCreateMilestone()}"> <a fl-active-tab class="PageNav-link" ng-click="ctrl.changeTab('management')" tab="management" fl-analytics="ManagementTab"> Management </a> </li> </ul> </nav> <!-- Details --> <div class="SectionDetails" ng-show="tab.name === 'info'"> <div class="section-inner"> <div class="SectionDetails-row"> <span class="SectionDetails-label"> Project Budget ({{ctrl.project.currency.code}}) </span> <span class="SectionDetails-value"> <span ng-if="ctrl.project.budget.minimum !== ctrl.project.budget.maximum && ctrl.project.budget.maximum"> <sup class="SectionDetails-currency">{{ ctrl.project.currency.sign }}</sup> {{ ctrl.project.budget.minimum }} - {{ ctrl.project.budget.maximum }} </span> <span ng-if="ctrl.project.budget.minimum === ctrl.project.budget.maximum || !ctrl.project.budget.maximum"> <sup class="SectionDetails-currency">{{ ctrl.project.currency.sign }}</sup> {{ ctrl.project.budget.minimum }} </span> <small ng-if="ctrl.projectObj.isHourlyProject()">/ hr</small> </span> </div> <div class="SectionDetails-row"> <div class="SectionDetails-column"> <span class="SectionDetails-label">Average Bid ({{ctrl.project.currency.code}})</span> <span class="SectionDetails-value SectionDetails-value--small"> <span> <sup class="SectionDetails-currency">{{ ctrl.project.currency.sign }}</sup> {{ ctrl.getAverageBidAmount() | number:0 }} </span> <small ng-if="ctrl.projectObj.isHourlyProject()">/ hr</small> </span> </div> <div class="SectionDetails-column"> <span class="SectionDetails-label">Bids</span> <span class="SectionDetails-value SectionDetails-value--small"> <span>{{ ctrl.project.bid_stats.bid_count }}</span> </span> </div> </div> <div class="SectionDetails-row"> <div class="SectionDetails-column" ng-if="ctrl.projectObj.isHourlyProject()"> <span class="SectionDetails-label">Duration</span> <span class="SectionDetails-value SectionDetails-value--small"> <span ng-if="ctrl.project.hourly_project_info.commitment.hours"> {{ ctrl.project.hourly_project_info.commitment.hours }} <small>hr / {{ ctrl.project.hourly_project_info.commitment.interval }}</small> </span> <span ng-show="!ctrl.project.hourly_project_info.commitment.hours && ctrl.project.hourly_project_info.duration_enum === 'unspecified'">---</span> <span ng-show="ctrl.project.hourly_project_info.duration_enum === 'less_than_one_week'">(less than a week)</span> <span ng-show="ctrl.project.hourly_project_info.duration_enum === 'one_to_four_weeks'">(1 - 4 weeks)</span> <span ng-show="ctrl.project.hourly_project_info.duration_enum === 'one_to_three_months'">(1 - 3 months)</span> <span ng-show="ctrl.project.hourly_project_info.duration_enum === 'three_to_six_months'">(3 - 6 months)</span> </span> </div> <div class="SectionDetails-column"> <span class="SectionDetails-label">Project Status</span> <span class="SectionDetails-value SectionDetails-value--small"> <div class="project-info-countdown" ng-if="ctrl.project.status === 'closed'"> <span class="icon-clock"> </span> <span ng-if="ctrl.project.frontend_project_status === 'complete' && ctrl.project.sub_status !== 'cancel_buyer' && ctrl.project.sub_status !== 'cancel_admin' && ctrl.project.sub_status !== 'closed_expired'" class="countdown-title">Complete</span> <span ng-show="ctrl.project.sub_status === 'cancel_buyer' || ctrl.project.sub_status === 'cancel_admin'" class="countdown-title">Cancelled</span> <span ng-show="ctrl.project.frontend_project_status === 'work_in_progress'" class="countdown-title">In progress</span> <span ng-show="ctrl.project.sub_status === 'closed_expired'" class="countdown-title project-info-status-expired">Closed</span> <span ng-show="ctrl.project.sub_status === 'frozen_awarded' || ctrl.project.sub_status === 'closed_awarded' || !ctrl.project.sub_status" class="countdown-title project-info-status-awarded">Awarded</span> <span ng-show="ctrl.project.sub_status === 'frozen_timeout'" class="countdown-title project-info-status-expired">Expired</span> <span ng-show="ctrl.project.sub_status !== 'closed_awarded' && ctrl.project.sub_status !== 'closed_expired' && ctrl.project.sub_status !== 'cancel_buyer' && ctrl.project.sub_status !== 'cancel_admin' && ctrl.project.sub_status !== 'frozen_awarded' && ctrl.project.sub_status !== 'frozen_timeout'" class="countdown-title">{{ ctrl.project.sub_status }}</span> </div> <div class="project-info-countdown" ng-if="ctrl.project.status === 'frozen' && !ctrl.isPendingAwarded"> <span class="icon-clock"> </span> <ng-switch on="ctrl.project.sub_status"> <span ng-switch-when="frozen_awarded" class="countdown-title project-info-status-awarded">Awarded</span> <span ng-switch-when="frozen_timeout" class="countdown-title project-info-status-expired">Expired</span> <span ng-switch-default class="countdown-title">{{ctrl.project.sub_status}}</span> </ng-switch> </div> <div class="project-info-countdown" ng-if="ctrl.project.status === 'open' || ctrl.project.status === 'active'"> <span class="icon-clock"> </span> <span class="countdown-title">Open : </span> <span fl-countdown="{{ ctrl.projectTimeLeft }}"> <span fl-countdown-days></span><span class="countdown-metric" i18n="[days]">d</span> <span fl-countdown-hours></span><span class="countdown-metric" i18n="[hours]">h</span> <span fl-countdown-minutes></span><span class="countdown-metric" i18n="[minutes]">m</span> <span fl-countdown-seconds></span><span class="countdown-metric" i18n="[seconds]">s</span> </span> </div> <div class="project-info-countdown" ng-if="ctrl.isPendingAwarded"> <span class="icon-clock"> </span> <span class="countdown-title project-info-status-pending">Pending</span> </div> </span> </div> </div> </div> </div> <!-- PAGE VIEW --> <!-- project info --> <section class="project-info" ng-show="tab.name === 'info'"> <div class="project-views section-inner"> <section class="make-row make-row-responsive project-map" ng-if="ctrl.project.local"> <ui-gmap-google-map center="ctrl.project.location" zoom="12" options="ctrl.mapOptions"> <ui-gmap-marker idKey="1" coords="ctrl.marker.location"> </ui-gmap-marker> </ui-gmap-google-map> </section> <div class="project-views-btnWrapper"> <button ng-if="ctrl.isOwner" class="btn bid-button btn-secondary" ng-click="ctrl.upgrade()" fl-analytics="UpgradeProject"> Upgrade this project </button> <span> <!-- If an hourly project, repost goes to Desktop --> <a ng-if="ctrl.projectObj.isHourlyProject()" class="btn btn-tertiary post-similar-button" ng-class="{'btn-tertiary': ctrl.isOwner, 'btn-default': !ctrl.isOwner}" fl-gaf-link ng-href="https://www.freelancer.com/buyers/repost.php?id={{ctrl.project.id}}" fl-analytics="GoToPostProject" fl-analytics="PostSimilar"> <span class="icon-external-link"></span> Post a similar project </a> <!-- Overwise handle the repost --> <button ng-if="!ctrl.projectObj.isHourlyProject()" class="btn btn-tertiary post-similar-button" ng-class="{'btn-tertiary': ctrl.isOwner, 'btn-default': !ctrl.isOwner}" ng-click="ctrl.repost(ctrl.project)" fl-analytics="GoToPostProject" fl-analytics-label="PostSimilar"> Post a similar project </button> </span> </div> <section class="Card project-view" fl-read-more="300" fl-read-more-toggle fl-analytics="ReadMoreText" fl-analytics-subsection="Description"> <header class="Card-header"> <h2 class="Card-title">Project description</h2> </header> <div class="Card-bodySection"> <p fl-read-more-content class="Card-desc project-desc">{{ ctrl.project.description }}</p> </div> <footer class="Card-footer" fl-read-more-more fl-analytics="ReadMoreBtn" fl-analytics-action="more"> <span class="ContentToggle"> <span class="ContentToggle-inner"> <span class="ContentToggle-text">Read More</span> <span class="ContentToggle-icon"> <fl-svg src="/images/icons/flicon-arrow-down-circled.svg" class="flicon-arrow-down-circled"></fl-svg> </span> </span> </span> </footer> <footer class="Card-footer" fl-read-more-less fl-analytics="ReadMoreBtn" fl-analytics-action="less"> <span class="ContentToggle"> <span class="ContentToggle-inner"> <span class="ContentToggle-text">Read Less</span> <span class="ContentToggle-icon"> <fl-svg src="/images/icons/flicon-arrow-up-circled.svg" class="flicon-arrow-up-circled"></fl-svg> </span> </span> </span> </footer> </section> <!-- Skills --> <section class="Card"> <header class="Card-header"> <h2 class="Card-title">Skills Required</h2> </header> <div class="Card-bodySection"> <span ng-repeat="job in ctrl.project.jobs"> <a ng-href="/jobs/{{job.seo_url}}" class="SkillTag">{{ job.name }}</a> </span> </div> </section> <!-- About the Employer --> <section class="Card" fl-expandable="false" fl-expandable-toggle fl-analytics="ExpandCard" fl-analytics-subsection="EmployerStatus"> <header class="Card-header"> <h2 class="Card-title">About the employer</h2> </header> <div class="Card-bodySection"> <ul class="Reputation-list"> <li class="Reputation" ng-class="{'Reputation--rating': ctrl.employer.employer_reputation.entire_history.overall > 0}"> <span class="Reputation-state"> {{ ctrl.employer.employer_reputation.entire_history.overall | number:1 }} <fl-svg src="/images/icons/flicon-star.svg" class="Reputation-icon"></fl-svg> </span> <span class="Reputation-label"> <span ng-show="!ctrl.employer.employer_reputation.entire_history.reviews"> No reviews </span> <span ng-show="ctrl.employer.employer_reputation.entire_history.reviews"> <span ng-show="ctrl.employer.employer_reputation.entire_history.reviews === 1">1 review</span> <span ng-show="ctrl.employer.employer_reputation.entire_history.reviews > 1">{{ ctrl.employer.employer_reputation.entire_history.reviews }} reviews</span> </span> </span> </li> <li class="Reputation" ng-class="{ 'Reputation--verified': ctrl.employer.status.payment_verified }"> <span class="Reputation-state"> $ <fl-svg src="/images/icons/flicon-tick-circled--solid.svg" class="Reputation-icon"></fl-svg> </span> <span class="Reputation-label">Verified</span> </li> <li class="Reputation" ng-class="{ 'Reputation--prepaid': ctrl.employer.status.deposit_made }"> <span class="Reputation-state"> $ <fl-svg src="/images/icons/flicon-shield.svg" class="Reputation-icon"></fl-svg> </span> <span class="Reputation-label">Prepaid</span> </li> </ul> <div class="user-profile"> <div class="user-profile-details"> <button class="project-employer-expand-btn btn btn-circle btn-expand" fl-expandable-expand fl-analytics="ExpandBtn" fl-analytics-action="expand"><span class="icon-circled-plus"> </span></button> <div class="project-employer-overview" fl-expandable-content> <div ng-if="ctrl.isAwarded" class="project-employer-details"> <span ng-if="ctrl.isAwarded">Project offered by <a href="/u/{{ ctrl.employer.username }}">{{ ctrl.employer.username }}</a></span> <div class="user-profile-location"> <span class="user-profile-location-icon"> <fl-svg class="location-pin" src="/images/icons/location-pin.svg"></fl-svg> </span> <small class="user-profile-location-content"> <span ng-if="ctrl.employer.location.city">{{ ctrl.employer.location.city }}, </span> {{ ctrl.employer.location.country.name }} </small> </div> </div> <ul class="user-verification"> <li class="user-verification-item"><span class="user-verification-icon icon-verify-payment" ng-class="{ 'is-verified': ctrl.employer.status.payment_verified }"></span>Payment method verified</li> <li class="user-verification-item"><span class="user-verification-icon icon-verify-deposit" ng-class="{ 'is-verified': ctrl.employer.status.deposit_made }"></span>Deposits have been made</li> <li class="user-verification-item"><span class="user-verification-icon icon-verify-email" ng-class="{ 'is-verified': ctrl.employer.status.email_verified }"></span>Email has been verified</li> <li class="user-verification-item"><span class="user-verification-icon icon-verify-profile" ng-class="{ 'is-verified': ctrl.employer.status.profile_complete }"></span>Profile is complete</li> <li class="user-verification-item"><span class="user-verification-icon icon-verify-phone" ng-class="{ 'is-verified': ctrl.employer.status.phone_verified }"></span>Phone number is verified</li> </ul> </div> <button class="project-employer-collapse-btn btn btn-circle btn-collapse" fl-expandable-collapse fl-analytics="ExpandBtn" fl-analytics-action="collapse"><span class="icon-minus"> </span></button> </div> </div> </div> </section> </div> </section> <!-- Project bids --> <section class="BidList-wrapper" ng-show="tab.name === 'bids'" ng-switch="ctrl.viewState" fl-analytics-subsection="BidList"> <div class="my-projects-header section-inner" ng-switch-when="loadingBids"> <div class="my-projects-loading"> <div class="loadingicon">Loading...</div> </div> </div> <div class="section-inner project-bids-list" ng-switch-when="bidsList"> <!-- Awarded bids list --> <div ng-if="ctrl.awardedBids.length > 0"> <ul class="BidList"> <li class="BidList-item" ng-repeat="bid in ctrl.awardedBids" > <bid-item bid="bid" project="ctrl.project" expandable="{{ctrl.isOwner}}" ab-tests="ctrl.bidItemAbTests"> <ul class="ProfileSnapshot-actionList"> <li class="ProfileSnapshot-actionItem" ng-if="ctrl.isOwner"> <a class="btn btn-small btn-primary" ng-click="ctrl.changeTab('management')" fl-analytics="MakeMilestonePaymentToMobile">Create Milestone</a> </li> <li class="ProfileSnapshot-actionItem" ng-if="ctrl.isOwner"> <a href="/messages/thread?pid={{ctrl.project.id}}&uid={{bid.get().bidder_id}}&bid={{bid.get().id}}" class="btn btn-small" fl-analytics="Chat">Chat</a> </li> </ul> </bid-item> </li> </ul> </div> <!-- Pending bids list --> <div ng-if="ctrl.pendingBids.length > 0"> <ul class="BidList"> <li class="BidList-item" ng-repeat="bid in ctrl.pendingBids"> <bid-item bid="bid" project="ctrl.project" expandable="{{ctrl.isOwner || bid.get().bidder_id === ctrl.user}}" ab-tests="ctrl.bidItemAbTests"> <ul class="ProfileSnapshot-actionList"> <li class="ProfileSnapshot-actionItem" ng-if="ctrl.isOwner"> <a class="btn btn-small btn-senary" ng-click="ctrl.showRevokeModal(bid.get())" fl-analytics="RevokeAward">Revoke</a> </li> <li class="ProfileSnapshot-actionItem" ng-if="ctrl.isOwner"> <a href="/messages/thread?pid={{ctrl.project.id}}&uid={{bid.get().bidder_id}}&bid={{bid.get().id}}" class="btn btn-small" fl-analytics="Chat">Chat</a> </li> <li class="ProfileSnapshot-actionItem" ng-if="bid.get().bidder_id === ctrl.user"> <fl-button class="btn btn-small btn-senary" action="ctrl.rejectProject(bid)" fl-analytics="RejectProject"> Reject </fl-button> </li> </ul> <div class="BidList-errors"> <span class="validation validation-error" ng-if="ctrl.acceptError.ndaNotSigned"> <span class="icon-notification"> </span> You must sign a <strong><a href="/nda/{{ctrl.project.id}}?return=/projects/project-{{ctrl.project.id}}#management"> Non-Disclosure Agreement </a></strong> to work on this project. </span> <span class="validation validation-error" ng-if="ctrl.acceptError.unknownError"> <span class="icon-notification"> </span> Internal error: {{ctrl.acceptError.unknownError}} </span> </div> </bid-item> </li> </ul> </div> <!-- Rejected bids list --> <div ng-if="ctrl.rejectedBids.length > 0"> <ul class="BidList"> <li class="BidList-item BidList-item--rejected" ng-repeat="bid in ctrl.rejectedBids" > <bid-item bid="bid" project="ctrl.project" expandable="{{ctrl.isOwner}}"></bid-item> </li> </ul> </div> <!-- Active bids list --> <div ng-if="ctrl.bids.length > 0"> <ul class="BidList"> <li class="BidList-item" ng-repeat="bid in ctrl.bids" > <bid-item bid="bid" project="ctrl.project" expandable="{{ctrl.isOwner}}" ab-tests="ctrl.bidItemAbTests"> <ul class="ProfileSnapshot-actionList" ng-if="ctrl.isOwner"> <li class="ProfileSnapshot-actionItem"> <fl-button class="btn btn-small btn-primary" action="ctrl.award(bid)" fl-analytics="Award"> Award Project </fl-button> <div class="project-bids-error" ng-messages="ctrl.awardError.errorCode"> <span class="validation validation-error" ng-message="BID_RETRACTED"> <span class="icon-notification"> </span> Sorry, this bidder has retracted its bid. </span> <span class="validation validation-error" ng-message="BID_ALREADY_RETRACTED"> <span class="icon-notification"> </span> Sorry, this bidder has retracted its bid. </span> <span class="validation validation-error" ng-message="NOT_FOUND"> <span class="icon-notification"> </span> Sorry, this bidder has retracted its bid. </span> <span class="validation validation-error" ng-message="MAXIMUM_AWARDED_BIDDERS_REACHED"> <span class="icon-notification"> </span> Sorry, you have reached the maximum awarded bidders for that project. </span> <span class="validation validation-error" ng-message="FREELANCER_ACCOUNT_UNDER_REVIEW"> <span class="icon-notification"> </span> Sorry, the account of this Freelancer is under review. </span> </div> <span class="validation validation-error" ng-if="ctrl.awardError.unknownError"> <span class="icon-notification"> </span> Internal error: {{ctrl.awardError.error.code}} </span> </li> <li class="ProfileSnapshot-actionItem"> <a href="/messages/thread?pid={{ctrl.project.id}}&uid={{bid.get().bidder_id}}&bid={{bid.get().id}}" class="btn btn-small" fl-analytics="Chat"> Chat </a> </li> </ul> <div class="project-bids-error" ng-messages="ctrl.awardError.errorCode"> <span class="validation validation-error" ng-message="BID_RETRACTED"> <span class="icon-notification"> </span> Sorry, this bidder has retracted his bid. </span> <span class="validation validation-error" ng-message="BID_ALREADY_RETRACTED"> <span class="icon-notification"> </span> Sorry, this bidder has retracted his bid. </span> <span class="validation validation-error" ng-message="NOT_FOUND"> <span class="icon-notification"> </span> Sorry, this bidder has retracted his bid. </span> <span class="validation validation-error" ng-message="MAXIMUM_AWARDED_BIDDERS_REACHED"> <span class="icon-notification"> </span> Sorry, you have reached the maximum awarded bidders for that project. </span> <span class="validation validation-error" ng-message="FREELANCER_ACCOUNT_UNDER_REVIEW"> <span class="icon-notification"> </span> Sorry, the account of this Freelancer is under review. </span> </div> <span class="validation validation-error" ng-if="ctrl.awardError.unknownError"> <span class="icon-notification"> </span> Internal error: {{ctrl.awardError.error.code}} </span> </bid-item> </li> </ul> <!-- infinite scrolling --> <div class="project-bids-loading" ng-if="tab.name === 'bids' && ctrl.hasMoreBids"> <div class="loadingicon" fl-in-viewport="ctrl.loadBids()" fl-in-viewport-infinite>Loading...</div> </div> </div> <!-- No bids to display --> <div class="project-bids-empty" ng-if="ctrl.bidListLoaded && !ctrl.bids.length && !ctrl.awardedBids.length && !ctrl.pendingBids.length && !ctrl.rejectedBids.length"> <span class="project-bids-empty-description" ng-if="ctrl.isOwner"> <div class="BidsLoader"> <img class="BidsLoader-img" src="/images/PVP-loader.gif" alt="PVP Loading Animation"> </div> <h2>Your bids are coming shortly.</h2> <p>To help you find your perfect freelancer faster, upgrade your project.</p> <button class="btn bid-button btn-secondary" ng-click="ctrl.upgrade()" fl-analytics="UpgradeProject"> Upgrade project </button> </span> <span class="project-bids-empty-description" ng-if="!ctrl.isOwner"> <div class="icon-roundy-square large-icon watermark-icon"> <span class="icon-coin-cancelled large-icon-inner"></span> </div> <h2>There are no bids yet.</h2> <p>Place a bid now to ensure your best chance of being awarded.</p> </span> </div> </div> <!-- MODAL --> <!-- Displayed when the employer will be charged on accept if he awards the Freelancer --> <aside class="modal bid-info-modal project-confirm" ng-switch-when="confirmAward"> <div class="modal-inner"> <div class="section-inner"> <h2>Award Project</h2> <p>Confirm to award your project to <strong>{{ctrl.selectedBid.getBidderDetails().get().username}}</strong>. <span ng-if="ctrl.buyerFee.get().buyer_project_fee.amount > 0"> You will be charged <strong>{{ctrl.project.currency.sign + ctrl.buyerFee.get().buyer_project_fee.amount}}</strong> if {{ctrl.selectedBid.getBidderDetails().get().username}} accepts your offer. </span> </p> <div class="project-bids-error" ng-messages="ctrl.awardError.errorCode"> <span class="validation validation-error" ng-message="BID_RETRACTED"> <span class="icon-notification"> </span> Sorry, this bidder has retracted its bid. </span> <span class="validation validation-error" ng-message="BID_ALREADY_RETRACTED"> <span class="icon-notification"> </span> Sorry, this bidder has retracted its bid. </span> <span class="validation validation-error" ng-message="NOT_FOUND"> <span class="icon-notification"> </span> Sorry, this bidder has retracted its bid. </span> <span class="validation validation-error" ng-message="MAXIMUM_AWARDED_BIDDERS_REACHED"> <span class="icon-notification"> </span> Sorry, you have reached the maximum awarded bidders for that project. </span> <span class="validation validation-error" ng-message="FREELANCER_ACCOUNT_UNDER_REVIEW"> <span class="icon-notification"> </span> Sorry, the account of this Freelancer is under review. </span> </div> <span class="validation validation-error" ng-if="ctrl.awardError.unknownError"> <span class="icon-notification"> </span> Internal error: {{ctrl.awardError.error.code}} </span> <fl-button action="ctrl.award(ctrl.selectedBid)" class="project-confirm-btn btn btn-primary" fl-analytics="ConfirmAward"> Confirm </fl-button> <button ng-click="ctrl.awardError = {}; ctrl.viewState = 'bidsList'" class="project-cancel-btn btn btn-default" fl-analytics="CancelAward"> Cancel </button> </div> </div> </aside> </section> </section> <!-- MANAGEMENT VIEW --> <section class="project-bids" ng-show="tab.name === 'management'" fl-analytics-subsection="management"> <div class="project-views section-inner"> <center ng-if="ctrl.loadingManagement"> <div class="loadingicon">Loading...</div> </center> <div ng-if="ctrl.project.upgrades.NDA && ctrl.isAwarded && tab.name === 'management' && !ctrl.loadingManagement" class="project-views-with-success-nda"> <span class="alert alert-success"> You have agreed to and signed the <strong> <a href="https://www.freelancer.com/NDA/NDA-print-contract.php?project_id={{ctrl.project.id}}" download> Non-Disclosure Agreement.</a></strong> </span> </div> <div ng-if="ctrl.error.insufficientMilestoneDeposit && !ctrl.loadingManagement" class="project-views-with-failed-milestone"> <span class="alert alert-danger"> Sorry, your deposit is not enough to create a milestone. </span> </div> <div ng-if="ctrl.project.type === 'hourly' && !ctrl.loadingManagement" class="project-views-hourly"> <span class="alert alert-info"> Manage invoices, see screenshots of tracked time, and more on the Desktop version of our site! </span> </div> <div ng-if="(!ctrl.isOwner && !ctrl.isAwarded) && ctrl.showBidButton" class="project-views-empty"> <div class="icon-roundy-square large-icon watermark-icon"> <span class="icon-file-powerpoint large-icon-inner"></span> </div> <h2>You haven't bid yet.</h2> <p>Place a bid now to ensure your best chance of being awarded.</p> </div> <div ng-if="((!ctrl.isOwner && !ctrl.isAwarded) && !ctrl.showBidButton && !ctrl.loadingManagement) && !ctrl.isPendingAwarded || (ctrl.milestoneDenied && !ctrl.showBidButton)" class="project-views-empty"> <div class="icon-roundy-square large-icon watermark-icon"> <span class="icon-file-powerpoint large-icon-inner"></span> </div> <h2>There are no milestones.</h2> <p>You cannot view the milestones for this project.</p> </div> <div ng-if="(ctrl.awardedBids.length === 0 && ctrl.pendingBids.length === 0) && (ctrl.isOwner || ctrl.isAwarded) && !ctrl.loadingManagement" class="project-views-empty"> <div ng-if="ctrl.bids.length > 0"> <div class="icon-roundy-square large-icon watermark-icon"> <span class="icon-coin-cancelled large-icon-inner"></span> </div> <h2>You haven't awarded a freelancer.</h2> <p>Award this project to get started.</p> </div> <div ng-if="ctrl.bids.length === 0"> <div class="icon-roundy-square large-icon watermark-icon"> <span class="icon-coin-cancelled large-icon-inner"></span> </div> <h2>Your bids are coming shortly.</h2> <p>To help you find your perfect freelancer faster, upgrade your project.</p> <button class="btn bid-button btn-secondary" ng-click="ctrl.upgrade()" fl-analytics="UpgradeProject"> Upgrade project </button> </div> </div> <div ng-if="(ctrl.awardedBids.length > 0 || ctrl.pendingBids.length > 0) && (ctrl.isOwner || ctrl.isAwarded || ctrl.isPendingAwarded)"> <div class="Milestones" ng-repeat="milestone in ctrl.milestones"> <div class="Milestones-user Card" ng-if="ctrl.isOwner"> <div class="Milestones-userInner Card-header"> <div class="Milestones-userMedia"> <a href="/u/{{ milestone.user.username }}" fl-analytics="GoToUser" fl-analytics-value="{{ milestone.user.id }}"> <img class="Milestones-userAvatar profile-img" src="{{ milestone.user.avatar_cdn }}"> </a> </div> <div class="Milestones-userContent"> <div class="Milestones-userName"> <a href="/u/{{ milestone.user.username }}" fl-analytics="GoToUser" fl-analytics-value="{{ milestone.user.id }}">{{ milestone.user.username }}</a> </div> <div class="Milestones-userBid" ng-if="!ctrl.projectObj.isHourlyProject()"> {{ ctrl.project.currency.sign }}{{ milestone.bid.amount }} <span ng-show="milestone.bid.period === 1">in 1 day</span> <span ng-show="milestone.bid.period > 1">in {{ milestone.bid.period }} days</span> </div> <div class="Milestones-userBid" ng-if="ctrl.projectObj.isHourlyProject()"> {{ ctrl.project.currency.sign }}{{ milestone.bid.amount }}/hr - <span ng-show="milestone.bid.period === 1">1 hour per week</span> <span ng-show="milestone.bid.period > 1">{{ milestone.bid.period }} hours per week</span> </div> <div class="Milestones-action-item"> <a class="Milestones-actionBtn btn btn-small btn-senary" ng-click="ctrl.showRevokeModal(milestone.bid)" ng-if="milestone.bid.award_status !== 'awarded'" fl-analytics="RevokeAward"> Revoke Award </a> <a class="Milestones-actionBtn btn btn-small" href="/messages/thread?pid={{ctrl.project.id}}&uid={{milestone.bid.bidder_id}}&bid={{milestone.bid.id}}" fl-analytics="Chat"> Chat </a> </div> </div> </div> </div> <div class="Milestones-user Card" ng-if="ctrl.isAwarded || ctrl.isPendingAwarded"> <div class="Milestones-userInner Card-header"> <div class="Milestones-userMedia"> <a href="/u/{{ ctrl.employer.username }}" fl-analytics="GoToUser" fl-analytics-value="{{ ctrl.employer.id }}"> <img class="Milestones-userAvatar profile-img" src="{{ ctrl.employer.avatar_cdn }}"> </a> </div> <div class="Milestones-userContent"> <div class="Milestones-userName"> <a href="/u/{{ ctrl.employer.username }}" fl-analytics="GoToUser" fl-analytics-value="{{ ctrl.employer.id }}"> {{ ctrl.employer.username }} </a> </div> <div class="Milestones-userBid" ng-if="!ctrl.projectObj.isHourlyProject()"> {{ ctrl.project.currency.sign }}{{ milestone.bid.amount }} <span ng-show="milestone.bid.period === 1">in 1 day</span> <span ng-show="milestone.bid.period > 1">in {{ milestone.bid.period }} days</span> </div> <div class="Milestones-userBid" ng-if="ctrl.projectObj.isHourlyProject()"> {{ ctrl.project.currency.sign }}{{ milestone.bid.amount }}/hr - <span ng-show="milestone.bid.period === 1">1 hour per week</span> <span ng-show="milestone.bid.period > 1">{{ milestone.bid.period }} hours per week</span> </div> <div class="Milestones-actionItem"> <a class="Milestones-actionBtn btn btn-small" href="/messages/thread?pid={{ctrl.project.id}}&uid={{ctrl.employer.id}}&bid={{milestone.bid.id}}"fl-analytics="Chat">Chat</a> </div> </div> </div> </div> <div class="Milestones-showList Card"> <header class="Milestones-header Card-header"> <h2 class="Milestones-heading Card-title">Milestones</h2> <button class="btn btn-small btn-primary" ng-if="ctrl.isOwner" ng-click="ctrl.showCreateMilestoneModal(milestone)" fl-analytics="ShowCreateMilestoneModal" ng-disabled="ctrl.disableCreateMilestoneButton"> Cr