From 6da4b9870f15b858865c0455b439e7d2b509790c Mon Sep 17 00:00:00 2001 From: Nicolas VARROT Date: Mon, 21 Mar 2016 17:32:25 +0100 Subject: [PATCH] Video Negos + Check_enabled + devis on each interest + other --- app/assets/javascripts/public.js.coffee | 2 +- .../public/jquery.magnific-popup.min.js | 4 + app/assets/stylesheets/magnific-popup.scss | 351 ++++++++++++++++++ app/assets/stylesheets/public.scss | 2 +- app/controllers/admin/wishes_controller.rb | 10 + app/controllers/application_controller.rb | 5 + .../public/accepted_offers_controller.rb | 1 + app/controllers/public/comments_controller.rb | 5 +- .../public/documents_controller.rb | 1 + .../public/menu_items_controller.rb | 4 +- app/controllers/public/messages_controller.rb | 1 + .../public/my_account_controller.rb | 2 +- app/controllers/public/needs_controller.rb | 12 + app/controllers/public/offers_controller.rb | 3 +- app/controllers/public/wishes_controller.rb | 98 +++++ app/mailers/application_mailer.rb | 2 +- app/mailers/customer_mailer.rb | 6 +- app/models/wish.rb | 4 + app/uploaders/wish_devis_uploader.rb | 21 ++ app/views/admin/needs/_form.html.haml | 2 - .../admin/needs/_need_to_validate.html.haml | 8 +- app/views/admin/needs/index.html.haml | 4 +- app/views/admin/wishes/_wish.html.haml | 10 + app/views/admin/wishes/index.html.haml | 4 + app/views/layouts/admin.html.haml | 7 +- app/views/layouts/public.html.haml | 21 ++ app/views/public/my_account/index.html.haml | 4 +- app/views/public/needs/_edit_form.html.haml | 8 + app/views/public/needs/_form.html.haml | 4 +- app/views/public/needs/_need_item.html.haml | 7 +- app/views/public/needs/_wish.html.haml | 25 -- app/views/public/needs/edit.html.haml | 2 +- app/views/public/needs/show.html.haml | 7 +- app/views/public/shared/_menu.html.haml | 6 +- app/views/public/wishes/_form.html.haml | 18 + .../_index.html.haml} | 4 +- app/views/public/wishes/_wish.html.haml | 26 ++ app/views/public/wishes/edit.html.haml | 17 + app/views/public/wishes/new.html.haml | 15 + config/routes.rb | 11 +- ...160318165409_add_devis_and_note_to_wish.rb | 6 + db/schema.rb | 8 +- public/uploads/devis-16.pdf | Bin 0 -> 11431 bytes public/uploads/devis-16__1_.pdf | Bin 0 -> 11431 bytes public/uploads/devis-16__2_.pdf | Bin 0 -> 11431 bytes public/uploads/devis-16__3_.pdf | Bin 0 -> 11431 bytes public/uploads/devis.pdf | Bin 0 -> 11431 bytes 47 files changed, 693 insertions(+), 65 deletions(-) create mode 100644 app/assets/javascripts/public/jquery.magnific-popup.min.js create mode 100644 app/assets/stylesheets/magnific-popup.scss create mode 100644 app/controllers/public/wishes_controller.rb create mode 100644 app/uploaders/wish_devis_uploader.rb create mode 100644 app/views/public/needs/_edit_form.html.haml delete mode 100755 app/views/public/needs/_wish.html.haml create mode 100644 app/views/public/wishes/_form.html.haml rename app/views/public/{needs/_wishes_index.html.haml => wishes/_index.html.haml} (78%) create mode 100755 app/views/public/wishes/_wish.html.haml create mode 100644 app/views/public/wishes/edit.html.haml create mode 100644 app/views/public/wishes/new.html.haml create mode 100644 db/migrate/20160318165409_add_devis_and_note_to_wish.rb create mode 100644 public/uploads/devis-16.pdf create mode 100644 public/uploads/devis-16__1_.pdf create mode 100644 public/uploads/devis-16__2_.pdf create mode 100644 public/uploads/devis-16__3_.pdf create mode 100644 public/uploads/devis.pdf diff --git a/app/assets/javascripts/public.js.coffee b/app/assets/javascripts/public.js.coffee index 9bf0842..d0c868d 100755 --- a/app/assets/javascripts/public.js.coffee +++ b/app/assets/javascripts/public.js.coffee @@ -15,7 +15,7 @@ #= require public/prettify.js #= require public/jquery.jOrgChart.js - +#= require public/jquery.magnific-popup.min #= require bootstrap-p diff --git a/app/assets/javascripts/public/jquery.magnific-popup.min.js b/app/assets/javascripts/public/jquery.magnific-popup.min.js new file mode 100644 index 0000000..933c670 --- /dev/null +++ b/app/assets/javascripts/public/jquery.magnific-popup.min.js @@ -0,0 +1,4 @@ +/*! Magnific Popup - v1.1.0 - 2016-02-20 + * http://dimsemenov.com/plugins/magnific-popup/ + * Copyright (c) 2016 Dmitry Semenov; */ +!function(a){"function"==typeof define&&define.amd?define(["jquery.bxslider"],a):a("object"==typeof exports?require("jquery"):window.jQuery||window.Zepto)}(function(a){var b,c,d,e,f,g,h="Close",i="BeforeClose",j="AfterClose",k="BeforeAppend",l="MarkupParse",m="Open",n="Change",o="mfp",p="."+o,q="mfp-ready",r="mfp-removing",s="mfp-prevent-close",t=function(){},u=!!window.jQuery,v=a(window),w=function(a, c){b.ev.on(o+a+p,c)},x=function(b, c, d, e){var f=document.createElement("div");return f.className="mfp-"+b,d&&(f.innerHTML=d),e?c&&c.appendChild(f):(f=a(f),c&&f.appendTo(c)),f},y=function(c,d){b.ev.triggerHandler(o+c,d),b.st.callbacks&&(c=c.charAt(0).toLowerCase()+c.slice(1),b.st.callbacks[c]&&b.st.callbacks[c].apply(b,a.isArray(d)?d:[d]))},z=function(c){return c===g&&b.currTemplate.closeBtn||(b.currTemplate.closeBtn=a(b.st.closeMarkup.replace("%title%",b.st.tClose)),g=c),b.currTemplate.closeBtn},A=function(){a.magnificPopup.instance||(b=new t,b.init(),a.magnificPopup.instance=b)},B=function(){var a=document.createElement("p").style,b=["ms","O","Moz","Webkit"];if(void 0!==a.transition)return!0;for(;b.length;)if(b.pop()+"Transition"in a)return!0;return!1};t.prototype={constructor:t,init:function(){var c=navigator.appVersion;b.isLowIE=b.isIE8=document.all&&!document.addEventListener,b.isAndroid=/android/gi.test(c),b.isIOS=/iphone|ipad|ipod/gi.test(c),b.supportsTransition=B(),b.probablyMobile=b.isAndroid||b.isIOS||/(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent),d=a(document),b.popupsCache={}},open:function(c){var e;if(c.isObj===!1){b.items=c.items.toArray(),b.index=0;var g,h=c.items;for(e=0;e(a||v.height())},_setFocus:function(){(b.st.focus?b.content.find(b.st.focus).eq(0):b.wrap).focus()},_onFocusIn:function(c){return c.target===b.wrap[0]||a.contains(b.wrap[0],c.target)?void 0:(b._setFocus(),!1)},_parseMarkup:function(b,c,d){var e;d.data&&(c=a.extend(d.data,c)),y(l,[b,c,d]),a.each(c,function(c,d){if(void 0===d||d===!1)return!0;if(e=c.split("_"),e.length>1){var f=b.find(p+"-"+e[0]);if(f.length>0){var g=e[1];"replaceWith"===g?f[0]!==d[0]&&f.replaceWith(d):"img"===g?f.is("img")?f.attr("src",d):f.replaceWith(a("").attr("src",d).attr("class",f.attr("class"))):f.attr(e[1],d)}}else b.find(p+"-"+c).html(d)})},_getScrollbarSize:function(){if(void 0===b.scrollbarSize){var a=document.createElement("div");a.style.cssText="width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;",document.body.appendChild(a),b.scrollbarSize=a.offsetWidth-a.clientWidth,document.body.removeChild(a)}return b.scrollbarSize}},a.magnificPopup={instance:null,proto:t.prototype,modules:[],open:function(b,c){return A(),b=b?a.extend(!0,{},b):{},b.isObj=!0,b.index=c||0,this.instance.open(b)},close:function(){return a.magnificPopup.instance&&a.magnificPopup.instance.close()},registerModule:function(b,c){c.options&&(a.magnificPopup.defaults[b]=c.options),a.extend(this.proto,c.proto),this.modules.push(b)},defaults:{disableOn:0,key:null,midClick:!1,mainClass:"",preloader:!0,focus:"",closeOnContentClick:!1,closeOnBgClick:!0,closeBtnInside:!0,showCloseBtn:!0,enableEscapeKey:!0,modal:!1,alignTop:!1,removalDelay:0,prependTo:null,fixedContentPos:"auto",fixedBgPos:"auto",overflowY:"auto",closeMarkup:'',tClose:"Close (Esc)",tLoading:"Loading...",autoFocusLast:!0}},a.fn.magnificPopup=function(c){A();var d=a(this);if("string"==typeof c)if("open"===c){var e,f=u?d.data("magnificPopup"):d[0].magnificPopup,g=parseInt(arguments[1],10)||0;f.items?e=f.items[g]:(e=d,f.delegate&&(e=e.find(f.delegate)),e=e.eq(g)),b._openClick({mfpEl:e},d,f)}else b.isOpen&&b[c].apply(b,Array.prototype.slice.call(arguments,1));else c=a.extend(!0,{},c),u?d.data("magnificPopup",c):d[0].magnificPopup=c,b.addGroup(d,c);return d};var C,D,E,F="inline",G=function(){E&&(D.after(E.addClass(C)).detach(),E=null)};a.magnificPopup.registerModule(F,{options:{hiddenClass:"hide",markup:"",tNotFound:"Content not found"},proto:{initInline:function(){b.types.push(F),w(h+"."+F,function(){G()})},getInline:function(c,d){if(G(),c.src){var e=b.st.inline,f=a(c.src);if(f.length){var g=f[0].parentNode;g&&g.tagName&&(D||(C=e.hiddenClass,D=x(C),C="mfp-"+C),E=f.after(D).detach().removeClass(C)),b.updateStatus("ready")}else b.updateStatus("error",e.tNotFound),f=a("
");return c.inlineElement=f,f}return b.updateStatus("ready"),b._parseMarkup(d,{},c),d}}});var H,I="ajax",J=function(){H&&a(document.body).removeClass(H)},K=function(){J(),b.req&&b.req.abort()};a.magnificPopup.registerModule(I,{options:{settings:null,cursor:"mfp-ajax-cur",tError:'The content could not be loaded.'},proto:{initAjax:function(){b.types.push(I),H=b.st.ajax.cursor,w(h+"."+I,K),w("BeforeChange."+I,K)},getAjax:function(c){H&&a(document.body).addClass(H),b.updateStatus("loading");var d=a.extend({url:c.src,success:function(d,e,f){var g={data:d,xhr:f};y("ParseAjax",g),b.appendContent(a(g.data),I),c.finished=!0,J(),b._setFocus(),setTimeout(function(){b.wrap.addClass(q)},16),b.updateStatus("ready"),y("AjaxContentAdded")},error:function(){J(),c.finished=c.loadError=!0,b.updateStatus("error",b.st.ajax.tError.replace("%url%",c.src))}},b.st.ajax.settings);return b.req=a.ajax(d),""}}});var L,M=function(c){if(c.data&&void 0!==c.data.title)return c.data.title;var d=b.st.image.titleSrc;if(d){if(a.isFunction(d))return d.call(b,c);if(c.el)return c.el.attr(d)||""}return""};a.magnificPopup.registerModule("image",{options:{markup:'
',cursor:"mfp-zoom-out-cur",titleSrc:"title",verticalFit:!0,tError:'The image could not be loaded.'},proto:{initImage:function(){var c=b.st.image,d=".image";b.types.push("image"),w(m+d,function(){"image"===b.currItem.type&&c.cursor&&a(document.body).addClass(c.cursor)}),w(h+d,function(){c.cursor&&a(document.body).removeClass(c.cursor),v.off("resize"+p)}),w("Resize"+d,b.resizeImage),b.isLowIE&&w("AfterChange",b.resizeImage)},resizeImage:function(){var a=b.currItem;if(a&&a.img&&b.st.image.verticalFit){var c=0;b.isLowIE&&(c=parseInt(a.img.css("padding-top"),10)+parseInt(a.img.css("padding-bottom"),10)),a.img.css("max-height",b.wH-c)}},_onImageHasSize:function(a){a.img&&(a.hasSize=!0,L&&clearInterval(L),a.isCheckingImgSize=!1,y("ImageHasSize",a),a.imgHidden&&(b.content&&b.content.removeClass("mfp-loading"),a.imgHidden=!1))},findImageSize:function(a){var c=0,d=a.img[0],e=function(f){L&&clearInterval(L),L=setInterval(function(){return d.naturalWidth>0?void b._onImageHasSize(a):(c>200&&clearInterval(L),c++,void(3===c?e(10):40===c?e(50):100===c&&e(500)))},f)};e(1)},getImage:function(c,d){var e=0,f=function(){c&&(c.img[0].complete?(c.img.off(".mfploader"),c===b.currItem&&(b._onImageHasSize(c),b.updateStatus("ready")),c.hasSize=!0,c.loaded=!0,y("ImageLoadComplete")):(e++,200>e?setTimeout(f,100):g()))},g=function(){c&&(c.img.off(".mfploader"),c===b.currItem&&(b._onImageHasSize(c),b.updateStatus("error",h.tError.replace("%url%",c.src))),c.hasSize=!0,c.loaded=!0,c.loadError=!0)},h=b.st.image,i=d.find(".mfp-img");if(i.length){var j=document.createElement("img");j.className="mfp-img",c.el&&c.el.find("img").length&&(j.alt=c.el.find("img").attr("alt")),c.img=a(j).on("load.mfploader",f).on("error.mfploader",g),j.src=c.src,i.is("img")&&(c.img=c.img.clone()),j=c.img[0],j.naturalWidth>0?c.hasSize=!0:j.width||(c.hasSize=!1)}return b._parseMarkup(d,{title:M(c),img_replaceWith:c.img},c),b.resizeImage(),c.hasSize?(L&&clearInterval(L),c.loadError?(d.addClass("mfp-loading"),b.updateStatus("error",h.tError.replace("%url%",c.src))):(d.removeClass("mfp-loading"),b.updateStatus("ready")),d):(b.updateStatus("loading"),c.loading=!0,c.hasSize||(c.imgHidden=!0,d.addClass("mfp-loading"),b.findImageSize(c)),d)}}});var N,O=function(){return void 0===N&&(N=void 0!==document.createElement("p").style.MozTransform),N};a.magnificPopup.registerModule("zoom",{options:{enabled:!1,easing:"ease-in-out",duration:300,opener:function(a){return a.is("img")?a:a.find("img")}},proto:{initZoom:function(){var a,c=b.st.zoom,d=".zoom";if(c.enabled&&b.supportsTransition){var e,f,g=c.duration,j=function(a){var b=a.clone().removeAttr("style").removeAttr("class").addClass("mfp-animated-image"),d="all "+c.duration/1e3+"s "+c.easing,e={position:"fixed",zIndex:9999,left:0,top:0,"-webkit-backface-visibility":"hidden"},f="transition";return e["-webkit-"+f]=e["-moz-"+f]=e["-o-"+f]=e[f]=d,b.css(e),b},k=function(){b.content.css("visibility","visible")};w("BuildControls"+d,function(){if(b._allowZoom()){if(clearTimeout(e),b.content.css("visibility","hidden"),a=b._getItemToZoom(),!a)return void k();f=j(a),f.css(b._getOffset()),b.wrap.append(f),e=setTimeout(function(){f.css(b._getOffset(!0)),e=setTimeout(function(){k(),setTimeout(function(){f.remove(),a=f=null,y("ZoomAnimationEnded")},16)},g)},16)}}),w(i+d,function(){if(b._allowZoom()){if(clearTimeout(e),b.st.removalDelay=g,!a){if(a=b._getItemToZoom(),!a)return;f=j(a)}f.css(b._getOffset(!0)),b.wrap.append(f),b.content.css("visibility","hidden"),setTimeout(function(){f.css(b._getOffset())},16)}}),w(h+d,function(){b._allowZoom()&&(k(),f&&f.remove(),a=null)})}},_allowZoom:function(){return"image"===b.currItem.type},_getItemToZoom:function(){return b.currItem.hasSize?b.currItem.img:!1},_getOffset:function(c){var d;d=c?b.currItem.img:b.st.zoom.opener(b.currItem.el||b.currItem);var e=d.offset(),f=parseInt(d.css("padding-top"),10),g=parseInt(d.css("padding-bottom"),10);e.top-=a(window).scrollTop()-f;var h={width:d.width(),height:(u?d.innerHeight():d[0].offsetHeight)-g-f};return O()?h["-moz-transform"]=h.transform="translate("+e.left+"px,"+e.top+"px)":(h.left=e.left,h.top=e.top),h}}});var P="iframe",Q="//about:blank",R=function(a){if(b.currTemplate[P]){var c=b.currTemplate[P].find("iframe");c.length&&(a||(c[0].src=Q),b.isIE8&&c.css("display",a?"block":"none"))}};a.magnificPopup.registerModule(P,{options:{markup:'
',srcAction:"iframe_src",patterns:{youtube:{index:"youtube.com",id:"v=",src:"//www.youtube.com/embed/%id%?autoplay=1"},vimeo:{index:"vimeo.com/",id:"/",src:"//player.vimeo.com/video/%id%?autoplay=1"},gmaps:{index:"//maps.google.",src:"%id%&output=embed"}}},proto:{initIframe:function(){b.types.push(P),w("BeforeChange",function(a,b,c){b!==c&&(b===P?R():c===P&&R(!0))}),w(h+"."+P,function(){R()})},getIframe:function(c,d){var e=c.src,f=b.st.iframe;a.each(f.patterns,function(){return e.indexOf(this.index)>-1?(this.id&&(e="string"==typeof this.id?e.substr(e.lastIndexOf(this.id)+this.id.length,e.length):this.id.call(this,e)),e=this.src.replace("%id%",e),!1):void 0});var g={};return f.srcAction&&(g[f.srcAction]=e),b._parseMarkup(d,g,c),b.updateStatus("ready"),d}}});var S=function(a){var c=b.items.length;return a>c-1?a-c:0>a?c+a:a},T=function(a,b,c){return a.replace(/%curr%/gi,b+1).replace(/%total%/gi,c)};a.magnificPopup.registerModule("gallery",{options:{enabled:!1,arrowMarkup:'',preload:[0,2],navigateByImgClick:!0,arrows:!0,tPrev:"Previous (Left arrow key)",tNext:"Next (Right arrow key)",tCounter:"%curr% of %total%"},proto:{initGallery:function(){var c=b.st.gallery,e=".mfp-gallery";return b.direction=!0,c&&c.enabled?(f+=" mfp-gallery",w(m+e,function(){c.navigateByImgClick&&b.wrap.on("click"+e,".mfp-img",function(){return b.items.length>1?(b.next(),!1):void 0}),d.on("keydown"+e,function(a){37===a.keyCode?b.prev():39===a.keyCode&&b.next()})}),w("UpdateStatus"+e,function(a,c){c.text&&(c.text=T(c.text,b.currItem.index,b.items.length))}),w(l+e,function(a,d,e,f){var g=b.items.length;e.counter=g>1?T(c.tCounter,f.index,g):""}),w("BuildControls"+e,function(){if(b.items.length>1&&c.arrows&&!b.arrowLeft){var d=c.arrowMarkup,e=b.arrowLeft=a(d.replace(/%title%/gi,c.tPrev).replace(/%dir%/gi,"left")).addClass(s),f=b.arrowRight=a(d.replace(/%title%/gi,c.tNext).replace(/%dir%/gi,"right")).addClass(s);e.click(function(){b.prev()}),f.click(function(){b.next()}),b.container.append(e.add(f))}}),w(n+e,function(){b._preloadTimeout&&clearTimeout(b._preloadTimeout),b._preloadTimeout=setTimeout(function(){b.preloadNearbyImages(),b._preloadTimeout=null},16)}),void w(h+e,function(){d.off(e),b.wrap.off("click"+e),b.arrowRight=b.arrowLeft=null})):!1},next:function(){b.direction=!0,b.index=S(b.index+1),b.updateItemHTML()},prev:function(){b.direction=!1,b.index=S(b.index-1),b.updateItemHTML()},goTo:function(a){b.direction=a>=b.index,b.index=a,b.updateItemHTML()},preloadNearbyImages:function(){var a,c=b.st.gallery.preload,d=Math.min(c[0],b.items.length),e=Math.min(c[1],b.items.length);for(a=1;a<=(b.direction?e:d);a++)b._preloadItem(b.index+a);for(a=1;a<=(b.direction?d:e);a++)b._preloadItem(b.index-a)},_preloadItem:function(c){if(c=S(c),!b.items[c].preloaded){var d=b.items[c];d.parsed||(d=b.parseEl(c)),y("LazyLoad",d),"image"===d.type&&(d.img=a('').on("load.mfploader",function(){d.hasSize=!0}).on("error.mfploader",function(){d.hasSize=!0,d.loadError=!0,y("LazyLoadError",d)}).attr("src",d.src)),d.preloaded=!0}}}});var U="retina";a.magnificPopup.registerModule(U,{options:{replaceSrc:function(a){return a.src.replace(/\.\w+$/,function(a){return"@2x"+a})},ratio:1},proto:{initRetina:function(){if(window.devicePixelRatio>1){var a=b.st.retina,c=a.ratio;c=isNaN(c)?c():c,c>1&&(w("ImageHasSize."+U,function(a,b){b.img.css({"max-width":b.img[0].naturalWidth/c,width:"100%"})}),w("ElementParse."+U,function(b,d){d.src=a.replaceSrc(d,c)}))}}}}),A()}); \ No newline at end of file diff --git a/app/assets/stylesheets/magnific-popup.scss b/app/assets/stylesheets/magnific-popup.scss new file mode 100644 index 0000000..d8d2d75 --- /dev/null +++ b/app/assets/stylesheets/magnific-popup.scss @@ -0,0 +1,351 @@ +/* Magnific Popup CSS */ +.mfp-bg { + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1042; + overflow: hidden; + position: fixed; + background: #0b0b0b; + opacity: 0.8; } + +.mfp-wrap { + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1043; + position: fixed; + outline: none !important; + -webkit-backface-visibility: hidden; } + +.mfp-container { + text-align: center; + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; + padding: 0 8px; + box-sizing: border-box; } + +.mfp-container:before { + content: ''; + display: inline-block; + height: 100%; + vertical-align: middle; } + +.mfp-align-top .mfp-container:before { + display: none; } + +.mfp-content { + position: relative; + display: inline-block; + vertical-align: middle; + margin: 0 auto; + text-align: left; + z-index: 1045; } + +.mfp-inline-holder .mfp-content, +.mfp-ajax-holder .mfp-content { + width: 100%; + cursor: auto; } + +.mfp-ajax-cur { + cursor: progress; } + +.mfp-zoom-out-cur, .mfp-zoom-out-cur .mfp-image-holder .mfp-close { + cursor: -moz-zoom-out; + cursor: -webkit-zoom-out; + cursor: zoom-out; } + +.mfp-zoom { + cursor: pointer; + cursor: -webkit-zoom-in; + cursor: -moz-zoom-in; + cursor: zoom-in; } + +.mfp-auto-cursor .mfp-content { + cursor: auto; } + +.mfp-close, +.mfp-arrow, +.mfp-preloader, +.mfp-counter { + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; } + +.mfp-loading.mfp-figure { + display: none; } + +.mfp-hide { + display: none !important; } + +.mfp-preloader { + color: #CCC; + position: absolute; + top: 50%; + width: auto; + text-align: center; + margin-top: -0.8em; + left: 8px; + right: 8px; + z-index: 1044; } +.mfp-preloader a { + color: #CCC; } +.mfp-preloader a:hover { + color: #FFF; } + +.mfp-s-ready .mfp-preloader { + display: none; } + +.mfp-s-error .mfp-content { + display: none; } + +button.mfp-close, +button.mfp-arrow { + overflow: visible; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; + display: block; + outline: none; + padding: 0; + z-index: 1046; + box-shadow: none; + touch-action: manipulation; } + +button::-moz-focus-inner { + padding: 0; + border: 0; } + +.mfp-close { + width: 44px; + height: 44px; + line-height: 44px; + position: absolute; + right: 0; + top: 0; + text-decoration: none; + text-align: center; + opacity: 0.65; + padding: 0 0 18px 10px; + color: #FFF; + font-style: normal; + font-size: 28px; + font-family: Arial, Baskerville, monospace; } +.mfp-close:hover, +.mfp-close:focus { + opacity: 1; } +.mfp-close:active { + top: 1px; } + +.mfp-close-btn-in .mfp-close { + color: #333; } + +.mfp-image-holder .mfp-close, +.mfp-iframe-holder .mfp-close { + color: #FFF; + right: -6px; + text-align: right; + padding-right: 6px; + width: 100%; } + +.mfp-counter { + position: absolute; + top: 0; + right: 0; + color: #CCC; + font-size: 12px; + line-height: 18px; + white-space: nowrap; } + +.mfp-arrow { + position: absolute; + opacity: 0.65; + margin: 0; + top: 50%; + margin-top: -55px; + padding: 0; + width: 90px; + height: 110px; + -webkit-tap-highlight-color: transparent; } +.mfp-arrow:active { + margin-top: -54px; } +.mfp-arrow:hover, +.mfp-arrow:focus { + opacity: 1; } +.mfp-arrow:before, +.mfp-arrow:after { + content: ''; + display: block; + width: 0; + height: 0; + position: absolute; + left: 0; + top: 0; + margin-top: 35px; + margin-left: 35px; + border: medium inset transparent; } +.mfp-arrow:after { + border-top-width: 13px; + border-bottom-width: 13px; + top: 8px; } +.mfp-arrow:before { + border-top-width: 21px; + border-bottom-width: 21px; + opacity: 0.7; } + +.mfp-arrow-left { + left: 0; } +.mfp-arrow-left:after { + border-right: 17px solid #FFF; + margin-left: 31px; } +.mfp-arrow-left:before { + margin-left: 25px; + border-right: 27px solid #3F3F3F; } + +.mfp-arrow-right { + right: 0; } +.mfp-arrow-right:after { + border-left: 17px solid #FFF; + margin-left: 39px; } +.mfp-arrow-right:before { + border-left: 27px solid #3F3F3F; } + +.mfp-iframe-holder { + padding-top: 40px; + padding-bottom: 40px; } +.mfp-iframe-holder .mfp-content { + line-height: 0; + width: 100%; + max-width: 900px; } +.mfp-iframe-holder .mfp-close { + top: -40px; } + +.mfp-iframe-scaler { + width: 100%; + height: 0; + overflow: hidden; + padding-top: 56.25%; } +.mfp-iframe-scaler iframe { + position: absolute; + display: block; + top: 0; + left: 0; + width: 100%; + height: 100%; + box-shadow: 0 0 8px rgba(0, 0, 0, 0.6); + background: #000; } + +/* Main image in popup */ +img.mfp-img { + width: auto; + max-width: 100%; + height: auto; + display: block; + line-height: 0; + box-sizing: border-box; + padding: 40px 0 40px; + margin: 0 auto; } + +/* The shadow behind the image */ +.mfp-figure { + line-height: 0; } +.mfp-figure:after { + content: ''; + position: absolute; + left: 0; + top: 40px; + bottom: 40px; + display: block; + right: 0; + width: auto; + height: auto; + z-index: -1; + box-shadow: 0 0 8px rgba(0, 0, 0, 0.6); + background: #444; } +.mfp-figure small { + color: #BDBDBD; + display: block; + font-size: 12px; + line-height: 14px; } +.mfp-figure figure { + margin: 0; } + +.mfp-bottom-bar { + margin-top: -36px; + position: absolute; + top: 100%; + left: 0; + width: 100%; + cursor: auto; } + +.mfp-title { + text-align: left; + line-height: 18px; + color: #F3F3F3; + word-wrap: break-word; + padding-right: 36px; } + +.mfp-image-holder .mfp-content { + max-width: 100%; } + +.mfp-gallery .mfp-image-holder .mfp-figure { + cursor: pointer; } + +@media screen and (max-width: 800px) and (orientation: landscape), screen and (max-height: 300px) { + /** + * Remove all paddings around the image on small screen + */ + .mfp-img-mobile .mfp-image-holder { + padding-left: 0; + padding-right: 0; } + .mfp-img-mobile img.mfp-img { + padding: 0; } + .mfp-img-mobile .mfp-figure:after { + top: 0; + bottom: 0; } + .mfp-img-mobile .mfp-figure small { + display: inline; + margin-left: 5px; } + .mfp-img-mobile .mfp-bottom-bar { + background: rgba(0, 0, 0, 0.6); + bottom: 0; + margin: 0; + top: auto; + padding: 3px 5px; + position: fixed; + box-sizing: border-box; } + .mfp-img-mobile .mfp-bottom-bar:empty { + padding: 0; } + .mfp-img-mobile .mfp-counter { + right: 5px; + top: 3px; } + .mfp-img-mobile .mfp-close { + top: 0; + right: 0; + width: 35px; + height: 35px; + line-height: 35px; + background: rgba(0, 0, 0, 0.6); + position: fixed; + text-align: center; + padding: 0; } } + +@media all and (max-width: 900px) { + .mfp-arrow { + -webkit-transform: scale(0.75); + transform: scale(0.75); } + .mfp-arrow-left { + -webkit-transform-origin: 0; + transform-origin: 0; } + .mfp-arrow-right { + -webkit-transform-origin: 100%; + transform-origin: 100%; } + .mfp-container { + padding-left: 6px; + padding-right: 6px; } } \ No newline at end of file diff --git a/app/assets/stylesheets/public.scss b/app/assets/stylesheets/public.scss index 2e2125c..81c621f 100755 --- a/app/assets/stylesheets/public.scss +++ b/app/assets/stylesheets/public.scss @@ -1,7 +1,7 @@ @import "bootstrap"; @import "fontawesome/font-awesome"; - +@import "magnific-popup"; @import "public/grid"; diff --git a/app/controllers/admin/wishes_controller.rb b/app/controllers/admin/wishes_controller.rb index 5ab8541..09eb024 100755 --- a/app/controllers/admin/wishes_controller.rb +++ b/app/controllers/admin/wishes_controller.rb @@ -17,6 +17,16 @@ class Admin::WishesController < ApplicationController redirect_to :back end + def download_devis + + @wish = Wish.find(params[:id]) + @need = @wish.need + + send_file @wish.devis.file.path, filename: "devis-need-#{@need.id}.#{@wish.devis.file.extension}" + end + + + end diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 81bf302..876757e 100755 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -4,6 +4,11 @@ class ApplicationController < ActionController::Base protect_from_forgery with: :exception + def check_enabled + if !@current_customer.account_validated? + redirect_to public_my_account_path + end + end def auth_customer diff --git a/app/controllers/public/accepted_offers_controller.rb b/app/controllers/public/accepted_offers_controller.rb index 61a7b74..0d38d7f 100755 --- a/app/controllers/public/accepted_offers_controller.rb +++ b/app/controllers/public/accepted_offers_controller.rb @@ -2,6 +2,7 @@ class Public::AcceptedOffersController < ApplicationController layout "public" before_filter :auth_customer + before_filter :check_enabled def download_devis @accepted_offer = AcceptedOffer.find(params[:id]) diff --git a/app/controllers/public/comments_controller.rb b/app/controllers/public/comments_controller.rb index 54745d5..182eaff 100755 --- a/app/controllers/public/comments_controller.rb +++ b/app/controllers/public/comments_controller.rb @@ -1,4 +1,7 @@ -class Public::CommentsController < ApplicationController +class Public::CommentsController < ApplicationController + + before_filter :auth_customer + before_filter :check_enabled def create @comment = Comment.new(params.require(:comment).permit(:website, :pseudo, :email, :comment, :commentable_id, :commentable_type)) diff --git a/app/controllers/public/documents_controller.rb b/app/controllers/public/documents_controller.rb index 2537aed..403fae0 100644 --- a/app/controllers/public/documents_controller.rb +++ b/app/controllers/public/documents_controller.rb @@ -3,6 +3,7 @@ class Public::DocumentsController < ApplicationController layout "public" before_filter :auth_customer + before_filter :check_enabled before_filter :check_owner def index diff --git a/app/controllers/public/menu_items_controller.rb b/app/controllers/public/menu_items_controller.rb index 037189e..898af02 100755 --- a/app/controllers/public/menu_items_controller.rb +++ b/app/controllers/public/menu_items_controller.rb @@ -10,8 +10,8 @@ class Public::MenuItemsController < ApplicationController def archive @menu_item= MenuItem.archived.find(params[:id]) end - - + + def show @no_search = true diff --git a/app/controllers/public/messages_controller.rb b/app/controllers/public/messages_controller.rb index 4cb0824..2216635 100755 --- a/app/controllers/public/messages_controller.rb +++ b/app/controllers/public/messages_controller.rb @@ -2,6 +2,7 @@ class Public::MessagesController < ApplicationController layout "public" before_filter :auth_customer + def index need = Need.find(params[:need_id]) end diff --git a/app/controllers/public/my_account_controller.rb b/app/controllers/public/my_account_controller.rb index 5a7c25b..a4f63a5 100755 --- a/app/controllers/public/my_account_controller.rb +++ b/app/controllers/public/my_account_controller.rb @@ -7,7 +7,7 @@ class Public::MyAccountController < ApplicationController def index @accepted_offers = current_customer.accepted_offers.order(created_at: :desc).page(params[:page_offers]).per(5) - @wishes = current_customer.needs.shared.page(params[:page_wishes]).per(5) + @wishes = current_customer.wishes.includes(:need).page(params[:page_wishes]).per(5) @needs = Kaminari.paginate_array(current_customer.owned_needs.order(created_at: :desc)) .page(params[:page_needs]) diff --git a/app/controllers/public/needs_controller.rb b/app/controllers/public/needs_controller.rb index 5ea521f..99d7751 100755 --- a/app/controllers/public/needs_controller.rb +++ b/app/controllers/public/needs_controller.rb @@ -3,6 +3,9 @@ class Public::NeedsController < ApplicationController layout "public" before_filter :auth_customer + before_filter :check_enabled + + before_filter :build_category_tree, only:[:index,:new,:create,:edit,:update] before_filter :check_owner, only: [:destroy,:edit,:update] @@ -120,6 +123,15 @@ class Public::NeedsController < ApplicationController end if @need.save + + @wish = Wish.new + @wish.customer = current_customer + @wish.need = @need + @wish.devis = @need.devis + @wish.note = @need.note + @wish.save + + flash[:notice] = "Votre besoin à été créé avec succès." redirect_to public_my_account_path else diff --git a/app/controllers/public/offers_controller.rb b/app/controllers/public/offers_controller.rb index b34f70b..00de577 100755 --- a/app/controllers/public/offers_controller.rb +++ b/app/controllers/public/offers_controller.rb @@ -1,7 +1,8 @@ class Public::OffersController < ApplicationController layout "public" - before_filter :auth_customer, :get_need, :check_interest, :get_offer + before_filter :auth_customer, :check_enabled, :get_need, :check_interest, :get_offer + def accept diff --git a/app/controllers/public/wishes_controller.rb b/app/controllers/public/wishes_controller.rb new file mode 100644 index 0000000..2928a57 --- /dev/null +++ b/app/controllers/public/wishes_controller.rb @@ -0,0 +1,98 @@ +class Public::WishesController < ApplicationController + layout "public" + + before_filter :auth_customer + before_filter :check_enabled + + def new + @wish = Wish.new + @need = Need.find(params[:need_id]) + @wish.need = @need + end + + def edit + @wish = Wish.find(params[:id]) + @need = @wish.need + end + + def create + @wish = Wish.new + @need = Need.find(params[:need_id]) + + if (!@need.customers.include?(current_customer)) + @wish.update_attributes(wishes_params) + @wish.customer = current_customer + + @wish.need = Need.find(params[:need_id]) + if @wish.save + admins = Admin.where.not(email: nil) + admins.each do |admin| + AdminMailer.customer_interested(admin, @need, current_customer).deliver + end + + flash[:success] = "Intérêt enregistré, merci pour votre participation" + redirect_to public_need_path(@need) + else + + render 'new' + end + + else + flash[:error] = "Vous êtes déjà intéressé par ce besoin" + redirect_to public_need_path(@need) + + + end + + + end + + def update + + @wish = current_customer.wishes.find(params[:id]) + @need = @wish.need + @wish.update_attributes(wishes_params) + if @wish.save + redirect_to public_need_path(@need) + else + render 'new' + end + end + + + def destroy + + + @wish = Wish.find(params[:id]) + @need = @wish.need + @need.customers.delete(current_customer) + + admins = Admin.where.not(email: nil) + admins.each do |admin| + AdminMailer.customer_disinterested(admin, @need, current_customer).deliver + end + flash[:success] = "Vous n'êtes plus intéressé par ce besoin" + redirect_to public_need_path(@need) + + + end + + def download_devis + + @wish = Wish.find(params[:id]) + @need = @wish.need + + if @wish.customer.id != current_customer.id + flash[:error] = "Vous n'êtes pas le propriétaire" + return redirect_to :back + end + + send_file @wish.devis.file.path, filename: "devis-need-#{@need.id}.#{@wish.devis.file.extension}" + end + + + def wishes_params + params.require(:wish).permit(:devis, :note, :need_id) + end + +end diff --git a/app/mailers/application_mailer.rb b/app/mailers/application_mailer.rb index da5235f..39b1e6a 100755 --- a/app/mailers/application_mailer.rb +++ b/app/mailers/application_mailer.rb @@ -1,4 +1,4 @@ class ApplicationMailer < ActionMailer::Base - default from: "\"Négos\" " + default from: "\"Négos\" " layout 'mailer' end diff --git a/app/mailers/customer_mailer.rb b/app/mailers/customer_mailer.rb index 62d7a43..e19f3ec 100755 --- a/app/mailers/customer_mailer.rb +++ b/app/mailers/customer_mailer.rb @@ -122,19 +122,19 @@ class CustomerMailer < ApplicationMailer def new_message(customer) @customer = customer - mail from: "Négos.com ", to: customer.email, :subject => "Vous avez un nouveau message privé" + mail from: "Négos.com ", to: customer.email, :subject => "Vous avez un nouveau message privé" end def password_reset(customer) @customer = customer - mail :to => @customer.email, :subject => "Reinitialisation du mot de passe.", :from => "Négos.com " + mail :to => @customer.email, :subject => "Reinitialisation du mot de passe.", :from => "Négos.com " end def new_commission(commission) @commission = commission if @commission.commission_type_id == 1 or @commission.commission_type_id == 2 or @commission.commission_type_id == 3 - mail from: "no-reply@negos.pro", to: @commission.customer.email, :subject => "Vous avez reçu une commission sur Négos.com !" do |format| + mail from: "contact@negos.pro", to: @commission.customer.email, :subject => "Vous avez reçu une commission sur Négos.com !" do |format| format.html { render layout: false } diff --git a/app/models/wish.rb b/app/models/wish.rb index 4939408..2b8d31d 100755 --- a/app/models/wish.rb +++ b/app/models/wish.rb @@ -2,5 +2,9 @@ class Wish < ActiveRecord::Base belongs_to :customer belongs_to :need + mount_uploader :devis + validates :devis, :presence => true + validates :need, :presence => true + validates :customer, :presence => true end diff --git a/app/uploaders/wish_devis_uploader.rb b/app/uploaders/wish_devis_uploader.rb new file mode 100644 index 0000000..16567b3 --- /dev/null +++ b/app/uploaders/wish_devis_uploader.rb @@ -0,0 +1,21 @@ +# encoding: utf-8 + +class WishDevisUploader < CarrierWave::Uploader::Base + + include Rails.application.routes.url_helpers + + + def filename + "devis.#{file.extension}" if original_filename.present? + end + + def store_dir + "#{Rails.root}/private_medias/wishes/#{model.id}/devis/" + end + + def extension_white_list + %w(pdf) + end + + +end diff --git a/app/views/admin/needs/_form.html.haml b/app/views/admin/needs/_form.html.haml index 54b67f7..82660b0 100755 --- a/app/views/admin/needs/_form.html.haml +++ b/app/views/admin/needs/_form.html.haml @@ -14,6 +14,4 @@ = f.input :note, :label => "Informations supplémentaires pour Négos", :rows => 5, :input_html => {:style => "height:100px;"} .actions - -if @need.devis? - = link_to ic(:download) + " Télécharger le devis attaché par l'émetteur", admin_need_download_devis_path(@need), class: "btn btn-default" = f.submit "Sauvegarder", :class => "btn btn-primary" diff --git a/app/views/admin/needs/_need_to_validate.html.haml b/app/views/admin/needs/_need_to_validate.html.haml index b891800..451842f 100755 --- a/app/views/admin/needs/_need_to_validate.html.haml +++ b/app/views/admin/needs/_need_to_validate.html.haml @@ -13,10 +13,10 @@ Administrateur %td Il y a #{time_ago_in_words( need.created_at)} - %td - -if need.devis? - =link_to ic(:download) + " Offre/Devis", admin_need_download_devis_path(need), class: "btn btn-primary btn-sm" - + %td{style: 'text-align:center' } + =link_to i(:"hand-paper-o") + " " + need.wishes.length.to_s, admin_need_wishes_path(need) +    + =link_to i(:"comment-o") + " " + need.messages.length.to_s, admin_need_messages_path(need) %td.actions{:style => "width:150px;text-align:right"} -if(need.created?) = link_to i(:remove), refuse_admin_need_path(need), title: "Refuser", :data => {:confirm => 'Voulez-vous vraiment refuser ce besoin ?'} diff --git a/app/views/admin/needs/index.html.haml b/app/views/admin/needs/index.html.haml index d4e81f7..42bb49c 100755 --- a/app/views/admin/needs/index.html.haml +++ b/app/views/admin/needs/index.html.haml @@ -24,8 +24,8 @@ Émetteur %th Créé - %th - Dévis/Offre + %th{style: 'text-align:center' } + Commentaires/Intérêts %th{:style => "width:100px"}   diff --git a/app/views/admin/wishes/_wish.html.haml b/app/views/admin/wishes/_wish.html.haml index f833c7e..d1c3174 100755 --- a/app/views/admin/wishes/_wish.html.haml +++ b/app/views/admin/wishes/_wish.html.haml @@ -4,5 +4,15 @@ =link_to wish.customer.organisation, edit_admin_customer_path(wish.customer) %td =wish.created_at + %td + -if wish.devis? + = link_to ic(:download) + " Télécharger devis", download_devis_admin_need_wish_path(wish.need, wish), class:"btn btn-primary btn-sm" + -else + Aucun devis + %td + -if wish.note? + =wish.note + -else + Aucune note %td.actions{:style => "width:150px;text-align:right"} = link_to i(:"remove"), [:admin, @need, wish], :data => {:confirm => "Voulez-vous vraiment supprimer l'intérêt de cet utilisateur pour ce besoin ?"}, :method => :delete diff --git a/app/views/admin/wishes/index.html.haml b/app/views/admin/wishes/index.html.haml index 27b105c..85aa056 100755 --- a/app/views/admin/wishes/index.html.haml +++ b/app/views/admin/wishes/index.html.haml @@ -9,6 +9,10 @@ Utilisateur %th Intéressé le + %th + Devis + %th + Informations supplémentaires %th{:style => "width:100px"}   diff --git a/app/views/layouts/admin.html.haml b/app/views/layouts/admin.html.haml index 62d0f42..84eeea1 100755 --- a/app/views/layouts/admin.html.haml +++ b/app/views/layouts/admin.html.haml @@ -38,8 +38,11 @@ - - %li= link_to "Clients", admin_customers_path + - customers_to_validate = Customer.where('account_validated IS NULL ').count + - if customers_to_validate > 0 + %li= link_to content_tag(:span,customers_to_validate , style:"background-color:#D9534F", class: 'badge') + " Clients", admin_customers_path + -else + %li= link_to "Clients", admin_customers_path - unvalidated_need_count = Need.where(state: 'created').count -if unvalidated_need_count > 0 %li= link_to content_tag(:span,unvalidated_need_count , style:"background-color:#D9534F", class: 'badge') + " Besoins", admin_needs_path diff --git a/app/views/layouts/public.html.haml b/app/views/layouts/public.html.haml index 18516df..b2fc178 100755 --- a/app/views/layouts/public.html.haml +++ b/app/views/layouts/public.html.haml @@ -57,3 +57,24 @@ #flashs= bootstrap_flash + :javascript + $(document).ready(function() { + + $('#negos-video').magnificPopup({ + items: { + src: 'http://www.youtube.com/watch?v=0uf7X-fcu1o' + }, + type:'iframe', + iframe: { + markup: '
'+'
'+''+'
', + patterns: { + youtube: { + index: 'youtube.com/', + id: 'v=', + src: '//www.youtube.com/embed/%id%?autoplay=1' + } + }, + srcAction: 'iframe_src', + } + }); + }); diff --git a/app/views/public/my_account/index.html.haml b/app/views/public/my_account/index.html.haml index 1c77496..3ec84c5 100755 --- a/app/views/public/my_account/index.html.haml +++ b/app/views/public/my_account/index.html.haml @@ -2,7 +2,7 @@ =#render :partial => "public/my_account/menu" - -if !current_customer.enabled + -if !current_customer.account_validated? .alert.alert-warning %h1 Vous devez valider votre adresse mail. %p Vous avez du recevoir un message pour valider votre adresse mail. Tant que vous n'aurez pas cliquer sur le lien présent sur ce mail votre compte ne sera pas activé. @@ -73,7 +73,7 @@ %p Remarque: Vous pouvez signaler/supprimer un intérêt pour un besoin uniquement quand celui-ci est en sondage. -if @wishes.length > 0 - =render "public/needs/wishes_index", wishes: @wishes + =render "public/wishes/index", wishes: @wishes .pagination= paginate @wishes , param_name: 'page_wishes' -else %p diff --git a/app/views/public/needs/_edit_form.html.haml b/app/views/public/needs/_edit_form.html.haml new file mode 100644 index 0000000..177f89a --- /dev/null +++ b/app/views/public/needs/_edit_form.html.haml @@ -0,0 +1,8 @@ += semantic_form_for [:public, @need] do |f| + =f.inputs do + = f.input :title, :label => "Titre de votre besoin" + = f.input :category, :as => :select, include_blank: "Toute catégorie", :collection => @tree.map{|c| [(c.level > 0 ? ('   ' * (c.level - 1)) + "|- ": "").html_safe + c.name, c.id]}, label: "Catégorie de besoin" + = f.input :description, :label => "Description", :rows => 5, :input_html => {:style => "height:100px;"} + + %br + =f.submit "Sauvegarder", :class => "btn btn-primary" diff --git a/app/views/public/needs/_form.html.haml b/app/views/public/needs/_form.html.haml index b841395..7b1cd43 100755 --- a/app/views/public/needs/_form.html.haml +++ b/app/views/public/needs/_form.html.haml @@ -1,11 +1,9 @@ = semantic_form_for [:public, @need] do |f| =f.inputs do = f.input :title, :label => "Titre de votre besoin" - = f.input :devis, type: :file, :label => "Devis/Offre (Fichier au format PDF)" - -if @need.devis? - = link_to ic(:download) + " Télécharger le devis actuel", public_need_download_devis_path(@need), class: "btn btn-primary" = f.input :category, :as => :select, include_blank: "Toute catégorie", :collection => @tree.map{|c| [(c.level > 0 ? ('   ' * (c.level - 1)) + "|- ": "").html_safe + c.name, c.id]}, label: "Catégorie de besoin" = f.input :description, :label => "Description", :rows => 5, :input_html => {:style => "height:100px;"} + = f.input :devis, type: :file, :label => "Devis/Offre (Fichier au format PDF)" = f.input :note, :label => "Informations supplémentaires (visibles uniquement par les administrateurs Négos)", :rows => 5, :input_html => {:style => "height:100px;"} %br diff --git a/app/views/public/needs/_need_item.html.haml b/app/views/public/needs/_need_item.html.haml index 3a4d724..b04a906 100755 --- a/app/views/public/needs/_need_item.html.haml +++ b/app/views/public/needs/_need_item.html.haml @@ -51,10 +51,11 @@ .item=i(:"comment-o") + " " + need.messages.length.to_s -if(need.verified?) - -if(need.customers.include?(current_customer)) - =link_to i(:"check") + " Intéressé", wish_public_need_path(need) , class: "btn btn-success pull-right" + - @wish = need.wishes.where(need_id: need.id, customer_id: current_customer.id).first + -if(@wish) + =link_to i(:"check") + " Intéressé", edit_public_need_wish_path(need, @wish) , :class => "btn btn-square btn-lg btn-success pull-right" -else - =link_to i(:"hand-paper-o") + " Ça m'intéresse", wish_public_need_path(need) , class: "btn btn-primary pull-right" + =link_to i(:"hand-paper-o") + " Ça m'intéresse !", new_public_need_wish_path(need) , :class => "btn btn-square btn-lg btn-primary pull-right" -elsif(need.negociating?) -if(need.customers.include?(current_customer)) =link_to "Négociation en cours...", public_need_path(need), class: "btn btn-warning pull-right" diff --git a/app/views/public/needs/_wish.html.haml b/app/views/public/needs/_wish.html.haml deleted file mode 100755 index 6f27220..0000000 --- a/app/views/public/needs/_wish.html.haml +++ /dev/null @@ -1,25 +0,0 @@ --if(wish.verified?) - -class_name="info" --elsif(wish.negociating?) - -class_name="warning" --elsif(wish.negociated?) - -class_name="success" --elsif(wish.failed?) - -class_name="danger" - -%tr{:id => wish.id, class: class_name} - %td - =link_to wish.title, public_need_path(wish) - %td - -if wish.category - = i(:"tag") + " " + wish.category.name - %td - =wish.human_state - %td{style: 'text-align:center' } - =i(:"hand-paper-o") + " " + wish.wishes.length.to_s - %td{style: 'text-align:center'} - =i(:"comment-o") + " " + wish.messages.length.to_s - %td.actions{:style => "width:150px;text-align:right"} - =link_to i(:"eye"), public_need_path(wish),title:"Voir la ficher du besoin", class: 'btn btn-primary btn-square' - -if wish.verified? - =link_to i(:"remove"), wish_public_need_path(wish),title:"Je ne suis plus intéressé", class: 'btn btn-danger btn-square' diff --git a/app/views/public/needs/edit.html.haml b/app/views/public/needs/edit.html.haml index 6fa3992..8806bb9 100755 --- a/app/views/public/needs/edit.html.haml +++ b/app/views/public/needs/edit.html.haml @@ -1,4 +1,4 @@ .center.padding.white %h2 Modification d'un besoin existant - =render :partial => "public/needs/form" + =render :partial => "public/needs/edit_form" diff --git a/app/views/public/needs/show.html.haml b/app/views/public/needs/show.html.haml index 1f06fbc..794891f 100755 --- a/app/views/public/needs/show.html.haml +++ b/app/views/public/needs/show.html.haml @@ -94,10 +94,11 @@ .item=i(:"hand-paper-o") + " Aucun utilisateur n'est intéressé par ce besoin" -if @need.verified? - -if(@need.customers.include?(current_customer)) - =link_to i(:"check") + " Intéressé", wish_public_need_path(@need) , :class => "btn btn-square btn-lg btn-success pull-right" + - @wish = @need.wishes.where(need_id: @need.id, customer_id: current_customer.id).first + -if(@wish) + =link_to i(:"check") + " Intéressé", edit_public_need_wish_path(@need, @wish) , :class => "btn btn-square btn-lg btn-success pull-right" -else - =link_to i(:"hand-paper-o") + " Ça m'intéresse !", wish_public_need_path(@need) , :class => "btn btn-square btn-lg btn-primary pull-right" + =link_to i(:"hand-paper-o") + " Ça m'intéresse !", new_public_need_wish_path(@need) , :class => "btn btn-square btn-lg btn-primary pull-right" -elsif @need.negociating? -elsif @need.negociated? diff --git a/app/views/public/shared/_menu.html.haml b/app/views/public/shared/_menu.html.haml index 0316d7e..e71d78e 100755 --- a/app/views/public/shared/_menu.html.haml +++ b/app/views/public/shared/_menu.html.haml @@ -3,8 +3,10 @@ -if current_customer %ul - - %li=link_to ic(:star)+" Besoins", public_needs_path, :class => "btn" + -if current_customer.account_validated? + %li=link_to ic(:"youtube-play")+" Négos, comment ça marche ?","", :class => "btn", id:"negos-video" + -if current_customer.account_validated? + %li=link_to ic(:star)+" Besoins", public_needs_path, :class => "btn" - unread_message = ContactMessage.where(contact_id: current_customer.id, read_by_customer: false).count %li=link_to ic(:comment)+" Nous contacter" + (unread_message > 0 ? " (#{unread_message})" : ""), public_contact_messages_path, :class => "btn" %li=link_to ic(:user)+" Mon compte", public_my_account_path, :class => "btn" diff --git a/app/views/public/wishes/_form.html.haml b/app/views/public/wishes/_form.html.haml new file mode 100644 index 0000000..fe52ea4 --- /dev/null +++ b/app/views/public/wishes/_form.html.haml @@ -0,0 +1,18 @@ += semantic_form_for [:public, @wish.need, @wish] do |f| + =f.inputs do + + -if @wish.devis? + = link_to ic(:download) + " Voir votre devis actuel", download_devis_public_need_wish_path(@need, @wish), class: "btn btn-primary" + %br + %br + -else + = f.input :devis, type: :file, :label => "Devis de votre offre actuelle (Fichier au format PDF)" + + = f.input :note, :label => "Informations supplémentaires (visibles uniquement par les administrateurs Négos)", :rows => 5, :input_html => {:style => "height:100px;"} + + %br + + .div.pull-right + =link_to ic(:"arrow-left") + " Revenir sur la page du besoin", public_need_path(@need),:class => "btn btn-default btn-square btn-lg " + + =f.submit " Valider ma prise d'intérêt", :class => "btn btn-success btn-square btn-lg " diff --git a/app/views/public/needs/_wishes_index.html.haml b/app/views/public/wishes/_index.html.haml similarity index 78% rename from app/views/public/needs/_wishes_index.html.haml rename to app/views/public/wishes/_index.html.haml index 5a558ba..02ea373 100755 --- a/app/views/public/needs/_wishes_index.html.haml +++ b/app/views/public/wishes/_index.html.haml @@ -1,3 +1,4 @@ + %table.table.public-table.table-striped %thead %tr @@ -15,4 +16,5 @@ %tbody - =render partial: "public/needs/wish", collection: @wishes, as: :wish + =render partial: "public/wishes/wish", collection: @wishes, as: :wish + diff --git a/app/views/public/wishes/_wish.html.haml b/app/views/public/wishes/_wish.html.haml new file mode 100755 index 0000000..de1c914 --- /dev/null +++ b/app/views/public/wishes/_wish.html.haml @@ -0,0 +1,26 @@ + +-if(wish.need.verified?) + -class_name="info" +-elsif(wish.need.negociating?) + -class_name="warning" +-elsif(wish.need.negociated?) + -class_name="success" +-elsif(wish.need.failed?) + -class_name="danger" + +%tr{:id => wish.need.id, class: class_name} + %td + =link_to wish.need.title, public_need_path(wish.need) + %td + -if wish.need.category + = i(:"tag") + " " + wish.need.category.name + %td + =wish.need.human_state + %td{style: 'text-align:center' } + =i(:"hand-paper-o") + " " + wish.need.wishes.length.to_s + %td{style: 'text-align:center'} + =i(:"comment-o") + " " + wish.need.messages.length.to_s + %td.actions{:style => "width:150px;text-align:right"} + =link_to i(:"eye"), public_need_path(wish.need),title:"Voir la fiche du besoin", class: 'btn btn-primary btn-square' + -if wish.need.verified? + =link_to i(:"edit"), edit_public_need_wish_path(wish.need, wish),title:"Modifier mon intérêt pour ce besoin", class: 'btn btn-primary btn-square' diff --git a/app/views/public/wishes/edit.html.haml b/app/views/public/wishes/edit.html.haml new file mode 100644 index 0000000..09812c3 --- /dev/null +++ b/app/views/public/wishes/edit.html.haml @@ -0,0 +1,17 @@ + +.center.padding.white + + %h2 + Modifier ma prise d'intérêt pour le besoin + =link_to @need.title, public_need_path(@need) + .alert.alert-success + %h2= ic(:check) + " Vous êtes intéressé par ce besoin" + Vous êtes actuellement intéressé par ce besoin. Vous pouvez supprimer votre intérêt pour ce besoin en cliquant sur + le bouton ci-dessous + %br + %br + =link_to ic(:"remove") + " Je ne suis plus intéressé par ce besoin", public_need_wish_path(@need, @wish), class: "btn btn-danger", method: :delete + + =render :partial => "public/wishes/form" + + diff --git a/app/views/public/wishes/new.html.haml b/app/views/public/wishes/new.html.haml new file mode 100644 index 0000000..00053c1 --- /dev/null +++ b/app/views/public/wishes/new.html.haml @@ -0,0 +1,15 @@ + +.center.padding.white + + %h2 + Je signal mon intérêt pour le besoin + =link_to @need.title, public_need_path(@need) + .alert.alert-info + %h2 Joindre mon devis + %p Si vous êtes intéressé par ce besoin, faites nous part de votre offre actuelle en nous fournissant un devis. + %p + Une fois ce formulaire validé, vous pourrez si besoin revenir sur cette page depuis l'onglet + %strong Mon Compte + pour faire des modifications. + + =render :partial => "public/wishes/form" diff --git a/config/routes.rb b/config/routes.rb index d775371..e205cb7 100755 --- a/config/routes.rb +++ b/config/routes.rb @@ -105,6 +105,11 @@ Rails.application.routes.draw do resources :needs do get :download_devis resources :messages + resources :wishes do + member do + get :download_devis + end + end resources :offers do member do get :accept @@ -268,7 +273,11 @@ Rails.application.routes.draw do resources :needs do get :download_devis resources :messages - resources :wishes + resources :wishes do + member do + get :download_devis + end + end resources :offers do end diff --git a/db/migrate/20160318165409_add_devis_and_note_to_wish.rb b/db/migrate/20160318165409_add_devis_and_note_to_wish.rb new file mode 100644 index 0000000..c95f3b5 --- /dev/null +++ b/db/migrate/20160318165409_add_devis_and_note_to_wish.rb @@ -0,0 +1,6 @@ +class AddDevisAndNoteToWish < ActiveRecord::Migration + def change + add_column :wishes, :note, :text + add_column :wishes, :devis, :string + end +end diff --git a/db/schema.rb b/db/schema.rb index 116608c..6ab1805 100755 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20160317170901) do +ActiveRecord::Schema.define(version: 20160318165409) do create_table "accepted_offers", force: :cascade do |t| t.datetime "created_at", null: false @@ -567,8 +567,10 @@ ActiveRecord::Schema.define(version: 20160317170901) do create_table "wishes", force: :cascade do |t| t.integer "customer_id", limit: 4 t.integer "need_id", limit: 4 - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.text "note", limit: 65535 + t.string "devis", limit: 255 end add_foreign_key "customer_newsgroups", "customers" diff --git a/public/uploads/devis-16.pdf b/public/uploads/devis-16.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a756e740de14bdf56b56fc85efdb1ecde43ede25 GIT binary patch literal 11431 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 ggfag2Ccg