{% extends 'base.html.twig' %}
{% block title %}
Offres d’emploi et missions freelance sur WorkDispo
{% endblock %}
{% block meta %}
<meta charset="utf-8">
<meta name="description"
content="Offres d’emploi et mission freelance sans commission sur WorkDispo (ex Freelance Dispo) avec mise en relation entre candidats et recruteurs, et c'est 100% gratuit.">
<meta name="keywords" content="freelance, dispo, missions, it">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=3">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
<script type="text/javascript">(window.NREUM || (NREUM = {})).init = {ajax: {deny_list: ["bam.nr-data.net"]}};
(window.NREUM || (NREUM = {})).loader_config = {
licenseKey: "NRJS-8c6c895b97ea60d5ee0",
applicationID: "1333848373"
};
window.NREUM || (NREUM = {}), __nr_require = function (t, e, n) {
function r(n) {
if (!e[n]) {
var i = e[n] = {exports: {}};
t[n][0].call(i.exports, function (e) {
var i = t[n][1][e];
return r(i || e)
}, i, i.exports)
}
return e[n].exports
}
if ("function" == typeof __nr_require) return __nr_require;
for (var i = 0; i < n.length; i++) r(n[i]);
return r
}({
1: [function (t, e, n) {
function r() {
}
function i(t, e, n, r) {
return function () {
return s.recordSupportability("API/" + e + "/called"), o(t + e, [u.now()].concat(c(arguments)), n ? null : this, r), n ? void 0 : this
}
}
var o = t("handle"), a = t(9), c = t(10), f = t("ee").get("tracer"), u = t("loader"), s = t(4),
d = NREUM;
"undefined" == typeof window.newrelic && (newrelic = d);
var p = ["setPageViewName", "setCustomAttribute", "setErrorHandler", "finished", "addToTrace", "inlineHit", "addRelease"],
l = "api-", v = l + "ixn-";
a(p, function (t, e) {
d[e] = i(l, e, !0, "api")
}), d.addPageAction = i(l, "addPageAction", !0), d.setCurrentRouteName = i(l, "routeName", !0), e.exports = newrelic, d.interaction = function () {
return (new r).get()
};
var m = r.prototype = {
createTracer: function (t, e) {
var n = {}, r = this, i = "function" == typeof e;
return o(v + "tracer", [u.now(), t, n], r), function () {
if (f.emit((i ? "" : "no-") + "fn-start", [u.now(), r, i], n), i) try {
return e.apply(this, arguments)
} catch (t) {
throw f.emit("fn-err", [arguments, this, t], n), t
} finally {
f.emit("fn-end", [u.now()], n)
}
}
}
};
a("actionText,setName,setAttribute,save,ignore,onEnd,getContext,end,get".split(","), function (t, e) {
m[e] = i(v, e)
}), newrelic.noticeError = function (t, e) {
"string" == typeof t && (t = new Error(t)), s.recordSupportability("API/noticeError/called"), o("err", [t, u.now(), !1, e])
}
}, {}], 2: [function (t, e, n) {
function r(t) {
if (NREUM.init) {
for (var e = NREUM.init, n = t.split("."), r = 0; r < n.length - 1; r++) if (e = e[n[r]], "object" != typeof e) return;
return e = e[n[n.length - 1]]
}
}
e.exports = {getConfiguration: r}
}, {}], 3: [function (t, e, n) {
var r = !1;
try {
var i = Object.defineProperty({}, "passive", {
get: function () {
r = !0
}
});
window.addEventListener("testPassive", null, i), window.removeEventListener("testPassive", null, i)
} catch (o) {
}
e.exports = function (t) {
return r ? {passive: !0, capture: !!t} : !!t
}
}, {}], 4: [function (t, e, n) {
function r(t, e) {
var n = [a, t, {name: t}, e];
return o("storeMetric", n, null, "api"), n
}
function i(t, e) {
var n = [c, t, {name: t}, e];
return o("storeEventMetrics", n, null, "api"), n
}
var o = t("handle"), a = "sm", c = "cm";
e.exports = {
constants: {SUPPORTABILITY_METRIC: a, CUSTOM_METRIC: c},
recordSupportability: r,
recordCustom: i
}
}, {}], 5: [function (t, e, n) {
function r() {
return c.exists && performance.now ? Math.round(performance.now()) : (o = Math.max((new Date).getTime(), o)) - a
}
function i() {
return o
}
var o = (new Date).getTime(), a = o, c = t(11);
e.exports = r, e.exports.offset = a, e.exports.getLastTimestamp = i
}, {}], 6: [function (t, e, n) {
function r(t, e) {
var n = t.getEntries();
n.forEach(function (t) {
"first-paint" === t.name ? l("timing", ["fp", Math.floor(t.startTime)]) : "first-contentful-paint" === t.name && l("timing", ["fcp", Math.floor(t.startTime)])
})
}
function i(t, e) {
var n = t.getEntries();
if (n.length > 0) {
var r = n[n.length - 1];
if (u && u < r.startTime) return;
var i = [r], o = a({});
o && i.push(o), l("lcp", i)
}
}
function o(t) {
t.getEntries().forEach(function (t) {
t.hadRecentInput || l("cls", [t])
})
}
function a(t) {
var e = navigator.connection || navigator.mozConnection || navigator.webkitConnection;
if (e) return e.type && (t["net-type"] = e.type), e.effectiveType && (t["net-etype"] = e.effectiveType), e.rtt && (t["net-rtt"] = e.rtt), e.downlink && (t["net-dlink"] = e.downlink), t
}
function c(t) {
if (t instanceof y && !w) {
var e = Math.round(t.timeStamp), n = {type: t.type};
a(n), e <= v.now() ? n.fid = v.now() - e : e > v.offset && e <= Date.now() ? (e -= v.offset, n.fid = v.now() - e) : e = v.now(), w = !0, l("timing", ["fi", e, n])
}
}
function f(t) {
"hidden" === t && (u = v.now(), l("pageHide", [u]))
}
if (!("init" in NREUM && "page_view_timing" in NREUM.init && "enabled" in NREUM.init.page_view_timing && NREUM.init.page_view_timing.enabled === !1)) {
var u, s, d, p, l = t("handle"), v = t("loader"), m = t(8), g = t(3), y = NREUM.o.EV;
if ("PerformanceObserver" in window && "function" == typeof window.PerformanceObserver) {
s = new PerformanceObserver(r);
try {
s.observe({entryTypes: ["paint"]})
} catch (h) {
}
d = new PerformanceObserver(i);
try {
d.observe({entryTypes: ["largest-contentful-paint"]})
} catch (h) {
}
p = new PerformanceObserver(o);
try {
p.observe({type: "layout-shift", buffered: !0})
} catch (h) {
}
}
if ("addEventListener" in document) {
var w = !1, b = ["click", "keydown", "mousedown", "pointerdown", "touchstart"];
b.forEach(function (t) {
document.addEventListener(t, c, g(!1))
})
}
m(f)
}
}, {}], 7: [function (t, e, n) {
function r(t, e) {
if (!i) return !1;
if (t !== i) return !1;
if (!e) return !0;
if (!o) return !1;
for (var n = o.split("."), r = e.split("."), a = 0; a < r.length; a++) if (r[a] !== n[a]) return !1;
return !0
}
var i = null, o = null, a = /Version\/(\S+)\s+Safari/;
if (navigator.userAgent) {
var c = navigator.userAgent, f = c.match(a);
f && c.indexOf("Chrome") === -1 && c.indexOf("Chromium") === -1 && (i = "Safari", o = f[1])
}
e.exports = {agent: i, version: o, match: r}
}, {}], 8: [function (t, e, n) {
function r(t) {
function e() {
t(c && document[c] ? document[c] : document[o] ? "hidden" : "visible")
}
"addEventListener" in document && a && document.addEventListener(a, e, i(!1))
}
var i = t(3);
e.exports = r;
var o, a, c;
"undefined" != typeof document.hidden ? (o = "hidden", a = "visibilitychange", c = "visibilityState") : "undefined" != typeof document.msHidden ? (o = "msHidden", a = "msvisibilitychange") : "undefined" != typeof document.webkitHidden && (o = "webkitHidden", a = "webkitvisibilitychange", c = "webkitVisibilityState")
}, {}], 9: [function (t, e, n) {
function r(t, e) {
var n = [], r = "", o = 0;
for (r in t) i.call(t, r) && (n[o] = e(r, t[r]), o += 1);
return n
}
var i = Object.prototype.hasOwnProperty;
e.exports = r
}, {}], 10: [function (t, e, n) {
function r(t, e, n) {
e || (e = 0), "undefined" == typeof n && (n = t ? t.length : 0);
for (var r = -1, i = n - e || 0, o = Array(i < 0 ? 0 : i); ++r < i;) o[r] = t[e + r];
return o
}
e.exports = r
}, {}], 11: [function (t, e, n) {
e.exports = {exists: "undefined" != typeof window.performance && window.performance.timing && "undefined" != typeof window.performance.timing.navigationStart}
}, {}], ee: [function (t, e, n) {
function r() {
}
function i(t) {
function e(t) {
return t && t instanceof r ? t : t ? u(t, f, a) : a()
}
function n(n, r, i, o, a) {
if (a !== !1 && (a = !0), !l.aborted || o) {
t && a && t(n, r, i);
for (var c = e(i), f = m(n), u = f.length, s = 0; s < u; s++) f[s].apply(c, r);
var p = d[w[n]];
return p && p.push([b, n, r, c]), c
}
}
function o(t, e) {
h[t] = m(t).concat(e)
}
function v(t, e) {
var n = h[t];
if (n) for (var r = 0; r < n.length; r++) n[r] === e && n.splice(r, 1)
}
function m(t) {
return h[t] || []
}
function g(t) {
return p[t] = p[t] || i(n)
}
function y(t, e) {
l.aborted || s(t, function (t, n) {
e = e || "feature", w[n] = e, e in d || (d[e] = [])
})
}
var h = {}, w = {}, b = {
on: o,
addEventListener: o,
removeEventListener: v,
emit: n,
get: g,
listeners: m,
context: e,
buffer: y,
abort: c,
aborted: !1
};
return b
}
function o(t) {
return u(t, f, a)
}
function a() {
return new r
}
function c() {
(d.api || d.feature) && (l.aborted = !0, d = l.backlog = {})
}
var f = "nr@context", u = t("gos"), s = t(9), d = {}, p = {}, l = e.exports = i();
e.exports.getOrSetContext = o, l.backlog = d
}, {}], gos: [function (t, e, n) {
function r(t, e, n) {
if (i.call(t, e)) return t[e];
var r = n();
if (Object.defineProperty && Object.keys) try {
return Object.defineProperty(t, e, {value: r, writable: !0, enumerable: !1}), r
} catch (o) {
}
return t[e] = r, r
}
var i = Object.prototype.hasOwnProperty;
e.exports = r
}, {}], handle: [function (t, e, n) {
function r(t, e, n, r) {
i.buffer([t], r), i.emit(t, e, n)
}
var i = t("ee").get("handle");
e.exports = r, r.ee = i
}, {}], id: [function (t, e, n) {
function r(t) {
var e = typeof t;
return !t || "object" !== e && "function" !== e ? -1 : t === window ? 0 : a(t, o, function () {
return i++
})
}
var i = 1, o = "nr@id", a = t("gos");
e.exports = r
}, {}], loader: [function (t, e, n) {
function r() {
if (!M++) {
var t = T.info = NREUM.info, e = m.getElementsByTagName("script")[0];
if (setTimeout(u.abort, 3e4), !(t && t.licenseKey && t.applicationID && e)) return u.abort();
f(x, function (e, n) {
t[e] || (t[e] = n)
});
var n = a();
c("mark", ["onload", n + T.offset], null, "api"), c("timing", ["load", n]);
var r = m.createElement("script");
0 === t.agent.indexOf("http://") || 0 === t.agent.indexOf("https://") ? r.src = t.agent : r.src = l + "://" + t.agent, e.parentNode.insertBefore(r, e)
}
}
function i() {
"complete" === m.readyState && o()
}
function o() {
c("mark", ["domContent", a() + T.offset], null, "api")
}
var a = t(5), c = t("handle"), f = t(9), u = t("ee"), s = t(7), d = t(2), p = t(3),
l = d.getConfiguration("ssl") === !1 ? "http" : "https", v = window, m = v.document,
g = "addEventListener", y = "attachEvent", h = v.XMLHttpRequest, w = h && h.prototype, b = !1;
NREUM.o = {
ST: setTimeout,
SI: v.setImmediate,
CT: clearTimeout,
XHR: h,
REQ: v.Request,
EV: v.Event,
PR: v.Promise,
MO: v.MutationObserver
};
var E = "" + location, x = {
beacon: "bam.nr-data.net",
errorBeacon: "bam.nr-data.net",
agent: "js-agent.newrelic.com/nr-1216.min.js"
}, O = h && w && w[g] && !/CriOS/.test(navigator.userAgent), T = e.exports = {
offset: a.getLastTimestamp(),
now: a,
origin: E,
features: {},
xhrWrappable: O,
userAgent: s,
disabled: b
};
if (!b) {
t(1), t(6), m[g] ? (m[g]("DOMContentLoaded", o, p(!1)), v[g]("load", r, p(!1))) : (m[y]("onreadystatechange", i), v[y]("onload", r)), c("mark", ["firstbyte", a.getLastTimestamp()], null, "api");
var M = 0
}
}, {}], "wrap-function": [function (t, e, n) {
function r(t, e) {
function n(e, n, r, f, u) {
function nrWrapper() {
var o, a, s, p;
try {
a = this, o = d(arguments), s = "function" == typeof r ? r(o, a) : r || {}
} catch (l) {
i([l, "", [o, a, f], s], t)
}
c(n + "start", [o, a, f], s, u);
try {
return p = e.apply(a, o)
} catch (v) {
throw c(n + "err", [o, a, v], s, u), v
} finally {
c(n + "end", [o, a, p], s, u)
}
}
return a(e) ? e : (n || (n = ""), nrWrapper[p] = e, o(e, nrWrapper, t), nrWrapper)
}
function r(t, e, r, i, o) {
r || (r = "");
var c, f, u, s = "-" === r.charAt(0);
for (u = 0; u < e.length; u++) f = e[u], c = t[f], a(c) || (t[f] = n(c, s ? f + r : r, i, f, o))
}
function c(n, r, o, a) {
if (!v || e) {
var c = v;
v = !0;
try {
t.emit(n, r, o, e, a)
} catch (f) {
i([f, n, r, o], t)
}
v = c
}
}
return t || (t = s), n.inPlace = r, n.flag = p, n
}
function i(t, e) {
e || (e = s);
try {
e.emit("internal-error", t)
} catch (n) {
}
}
function o(t, e, n) {
if (Object.defineProperty && Object.keys) try {
var r = Object.keys(t);
return r.forEach(function (n) {
Object.defineProperty(e, n, {
get: function () {
return t[n]
}, set: function (e) {
return t[n] = e, e
}
})
}), e
} catch (o) {
i([o], n)
}
for (var a in t) l.call(t, a) && (e[a] = t[a]);
return e
}
function a(t) {
return !(t && t instanceof Function && t.apply && !t[p])
}
function c(t, e) {
var n = e(t);
return n[p] = t, o(t, n, s), n
}
function f(t, e, n) {
var r = t[e];
t[e] = c(r, n)
}
function u() {
for (var t = arguments.length, e = new Array(t), n = 0; n < t; ++n) e[n] = arguments[n];
return e
}
var s = t("ee"), d = t(10), p = "nr@original", l = Object.prototype.hasOwnProperty, v = !1;
e.exports = r, e.exports.wrapFunction = c, e.exports.wrapInPlace = f, e.exports.argsToArray = u
}, {}]
}, {}, ["loader"]);</script>
<meta property="og:image" content="{{ absolute_url(asset('images/freelance.webp')) }}">
<meta property="og:image:secure_url" content="{{ absolute_url(asset('images/freelance.webp')) }}">
<meta property="og:title"
content="Freelance: missions {{ 'now'|date('Y') }} sur toute la France | WorkDispo"/>
<meta property="og:type" content="WorkDispo"/>
<meta property="og:url" content="{{ app.request.getBaseURL() }}"/>
<meta name="Content-Language" content="fr">
<meta name="author" content="www.workdispo.com">
<meta name="revisit-after" content="revisit-after">
<meta name="pragma" content="no-cache">
<meta name="classification" content="WorkDispo: des missions sans commission">
<meta property="og:site_name" data-js-id="meta-og_site_name" content="WorkDispo" >
<meta http-equiv="Cache-Control" content="max-age=31536000">
{% endblock %}
{% block stylesheets %}
<style>
.rounded-right {
/* border-top-right-radius: 3em;
border-bottom-right-radius: 3em; */
border-radius: 10px;
}
.whysection h3 {
font-size: 1.75rem;
font-weight: bolder;
}
.whysection p {
font-size: 1.2rem;
line-height: 1.9rem;
text-align: justify;
}
th {
max-width: 50%;
width: 50%;
color: #979797;
}
td {
font-weight: bold;
color: #000;
}
table {
width: 100%;
}
.news-link:visited {
color: #98a2ea;
}
.accordion-header.accordion-white {
background: none;
color: #000000;
border: none;
}
.accordion__item .accordion-bg-none {
background: none;
}
.faq .accordion-header h3 {
display: inline-block !important;
width: 90% !important;
font-size: 1.25rem !important;
line-height: 1.875rem !important;
font-weight: bolder !important;
vertical-align: top !important;
}
img {
width: 100%; /* or max-width: 100%; */
height: auto;
}
.limited-lines-two {
display: -webkit-box !important;
-webkit-line-clamp: 2 !important;
-webkit-box-orient: vertical !important;
overflow: hidden !important;
}
@font-face {
font-family: 'Pacifico';
font-style: normal;
font-weight: 400;
src: local('Pacifico Regular'), local('Pacifico-Regular'),
url(https://fonts.gstatic.com/s/pacifico/v12/FwZY7-Qmy14u9lezJ-6H6MmBp0u-.woff2) format('woff2');
font-display: swap;
}
h2 {
font-weight: bold;
}
</style>
{% endblock %}
{% block body %}
<!-- Intro Banner
================================================== -->
<!-- add class "disable-gradient" to enable consistent background overlay -->
<div class="intro-banner" data-background-image="images/freelance.webp" alt="Freelance">
<div class="container">
{# {% include 'macro/apply_floatant_accueil.html.twig' %}#}
<!-- Intro Headline -->
<div class="row">
<div class="col-md-12">
<div class="banner-headline">
<span>
<div class="text-black"
style="display: flex; font-size: 28px !important; line-height: 42px !important;flex-direction: row;flex-wrap: wrap;">
<h1 style="line-height: inherit;"><strong
style="font-size: 28px">Mission freelance et offre d’emploi</strong></h1>
<strong>en France.</strong>
</div>
<h3 class="text-blue">
<strong class="color">WorkDispo </strong>
<span class="text-black">c'est</span>
<strong class="color">100% gratuit</strong> <span class="text-black">pour les candidats et</span> <strong
class="color">0% de commission</strong>
<span class="text-black">sur la mission freelance. </span>
</h3>
</span>
</div>
</div>
</div>
<!-- Search Bar -->
<div class="row">
<div class="col-md-12">
<form action="{{ path('offre_search') }}" method="POST" id="formSearch">
<div class="intro-banner-search-form margin-top-95">
<!-- Search Field -->
<div class="intro-search-field">
<label for="autocomplete-input" class="field-title ripple-effect">Où?</label>
<select id="location" name="location[]" class="selectpicker default" multiple
title="Toute la France"
data-live-search="true">
<option>Toute la France</option>
{% for name,region in regions %}
<optgroup label="{{ name }}" data-max-options="1">
<option value="{{ name }}">Tout {{ name }}</option>
{% for department in region %}
<option value="{{ department }}">{{ department }}</option>
{% endfor %}
</optgroup>
{% endfor %}
</select>
</div>
<!-- Search Field -->
<div class="intro-search-field">
<label for="search" class="field-title ripple-effect">Que
recherchez-vous?</label>
<input name="search" id="search" type="text"
placeholder="Titre du poste ou mot clé">
</div>
<!-- Button -->
<div class="intro-search-button">
{% if is_granted('ROLE_USER') %}
<button class="button ripple-effect"
type="submit">Rechercher
</button>
{% else %}
<a class="button ripple-effect" href="{{ path('offre_search') }}">Rechercher</a>
{% endif %}
</div>
</div>
</form>
</div>
</div>
</div>
</div>
<!-- Features Jobs -->
{% if not app.user and not isNotShow %}
<div class="section padding-top-45 padding-bottom-45">
<div class="container">
<div class="row">
<div class="col-xl-12">
<!-- Section Headline -->
<div class="section-headline margin-top-0 margin-bottom-35">
<h2>Dernières missions </h2>
<a href="{{ path('mission_search_default') }}"
class="headline-link">
Toutes les missions
</a>
</div>
<!-- Jobs Container -->
<div class="listings-container compact-list-layout margin-top-35">
{% for offer in offers|slice(0, 5) %}
<a href="{{ is_granted('ROLE_USER') ? path('public_mission', {slug : offer.slug}) : '#sign-in-dialog' }}"
class="{{ is_granted('ROLE_USER') ? '' : 'popup-with-zoom-anim' }} job-listing with-apply-button">
<div class="job-listing-details">
<div class="job-listing-company-logo">
<img
src="{{ offer.society.user.photo ? path('download_avatar', {'filename': offer.society.user.photo}) : asset('images/user-avatar-placeholder.png') }}"
alt="">
</div>
<div class="job-listing-description">
<h3 class="job-listing-title"> {{ offer.title }}</h3>
<div class="job-listing-footer">
<ul>
<li>
<i class="icon-material-outline-business"></i> {{ offer.society.name }}
</li>
<li>
<i class="icon-material-outline-location-on"></i> {{ offer.location }}
</li>
<li>
<i class="icon-material-outline-business-center"></i> {{ offer.getCostText() }}
</li>
<li>
<i class="icon-material-outline-access-time"></i> {{ offer.getDurationText() }}
</li>
</ul>
</div>
</div>
<span class="button">Postuler</span>
</div>
</a>
{% endfor %}
</div>
<!-- Jobs Container / End -->
</div>
</div>
</div>
</div>
{% endif %}
<!-- Featured Jobs / End -->
<!-- Features Cities -->
<div class="section margin-bottom-65 margin-top-45">
<div class="container">
<div class="row">
<div class="col-xl-12">
<!-- Section Headline -->
<div class="margin-top-0 margin-bottom-25">
<h2 class="text-center"><span class="text-blue">Mission freelance</span> et <span class="text-blue">offre d’emploi</span> à Paris et en France avec télétravail</h2>
</div>
</div>
{% for city in cityList %}
<div class="col-xl-3 col-md-6">
<!-- Photo Box -->
<a href="{{ city.link }}"
class="photo-box"
data-background-image="{{ city.img }}">
<div class="photo-box-content">
<h3>Emploi {{ city.name }}</h3>
</div>
</a>
</div>
{% endfor %}
</div>
</div>
</div>
<!-- Features Cities / End -->
<!-- Highest news -->
{# <div class="section padding-bottom-45">
<div class="container">
<div class="row">
<div class="col-xl-12">
<!-- Section Headline -->
<div class="section-headline margin-top-0 margin-bottom-25">
<h3>News de tech</h3>
<a href="{{ path('all_news') }}"
class=" headline-link">Toutes les
actualités</a>
</div>
</div>
<div class="col-xl-12">
<div class="freelancers-container freelancers-grid-layout">
<ul style="list-style-type:none;">
{% for actu in news %}
<li class="actu">{{ actu.date|date('d/m') }} - <a class="news-link" href="{{ actu.newsLink }}" target="_blank" style="font-weight: bold !important;"><b >{{ actu.description|u.truncate(70, '...') }}</b></a> - <small ><em><a href="{{ actu.link }}" target="_blank" class="text-black">{{ actu.owner}}</a></em></small></li>
{% endfor %}
</ul>
</div>
</div>
</div>
</div>
</div> #}
<!-- Highest news / End-->
<div class="container section padding-top-0">
<div class="d-flex align-items-start ">
<div class="d-none d-md-block col-md-6 padding-left-0 " style=" display: flex !important; height: 100%;">
<img class="rounded-right" style=" width:100%; object-fit: cover;"
src="{{ asset('images/mission-freelance.webp') }}" title="Pourquoi WorkDispo"
alt="Mission freelance">
</div>
<div class="col-md-6 whysection">
<h2>Plateforme de <span class="text-blue">mission freelance</span> et d’<span class="text-blue">offre d’emploi</span>?</h2>
<p class="margin-top-25 text-black" style="font-size: 1.2rem;line-height: 1.75rem;
text-align: justify;">
{# <span class="text-blue">WorkDispo</span> est une plateforme dont l’inscription et l’utilisation sont
<span class="text-blue">100% gratuites pour les candidats</span>. En déposant votre CV vous pourrez être contacté par des recruteurs qui recherchent des demandeurs d’emplois ou des freelances pour des missions, et vous pourrez aussi postuler à des <a
href="https://www.workdispo.com/missions-freelance">missions freelance</a> ou à <a
href="https://www.workdispo.com/emploi">offres d’emploi</a>. Le <a
href="https://www.workdispo.com/tjm">TJM</a> du freelance n’est pas
du tout impacté, WorkDispo ne demande <span class="text-blue">aucune commission ni aux candidats ni aux recruteurs</span>
et
aucun % de frais de service. C’est pour cette raison que tous les recruteurs rejoignent WorkDispo et ainsi proposer le <span class="text-blue">maximum de missions freelance et d’offres d’emplois</span>! #}
WorkDispo est une plateforme dont l’inscription et l’utilisation sont 100 % gratuites pour les candidats. En déposant votre CV, vous pourrez être contacté par des recruteurs recherchant des demandeurs d’emploi ou des freelances pour des missions. Vous pourrez également postuler à des <a
href="https://www.workdispo.com/missions-freelance">missions freelance</a> ou à des <a
href="https://www.workdispo.com/emploi">offres d’emploi</a>. Le TJM du freelance n’est absolument pas impacté : WorkDispo ne demande aucune commission, ni aux candidats ni aux recruteurs, et n’applique aucun pourcentage de frais de service. C’est pour cette raison que de nombreux recruteurs rejoignent WorkDispo, afin de proposer un maximum de <a
href="https://www.workdispo.com/missions-freelance">missions freelance</a> et d’<a
href="https://www.workdispo.com/emploi">offres d’emploi</a> !
</p>
</div>
</div>
</div>
<!-- How it works -->
<div class="section padding-top-65 padding-bottom-65">
<div class="container">
<div class="row">
<div class="col-xl-12">
<!-- Section Headline -->
<div class=" centered margin-top-0 margin-bottom-5">
<h2 class="text-center">Comment postuler à une <span class="text-blue">mission freelance</span> ou à une <span class="text-blue">offre d’emploi</span>?</h2>
</div>
</div>
<div class="col-xl-4 col-md-4">
<!-- Icon Box -->
<div class="icon-box with-line">
<!-- Icon -->
<div class="icon-box-circle">
<div class="icon-box-circle-inner">
<i class="icon-line-awesome-lock"></i>
<div class="icon-box-check"><i class="icon-material-outline-check"></i></div>
</div>
</div>
<h3>Créer un compte</h3>
<p>Créer un compte gratuitement et facilement pour pouvoir utiliser WorkDispo.</p>
</div>
</div>
<div class="col-xl-4 col-md-4">
<!-- Icon Box -->
<div class="icon-box with-line">
<!-- Icon -->
<div class="icon-box-circle">
<div class="icon-box-circle-inner">
<i class="icon-line-awesome-legal"></i>
<div class="icon-box-check"><i class="icon-material-outline-check"></i></div>
</div>
</div>
<h3>Poster votre CV </h3>
<p>Téléversez votre CV pour être contacté par des recruteurs qui recherchent votre profil.</p>
</div>
</div>
<div class="col-xl-4 col-md-4">
<!-- Icon Box -->
<div class="icon-box">
<!-- Icon -->
<div class="icon-box-circle">
<div class="icon-box-circle-inner">
<i class=" icon-line-awesome-trophy"></i>
<div class="icon-box-check"><i class="icon-material-outline-check"></i></div>
</div>
</div>
<h3>Postuler aux offres</h3>
<p>Postulez aux missions freelance et/ou aux offres d’emplois en CDI/CDD dans l’informatique, le digital, le numérique...</p>
</div>
</div>
</div>
</div>
</div>
<!-- How it works / End -->
<!-- Highest Rated Freelancers -->
<div class="section padding-top-45 padding-bottom-30">
<div class="container">
<div class="row">
<div class="col-xl-12">
<!-- Section Headline -->
<div class=" margin-top-0 margin-bottom-25">
<h2 class="">Profils pour une <span class="text-blue">mission freelance</span> ou <span class="text-blue">une offre d’emploi</span></h2>
{# <a href="{{ is_granted('ROLE_USER') ? path('freelance_search') : '#sign-in-dialog' }}" #}
<a href="{{ is_granted('ROLE_USER') ? path('freelance_search') : path('register_society') }}"
{# class="{{ is_granted('ROLE_USER') ? '' : 'popup-with-zoom-anim' }} headline-link">Tous les profils freelances</a> #}
class=" headline-link">Tous les profils</a>
</div>
</div>
<div class="col-xl-12">
<div class="freelancers-container freelancers-grid-layout">
{% for profile in profiles %}
<div class="freelancer">
<div class="freelancer-overview">
<div class="freelancer-overview-inner">
<div class="freelancer-avatar">
<img
src="{{ profile.photo ? path('download_avatar', {'filename': profile.photo}) : asset('images/user-avatar-placeholder.png') }}"
alt=""
class="{{ is_granted('ROLE_USER') ? '' : 'blur-image' }}"
style="cursor: inherit"
>
</div>
<div class="freelancer-name">
<h4>
<a href="{{ path('public_profile', {slug : profile.slug}) }}">{{ profile.user.firstName }}
.</a>
</h4>
<span>{{ profile.title }}</span>
</div>
</div>
</div>
<div class="freelancer-details">
<div class="freelancer-details-list">
{# @changelog 2022-10-03 [FIX] (Anthony) Modification affichage mobilité sur le titre de la page #}
<table>
<thead>
<tr>
<th><i class="icon-material-outline-location-on"></i> Localisation</th>
<th>T.J.M</th>
<th>Disponibilité</th>
</tr>
</thead>
<tbody>
<tr>
<td>
{% set locations = profile.location|split(' ') %}
{% set location_text = '' %}
{# Vérifie si le premier élément contient des caractères autres que des chiffres #}
{% if locations|length > 1 and not locations[0]|number_format(0) == locations[0] %}
{# Concatène tous les éléments de locations et tronque à 13 caractères #}
{% set location_text = locations|join(' ')|u.truncate(13, '...') %}
{% else %}
{# Utilise locations[0] et tronque à 13 caractères #}
{% set location_text = (locations[1] is defined ? locations[1]|u.truncate(13, '...') : locations[0])|u.truncate(13, '...') %}
{% endif %}
{{ location_text }}
</td>
<td>{{ profile.cost }} €</td>
<td>{{ profile.disponibility }}</td>
</tr>
</tbody>
</table>
</div>
<a href="{{ is_granted('ROLE_USER') ? path('public_profile', {slug : profile.slug}) : '#sign-in-dialog' }}"
class="{{ is_granted('ROLE_USER') ? '' : 'popup-with-zoom-anim' }} button button-sliding-icon ripple-effect">
Voir le profil <i class="icon-material-outline-arrow-right-alt"></i></a>
</div>
</div>
<!-- Freelancer / End -->
{% endfor %}
</div>
</div>
</div>
</div>
</div>
<!-- Highest Rated Freelancers / End-->
<!-- Highest LIST Freelance -->
<div class="section padding-bottom-45">
<div class="container">
<div class="row">
<div class="col-xl-12">
<!-- Section Headline -->
<div class="margin-top-0 margin-bottom-25">
<h2 class="text-center"><span class="text-blue">Mission freelance</span> informatique par compétences</h2>
</div>
</div>
<div class="col-xl-12">
<div class="freelancers-container freelancers-grid-layout freelance-job">
<table class="width-100" style="border: none">
<tr>
<td><a href="https://www.workdispo.com/freelance-agile-scrum">Freelance Agile
Scrum</a></td>
<td><a href="https://www.workdispo.com/freelance-docker">Freelance Docker</a></td>
<td><a href="https://www.workdispo.com/freelance-moa">Freelance MOA</a></td>
</tr>
<tr>
<td><a href="https://www.workdispo.com/freelance-amoa">Freelance AMOA</a></td>
<td><a href="https://www.workdispo.com/freelance-git">Freelance Git</a></td>
<td><a href="https://www.workdispo.com/freelance-mysql">Freelance MySQL</a></td>
</tr>
<tr>
<td><a href="https://www.workdispo.com/freelance-angular">Freelance Angular</a>
</td>
<td><a href="https://www.workdispo.com/freelance-html">Freelance HTML</a></td>
<td><a href="https://www.workdispo.com/freelance-oracle">Freelance Oracle</a></td>
</tr>
<tr>
<td><a href="https://www.workdispo.com/freelance-ansible">Freelance Ansible</a>
</td>
<td><a href="https://www.workdispo.com/freelance-infrastructure">Freelance
Infrastructure</a></td>
<td><a href="https://www.workdispo.com/freelance-php">Freelance PHP</a></td>
</tr>
<tr>
<td><a href="https://www.workdispo.com/freelance-api">Freelance API</a></td>
<td><a href="https://www.workdispo.com/freelance-java">Freelance Java</a></td>
<td><a href="https://www.workdispo.com/freelance-postgresql">Freelance
PostgreSQL</a></td>
</tr>
<tr>
<td><a href="https://www.workdispo.com/freelance-azure">Freelance Azure</a></td>
<td><a href="https://www.workdispo.com/freelance-javascript">Freelance
Javascript</a></td>
<td><a href="https://www.workdispo.com/freelance-python">Freelance Python</a></td>
</tr>
<tr>
<td><a href="https://www.workdispo.com/freelance-bi">Freelance BI</a></td>
<td><a href="https://www.workdispo.com/freelance-jira">Freelance JIRA</a></td>
<td><a href="https://www.workdispo.com/freelance-react">Freelance React</a></td>
</tr>
<tr>
<td><a href="https://www.workdispo.com/freelance-cloud">Freelance Cloud</a></td>
<td><a href="https://www.workdispo.com/freelance-linux">Freelance Linux</a></td>
<td><a href="https://www.workdispo.com/freelance-réseaux">Freelance Réseaux</a>
</td>
</tr>
<tr>
<td><a href="https://www.workdispo.com/freelance-css">Freelance CSS</a></td>
<td><a href="https://www.workdispo.com/freelance-microsoft-excel">Freelance
Microsoft Excel</a></td>
<td><a href="https://www.workdispo.com/freelance-sap">Freelance SAP</a></td>
</tr>
<tr>
<td><a href="https://www.workdispo.com/freelance-cybersécurite">Freelance
Cybersécurité</a></td>
<td><a href="https://www.workdispo.com/freelance-microsoft-office">Freelance
Microsoft Office</a></td>
<td><a href="https://www.workdispo.com/freelance-sql">Freelance SQL</a></td>
</tr>
<tr>
<td><a href="https://www.workdispo.com/freelance-devops">Freelance DevOps</a></td>
<td><a href="https://www.workdispo.com/freelance-microsoft-office-365">Freelance
Microsoft Office 365</a></td>
<td><a href="https://www.workdispo.com/freelance-telecom">Freelance Telecom</a>
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="row margin-top-80">
<div class="col-xl-12">
<!-- Section Headline -->
<div class="margin-top-0 margin-bottom-32">
<h2 class="text-center">Plus sur l’<span class="text-blue">informatique</span></h2>
</div>
</div>
</div>
<div class="row ">
{% for blog in blogs %}
<a href="{{ path('blog_show',{thematique:blog.slug}) }}"
class="blog-compact-item-container col-md-4">
<div class="blog-compact-item" style=" width: 300px !important; height: 380px !important;">
<img
src="{{ asset( blog.blogimage ? 'uploads/img/'~blog.blogimage.path : 'images/blog-04.jpg') }}"
alt="{{ blog.blogimage ? blog.blogimage.name : '' }}">
<div style="position: absolute;top: 32px;left: 16px;">
{% if blog.getSousThematique() is not empty %}
{% for sous_thematique in blog.getSousThematique() %}
<span class="blog-item-tag"
style="position: relative !important;top: auto;left: auto;z-index: 110">{{ sous_thematique.getName() }}</span>
{% endfor %}
{% else %}
{% for thematique in blog.getThematique() %}
<span class="blog-item-tag"
style="position: relative !important;top: auto;left: auto;z-index: 110">{{ thematique.getName() }}</span>
{% endfor %}
{% endif %}
</div>
<div class="blog-compact-item-content">
<ul class="blog-post-tags">
{% set trans_month_hash = {
"January": "Janvier",
"February": "Février",
"March": "Mars",
"April": "Avril",
"May": "Mai",
"June": "Juin",
"July": "Juillet",
"August": "Août",
"September": "Septembre",
"October": "Octobre",
"November": "Novembre",
"December": "Décembre"
} %}
<li>{{ blog.getCreatedAt()|date("d") }} {{ trans_month_hash[blog.getCreatedAt()|date("F")] }} {{ blog.getCreatedAt()|date("Y") }}</li>
</ul>
<h3 class="limited-lines-two">{{ blog.title }}</h3>
<p style="
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
">
{{ blog.description }}
</p>
</div>
</div>
</a>
{% endfor %}
</div>
</div>
</div>
<!-- Highest LIST Freelance / End-->
<!--FAQ -->
<div class="section faq " style="background-color: #2a41e80d">
<div class="container-fluid white" style="padding-left: 0px; padding-right: 0px; background-color: white ">
<svg style="display: block" xmlns="http://www.w3.org/2000/svg" width="100%" height="100%"
viewBox="0 0 1366 74.99">
<path
d="M.051,44.953C180.175,87.69,501.382,86.386,803.886,24.306a1184.173,1184.173,0,0,1,562.165,20.646c-.213-.782,0,30,0,30H.051Z"
transform="translate(-0.051 0.038)" fill="#2a41e80d"></path>
</svg>
</div>
<div class="container padding-top-50">
<div class="row">
<div class="col-md-8">
<h2>FAQ de la <span class="text-blue">mission freelance</span> ou une <span class="text-blue">offre d’emploi</span></h2>
<div class="margin-top-50 accordion js-accordion no-shadow ">
{% for question, answer in faqs %}
<div class="accordion__item js-accordion-item">
<div class="accordion-header accordion-white js-accordion-header">
<i class="carret"></i>
<h3>{{ question }}</h3>
</div>
<!-- Accordtion Body -->
<div class="accordion-body accordion-bg-none js-accordion-body" style="display: none;">
<!-- Accordion Content -->
<div class="accordion-body__contents">
<p class="text-black">
{{ answer|raw }}
</p>
</div>
</div>
<!-- Accordion Body / End -->
</div>
{% endfor %}
</div>
</div>
<div class="col-md-4">
<img src="{{ asset('images/home-faq.webp') }}" alt="FAQ">
</div>
</div>
</div>
</div>
<!--FAQ / End -->
{% if is_granted('ROLE_USER') and app.user.deleteAt %}
<div id="small-dialog" class="zoom-anim-dialog mfp-hide dialog-with-tabs">
<div class="sign-in-form">
<ul class="popup-tabs-nav">
<li><a href="#recup-tab">Compte</a></li>
</ul>
<div class="popup-tabs-container">
<div class="popup-tab-content" id="recup-tab">
<form>
<div id="report_confirm" class="welcome-text">
<h3> « Souhaitez-vous récupérer votre compte avant sa suppression ? »</h3>
</div>
<div class="d-flex justify-content-end">
<a href="{{ path('logout') }}" class="button red " style="margin-right: 10px">
Annuler
</a>
<a href="{{ path('account_reactivate') }}" class="button">Récupérer mon compte</a>
</div>
</form>
</div>
</div>
</div>
</div>
{% else %}
{% include 'common/modal/sign_modal.html.twig' %}
{% include 'common/modal/reset_password_modal.html.twig' %}
{% endif %}
{% set paused = false %}
{% for validation in app.flashes('pause_success') %}
{% set paused = true %}
{% endfor %}
{% if paused %}
<div id="pause-info-dialog" class="zoom-anim-dialog mfp-hide dialog-with-tabs custom-dialog">
<div class="sign-in-form">
<ul class="popup-tabs-nav">
<li><a href="#tabinfo">Compte en pause</a></li>
</ul>
<div class="popup-tabs-container">
<!-- Tab -->
<div class="popup-tab-content" id="tabinfo">
<!-- Welcome Text -->
<div class="welcome-text">
<p class="margin-top-15">
Votre compte est en pause à votre demande et sera réactivé le
{{ app.user.society.pauseDate | date('d/m/Y') }}
à {{ app.user.society.pauseDate | date('H:i') }}
</p>
</div>
</div>
</div>
</div>
</div>
{% endif %}
{% endblock %}
{% block javascripts %}
<script>
$(function () {
$('#location').change(function () {
var location = $(this).val();
var newLocation = location;
if (location.length > 1) {
newLocation = newLocation.filter((value) => value !== 'Toute la France');
}
$(this).selectpicker('val', newLocation);
});
if ($('#small-dialog').length > 0) {
$.magnificPopup.open({
items: {
src: '#small-dialog'
},
type: 'inline',
fixedContentPos: false,
fixedBgPos: true,
overflowY: 'auto',
closeBtnInside: true,
preloader: false,
midClick: true,
removalDelay: 300,
mainClass: 'my-mfp-zoom-in'
});
}
if ($('#pause-info-dialog').length > 0) {
$.magnificPopup.open({
items: {
src: '#pause-info-dialog'
},
type: 'inline',
fixedContentPos: false,
fixedBgPos: true,
overflowY: 'auto',
closeBtnInside: true,
preloader: false,
midClick: true,
removalDelay: 300,
mainClass: 'my-mfp-zoom-in'
});
}
if ($('#recup-dialog').length > 0) {
$.magnificPopup.open({
items: {
src: '#recup-dialog'
},
type: 'inline',
fixedContentPos: false,
fixedBgPos: true,
overflowY: 'auto',
closeBtnInside: true,
preloader: false,
midClick: true,
removalDelay: 300,
mainClass: 'my-mfp-zoom-in'
});
}
})
</script>
{# ---- SCRICP FORMATAGE RECHERCHE --- #}
{% if app.user %}
{{ include('macro/_mission-search.html.twig') }}
{% endif %}
{% endblock %}