gaf-mobile
Version:
GAF mobile Web site
639 lines (610 loc) • 86 kB
HTML
<!-- 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