diff --git a/.sass-cache/f6b9a0b1905a68d5dbb2139e95d49cba92f6fa93/(__TEMPLATE__)c b/.sass-cache/f6b9a0b1905a68d5dbb2139e95d49cba92f6fa93/(__TEMPLATE__)c index f14f694..e1c3ae1 100644 Binary files a/.sass-cache/f6b9a0b1905a68d5dbb2139e95d49cba92f6fa93/(__TEMPLATE__)c and b/.sass-cache/f6b9a0b1905a68d5dbb2139e95d49cba92f6fa93/(__TEMPLATE__)c differ diff --git a/app/controllers/admin/price_documents_controller.rb b/app/controllers/admin/price_documents_controller.rb index 0446561..4e02801 100644 --- a/app/controllers/admin/price_documents_controller.rb +++ b/app/controllers/admin/price_documents_controller.rb @@ -427,38 +427,39 @@ class Admin::PriceDocumentsController < ApplicationController end - def print - - - + def OLD_print @price_document = PriceDocument.find_by_token(params[:id]) @element = @price_document.ref_element doc_number = @price_document.d_number url = print_admin_price_document_path(:id => @price_document.token, :html => true) - - - - params[:inline] = true if !params[:html] # and !Rails.env.development? - @data_to_send = File.open(@price_document.generate_pdf).read - - - - - send_data @data_to_send, :filename =>"#{doc_number}.pdf" , :type => 'application/pdf',:disposition => (params[:inline] ? 'inline' : "attachment") #render :inline => "y" - else render :layout => false end - end - + + + def print + @price_document = PriceDocument.find_by_token(params[:id]) + @element = @price_document.ref_element + + doc_number = @price_document.d_number + url = print_admin_price_document_path(:id => @price_document.token, :html => true) + params[:inline] = true + if !params[:html] # and !Rails.env.development? + @data_to_send = File.open(@price_document.generate_pdf).read + send_data @data_to_send, :filename =>"#{doc_number}.pdf" , :type => 'application/pdf',:disposition => (params[:inline] ? 'inline' : "attachment") + #render :inline => "y" + else + render :layout => false + end + end def create_avoir diff --git a/app/models/price_document.rb b/app/models/price_document.rb index 9629fe2..d9568c0 100644 --- a/app/models/price_document.rb +++ b/app/models/price_document.rb @@ -585,50 +585,79 @@ class PriceDocument < ApplicationRecord end - def generate_pdf - - - - + def OLD_generate_pdf doc_number = self.d_number - url = print_admin_price_document_path(:id => self.token, :html => true) - + url = print_admin_price_document_path(:id => self.token, :html => true) #don't forget to copy line "include Rails.application.routes.url_helpers" @temp_file = "#{Rails.root}/pdf/price_documents/#{doc_number}_temp.pdf" @final_file = "#{Rails.root}/pdf/price_documents/#{doc_number}_temp2.pdf" @final_file2 = "#{Rails.root}/pdf/price_documents/#{doc_number}.pdf" - url = (Rails.env.development? ? "http://localhost:4000" : "http://mdmb.basiclabs.fr").to_s+url - puts url - pdf = ("pdf") - + url = (Rails.env.development? ? "http://localhost:3000" : "http://mdmb.basiclabs.fr").to_s+url + pdf = ("pdf2") node_file = @temp_file + puts "NODE IFLEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" + puts url + puts url + puts url + puts url + puts url + puts node_file + puts "NODE IFLEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" + + + + system("node #{pdf}.js #{Shellwords.escape(url)} #{Shellwords.escape(@temp_file)}") + require 'posix/spawn' + + ::POSIX::Spawn::Child.new 'pdftk', @temp_file, 'stamp', "#{Rails.root}/pdf_stamp/en-tete.pdf", 'output', @final_file + ::POSIX::Spawn::Child.new 'pdftk', @final_file,"#{Rails.root}/pdf_stamp/cgv.pdf", 'cat', 'output', @final_file2 #AJOUT CGV + + # File.rename(@temp_file, @final_file2) if File.exist?(@temp_file) + # File.delete(@temp_file) if File.exist?(@temp_file) + # File.delete(@final_file) if File.exist?(@final_file) + + return @final_file + + end + + + def generate_pdf + doc_number = self.d_number + url = print_admin_price_document_path(:id => self.token, :html => true) #don't forget to copy line "include Rails.application.routes.url_helpers" + + @temp_file = "#{Rails.root}/pdf/price_documents/#{doc_number}_temp.pdf" + @final_file = "#{Rails.root}/pdf/price_documents/#{doc_number}_temp2.pdf" + @final_file2 = "#{Rails.root}/pdf/price_documents/#{doc_number}.pdf" + + url = (Rails.env.development? ? "http://localhost:3000" : "http://mdmb.basiclabs.fr").to_s+url + pdf = ("pdf") + node_file = @temp_file + system("node #{pdf}.js #{Shellwords.escape(url)} #{Shellwords.escape(@temp_file)}") require 'posix/spawn' - ::POSIX::Spawn::Child.new 'pdftk', @temp_file, 'stamp', "#{Rails.root}/pdf_stamp/en-tete.pdf", 'output', @final_file - - - # ::POSIX::Spawn::Child.new 'pdftk', @final_file,"#{Rails.root}/pdf_stamp/cgv.pdf", 'cat', 'output', @final_file2 #AJOUT CGV + # if true + if self.label != "Bon de livraison" + #::POSIX::Spawn::Child.new 'pdftk', @final_file,"#{Rails.root}/pdf_stamp/cgv.pdf", 'cat', 'output', @final_file2 #AJOUT CGV + return @final_file2 + else + return @final_file + end # File.rename(@temp_file, @final_file2) - - #File.delete(@temp_file) if File.exist?(@temp_file) #File.delete(@final_file) if File.exist?(@final_file) - - return @final_file - - - end + + def create_avoir past_price_document = self diff --git a/app/views/admin/p_articles/_form.html.haml b/app/views/admin/p_articles/_form.html.haml index 6b380c1..36c987f 100644 --- a/app/views/admin/p_articles/_form.html.haml +++ b/app/views/admin/p_articles/_form.html.haml @@ -1,20 +1,19 @@ - if params[:controller] == "admin/p_articles" =semantic_form_for [:admin, @p_article], :remote => true do |f| - .content - =f.inputs do - -if params[:p_product_ref_id] - = f.input :p_product_ref, as: :select, collection: PProductRef.all.distinct.pluck(:cc_name, :id), :selected => f.object.p_product_ref , :label => f.object.label_for(:p_product_ref) - -else - = f.input :p_product_ref, as: :select, collection: PProductRef.all.distinct.pluck(:cc_name, :id), :label => f.object.label_for(:p_product_ref) - -if PGrade::ACTIVATED - = f.input :p_grade, as: :select, collection: PGrade.pluck(:grade, :id), :label => "Grade" - %h4 Numero de série : - .p_article_serial_nums_form - = f.semantic_fields_for :p_article_serial_nums do |form| - =render :partial => "admin/p_article_serial_nums/form", :locals => {:form => form} - %p= link_to_add_fields "Ajouter un numéro de série", f, :p_article_serial_nums, {:class => "btn btn-primary"} + =f.inputs do + -if params[:p_product_ref_id] + = f.input :p_product_ref, as: :select, collection: PProductRef.all.distinct.pluck(:cc_name, :id), :selected => f.object.p_product_ref , :label => f.object.label_for(:p_product_ref) + -else + = f.input :p_product_ref, as: :select, collection: PProductRef.all.distinct.pluck(:cc_name, :id), :label => f.object.label_for(:p_product_ref) + -if PGrade::ACTIVATED + = f.input :p_grade, as: :select, collection: PGrade.pluck(:grade, :id), :label => "Grade" + %h4 Numero de série : + .p_article_serial_nums_form + = f.semantic_fields_for :p_article_serial_nums do |form| + =render :partial => "admin/p_article_serial_nums/form", :locals => {:form => form} + %p= link_to_add_fields "Ajouter un numéro de série", f, :p_article_serial_nums, {:class => "btn btn-primary"} - .actions=f.submit "sauvegarder", :class => "btn btn-primary" + .actions=f.submit "sauvegarder", :class => "btn btn-primary" - elsif params[:controller] == "admin/price_lines" = form.inputs do -if params[:p_product_ref_id] diff --git a/app/views/admin/p_customer_sheets/show.html.haml b/app/views/admin/p_customer_sheets/show.html.haml index 8bab240..d664b6d 100644 --- a/app/views/admin/p_customer_sheets/show.html.haml +++ b/app/views/admin/p_customer_sheets/show.html.haml @@ -16,14 +16,11 @@ .qi_row - .qi_pannel.qi_plain.padding - - - + .qi_pannel.qi_plain.padding -if @bon_de_commande = @p_customer_sheet.price_documents.where(:cc_label => "Bon de commande").first -price_line_block = @bon_de_commande.price_line_block %h3 - Contenu du bon de commande + Contenu du bon de commande =@bon_de_commande.d_number =":" -else @@ -108,4 +105,5 @@ :javascript - $('.p_articles_lines').hide(); \ No newline at end of file + $('.p_articles_lines').hide(); + \ No newline at end of file diff --git a/app/views/admin/price_documents/print.html.haml b/app/views/admin/price_documents/print.html.haml index af7294a..349e5fc 100644 --- a/app/views/admin/price_documents/print.html.haml +++ b/app/views/admin/price_documents/print.html.haml @@ -1,99 +1,213 @@ %head - :scss - body{ - font-size:10px; - font-family:arial, sans-serif; - - .table{ - border-collapse:collapse; - font-size:10px; - font-family:arial, sans-serif; - - td,th{ - border:1px solid gray; - } - } - - .table{ - td{ - padding:2px 5px; - } - } - } - - - .clear{ - clear:both; - } - - .table{ - width:100%; - } - - td.numeraire{ - white-space: nowrap; - text-align:right; - } - - +:css + html { + -webkit-print-color-adjust: exact; + } + + body{ + font-family:arial, sans-serif; + } + + .font-13px { + font-size: 13px; + } + + .bordered { + border: 1px solid black; + border-collapse: collapse; + } + + .line-height-100 { + text-align: center; + height: 100px; + } + + .line-height-20 { + text-align: center; + height: 20px; + } + + .border-left { + border-left: 1px solid; + } + + .border-top { + border-top: 1px solid; + } + + .border-right { + border-right: 1px solid; + } + + .border-bottom { + border-bottom: 1px solid; + } + + .bg-grey { + background-color: rgb(239, 239, 239) + } + + table, tbody { + font-size: 13px; + } + + + + + + + -price_line_block = @price_document.price_line_block %body + + -if @price_document.label == "Bon de livraison" + -@bl = true + -particular_doc = price_line_block.particular_send + + + -else + -particular_doc = price_line_block.particular_bill - - %div{:style => "float:right;margin-top:4cm;font-size:13px;margin-bottom:0.5cm;padding-right:2cm;"} - - -if @price_document.label == "Bon de livraison" - -@bl = true - -particular_doc = price_line_block.particular_send - - - -else - -particular_doc = price_line_block.particular_bill - - - -if particular_doc.organisation? - %strong=particular_doc.organisation - -if particular_doc.com_name? - %br - =particular_doc.com_name - + + -if particular_doc.organisation? + %strong=particular_doc.organisation + -if particular_doc.com_name? %br - -if particular_doc.firstname? or particular_doc.name? - =particular_doc.civilite - - =particular_doc.firstname + =particular_doc.com_name + + %br + -if particular_doc.firstname? or particular_doc.name? + =particular_doc.civilite + + =particular_doc.firstname - =particular_doc.name - %br - - =particular_doc.address_2 - - -if particular_doc.address_3? - %br - =particular_doc.address_3 + =particular_doc.name %br - =particular_doc.cp - =particular_doc.city + =particular_doc.address_2 + + -if particular_doc.address_3? %br - =particular_doc.country + =particular_doc.address_3 + %br + =particular_doc.cp + + =particular_doc.city + %br + =particular_doc.country - #top_left{:style => "width:230px;text-align:center;"} - =image_tag "https://mdmb.basiclabs.fr/logo-mdmb.png", :style => "width:100px;display:block;margin:auto;" - .address - %strong MAISON DES METIERS DE BOUCHE - %br - 20 chemin des Posés - %br - 74330 POISY + + %table + %thead + %tr + %th{:style => "width: 25%"} + %th{:style => "width: 75%"} + %tbody + %tr + %td + =image_tag "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOEAAADhCAMAAAAJbSJIAAABIFBMVEUAlecBk+gAlOgAlOYBk+b///8AlOT///3///z///oCkugAjN8AkOb8//8AleQAkeUAitoAjOMAkeoAjdoAitYAiNkAleLc9fsAjujm+PdKq971//9qt+QAktwAh9UAkd+JxeP///Wt3erH6u4AjtLZ9vqQzOYwm9kvndRZrtttvuHH6/aj2+vk9/cvpNSk2ua25fAWm99+wtp7utxMsdgunM+99ftpvOKi5OyYyeKL0erQ+Ped3OwAj8xEps8Aic9FquCy3O+QxdUflMq63udyr9Gg1u0AheJtvNd9usyJwdtGpsdlr8nn9vjC3d3Q5+4ulsKV1+RpxuFJuudZwOcAh7g+p+Q9td941OdXtsyGz9hUpbuB0fOM2u9+1eF+0tK2JZYSAAASfklEQVR4nO2aC3/aRpfGdRndRncJxEUWso2EJLAxwhBSHMCJE4cmThuwX7+Ot+5+/2+xZwS+xnHSdvtmm50nv8QBpJn5z5k5zxkZhqGioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi+n8o7nsP4G+TJ65+8pjlMOb+yXocUHQ4j/wwOAOuYb/3IP+SHsEzkMpFASb/ZcOZrZroew/yL+kzPh5Hg/Hw2YglL6znv21sbqSh872H+Rf0EJAzh01FmMb7JIac1ftpR1D8cYljvvdA/7QebkAxiRX/YLqOYfBicxzXdD9z/rnZ5mEODXaUWjZBUeCRj5wAhe60prTU7z3OP697KxRelmKhZcFuFEUeBDkGO3ZP2P6BCN1YyByyWgtCEIvtnrSt/nMd4wEhH1SEqXaP0PmBCIGRD2JhahoMfyMWq9s/ECHzOSHnhNvCD0SIIiBk7xHiv0T4980M+41NPzT8fPch4cMYsmvde/Xgs5u3WIzxg0vv3vrFNh+5At9Dghfs7TUPu/0aIZQzt4Q8tnZuCBFmGatM1LBUxzMwVyo1Go1SqaTxjGNws0aj3CB/ZyWX87CGSlGeuwHLcKxbXEYuLwUM8jAjlkrhehC8VTRjWaEDqYC1GiWv2DKlmevwjIERXNEIkqjkOg6HONHjgkbZKMYrlhqWwa4aJiq7YOToCUI2KQjRLSC6SwiTJbZj0G7cac2qBudsxhVQ3GvNxJBRn1du9ELlAi3t7fq15tx1OPV4/X5ciQ95jsE4ieO+SZplObVH3o4rvREhKvV2n6UwML4e716pPGd6Tnm4E9dqtcpx2mB5kWPs+UFngnmGMUcHu5umPS5aBsFIQpZ/KoaPEDp3CTkDbwqCJOmCpOwOWb7aUmRZhhdKnDq824SPCgnKa6uq7fuSIMmK0psY1kvykVx8Vg+hNfudJBxEUAwicNzO6i5F6IkcZ8VbtRSKRjOThT3XYBkcHfuKDn1AW8eRA4Or9iXlhQWDN9tbQquq7ay7hfYrFst8lZC9S8g792OobUqS/6FW82WlOcHVlqT7MLuKojRDz2oKMnwE+lDbtswNHy6Nd3VFOA7VY3gXRkkuPjSh21JFlvSsKHex2pF0cpeuS3suY3eUWooIoQ4dB5yY9hRB0Hd3az5ANiewA82+LvlTcs1IElq2+UKQ/NpKHRU/SWikNaHL3t2H92OIsAYxfHWUJlms+yMTYqj/fDRM3seKnplqU9CHSaE0cYKOrvQ+5keb/laty+VpevRa19/AZ0iDac4UXZZ7ZDgYlzuC/j7Jk74v+RFb7Sg+iSEihCFEsAdrZjvLg7y+7UtyL+KxuilB2wFjmG1JaqkwQunN0arjRMPsU4R8AoT4bqJBjnt3lQKhJPSrIlPe1+VjFQileRVX1XeKdGyZsEqHooMQx/KheeRLtQmkhrevJekdqQTVHcU/NE1MhuD2YMnp8sQReUIo+UMN86VtmKew3Lwl3HOxBl34cxsbJutZbQhjywZCWZdhgpmwLRSEip+ZCCETxD5NiIBw+oDQekAoCP2Q56p1RXppOxDDuemJ5NW2RWKYGB7cZYgMOpSUppt7QVjfbGWIway2o8h1VOQBnPry7ktdOLY9DrMqRG2IGMP+SdJHfPluDF1jovt+2yZnHV4M7bmu1BJHhUHoUhwxaE0oyBnZWVBqooeO8QhhF91zC0fduXO2IIRS38amOdelHXMdQwOdSMKOCjFUEoeYIDKRl/hKbSJ6TMA4Dswrz6svJb1ODiyIV4915TiFIEc85PaCyeRYa1uQMiCUa6nDYo0QWnxfgExVzJrBIxTBnmyp2qYOhPI4tK9XqTJwIH68iXgWoa8SQjK/Tyjt3CNUXk3ypFvRt4p9KP88SdKNii7MVdQU/GG+ksjCYJT4XdcMPZbxEHRs7yhAKPIM7+SxvJWWerLersK4rY5Ue58k0agm+0emCoRTaCF6A6vUUnuCsB+KKyExHMlCT7Uhhr8oSi2qFoQu5NKTHDYy6RjM8yk/fIQQq3vC3v0Y+nH8wd9SYJUAoVA72K0pW1txhFBTV3aJce3W4p2QzXxFVvxmKw08qJJuCQ2+ug+BUYORD+uYLwiVXZCuK7Dx7FhQauRlbQv2Yaki+CleAfKIMSHwcZkQvttW5OPy6DrTFHeAeuq3rNKvEELSl2VJqB0iQqiAUemyEA/NEAj1LQkMUlbk1zbj1mNwP2mrNi5B9XFLyHtuUxGyqlOKZX9q8nyjA3YngM9ComQDuwLOCM4GzULHsw8CeMeakDdw4gsF4db+0BeUdCSvCHXwHh2aECoWvv+A9zFClhFvARFyt2GL4VtCWSC+E+8cmSJxfOEX6OnX9sz0PJXEcO1Le67DqqWTHpiYLBxbRQxfrghN8VCQ/Z82W5u/QpRCViwTP4T5b85nmOfUiq6v2pDkPbcRK353TQib2hvqesU2IYb7b1uC0vlZKQhlfffGD5kn/fARQg4Ij03uLuG7crlk2STSZB+eQIrszLAYAKHgH1kqqVstVTPh9My50eAlZJyuydwSQsoBb5eVLYiTtHuESaapfYR7yqbBEUKpdlS2rEbdV/ZMuyfIbXsdQ4PXNhS5tyK0J7Hg/6ILhVvoGSl7LatsiQ8eCz70w/RRwoXJ3BLq0qbmGQYKAoasUqk9iaWtY8vzjMItintDHg4othoGkFcbrxWlf5eQi3xSYAm6Ar6t9F0O9iH4A/gZ1PIGp8aQSznG4DNF2lOrfUHulPjrGM46JJWvCLW2Tkq1tVuIxrWeJoSqresYd97hEJyeFvf8UOnbngjLjuGLTLNv131BHxgMiaGehmQTM8jw8t82R5bBhEwffM8R1/sQAGEXyZ39+f683X4l+3FJVDuC38XFaDgGCJWiLmXrUMSpzsSXlLZqGCIPXl7dV3Q/wYgQatg9IFNUrFIhK37TAi14X4khEL7HMFjDIzLgB9P4VVqEd/YhOL5aJDZEMo2s7zuNliDFEyyCW8hDh4XbQpNlc7C7f5mmY29LyqZjrAlNxM1iyR/YISlAJhV4yyGEw/XjPYzUysrxSV26Z3PapuL7+zYjsoxRhlp+q+USx4eFhJypD0mNEOpQCxVj4j2PvV96PyTMY2Fcrprajap2WlNaIfMlQgkImaipSL2SCYT6NE/SNAVnMoLmltJJo6SlQ773rnMp4sKRInUi1oPWWKcPN751nyLkSh1Z1l9neTTJtiFlNicGJjXNpsZjmLz1PlTepOu6VMRPEhpRLGy9HG3catSKJX2jip4iNLQhnAvmrgm51F9rO7TBD7fgGAIp/Njlrlcpz5V6sHdDDxa6yJhHu4qfWE8RwrrqCAqk190PMmzc5iTg14SI05J4a0143W/HhorqCUIv3CZeJBB3ev3KJx4lKPJucHOqFPmWrPRXNYbBi0AozOFYHvbBJ6ZuU9aLzS/IymvVcPs+3A4Hg52AIQev6ktFOgxgaZFiDTYWacI63lJapPJOzXViQ9f7kMskcHwGCqJoxycDglb94wjB3Npgw/s2LAurD4ShtQeuTI6H4MMV+ytnfO6ocGlo8MOsTE6tsJX9zPXWl7Nw5mw2B+G1A5tzeMUxHmvtNJtXs0XzRmOTR8FwuwZFTbskGgwQ2uPms3PPWsKHKr/Ojlr3WfM5uS/hVoSQkV80ewlJOvVnzX7IsA6ultKdGOIT76Q2R+YFQbcjFRYRGz1vtgP34rZfKE6e9EPPq06OD8A4ob3siLRaq213Q+P6mRniHGxZIbd2YJ4LSrOATLNXKgUq61oq/AG5M4vjIFNZDbVcclmPAMJZvmE5iA3h0usGRNgXbuSp5ZmxdicD2lRdngwsmJVLcKcXcAzrlhtuoxSKxcwEOCzPYD0DIRvNQsy4jYZVPKaxGjfB+AIhJFHHKuWQLY5+0qUK1NRp5JqG5oCdrc5dMALMsWtAkwlYFoFNAUHxK1WDvU5ZmBc5suU9D7YrLA4MiAbLitCAhxjvmlAkv2wGc+XIwWf1aIGDG4txeXAgAf9mRQxWQdjA6ggh7/EGB6sCtjYPHRocHIVhW6/M0DOerkvXHshqTnVfEiplLBYDJ+sTI/JYan0bWU9kSJ+JPOa7/44oXj8ILB72rd9dR4wsi5vgYY65aZK8U8wUYh7pBUHv1/817z5yWTX5dULyZAEIpbjBFuaPMColw8C+3cKEkFS4j/X+cDAcYtji4F084yyGxt8QMjeEBJ/09YDw0Xm8+x7m/wwhWhE214SGmT47iOPNyDH4G0Jes02EtIedg40/GA2cjlSePNwy4VRLajOkcZ/HENxBtTFiODABaISQaaaG7hB+1tX126sF9YdjSEqrisWSlY+MJG7NGsO4X72u+WA52uPxwAxOTaglNSaEaYWuTD7IznMzND1k8p6NicOxwaA1rmvdJD/V8roohtXqmaqxjAbLS2NNxwx5MmFiuDwe55Zjj2CG6udmGPKZW8dVEa08BNttFRgdNmSxo2mcajoqy0NBchqIHB8wIpz5imu/mVBbE5IYaK29f+10sjS2bu9n3cVkHLWXYX3jLFKzjWyYJfV2lr1I8/Nl4s3buXeWOIQQhe031eFVN18GyzO3PjqLFqNT7WiUBaejgZZvnFfJQkNOdBUFpxvpYnQWzOtp+7D7fPSidHjmFTsCscmzNKy3k2rWzpNRPTitJ6NAHGX2v08H+elZeH4WmPjPEvJ2pz2StpqNg+HtlzJYdW+8bJ9M3x23pxeD5fTZz4tP7e7z94vBycXwYvBietH/NNDI8sPOaeYuji5P2svpyZveYLTcy+bzRX2Z9abL6dXHy2Fx4PaqV7OLwWBvMZ9ezLPxx8vu1XCczd8vLFLp8O7yv8bnl93T9jxLrz72P10OLk6yq/ry/fjFoH9y0l+c1Fdr9Q8S4iKGaq9/qAsvG7vJnRhai8ujnVfjfiu0F/3o7fhT+lukzofzweW5Pe9vvL36uDgNyfwb4sZg2Bwv5vu98Xh/Yc+ufi/n/z228/7YPr/sjV/VtSLT2FezsV2+fBXY45/nvfHicBnNW4sxqQ6AMFiMns9T8+2VVQ2ewQbpX3y8GIztdD5ezHqtcX+6GBab4o8RxhbnkXkxs3gybc82D8rGHcKL6GLa75+9GC+X3Yv5s0/n3av58+Fy8H7cvpqO7KvB5dImSYkLTwfm75/g4vnyYtjpj9//Pksulv3fpxfV8/nFp9+jwog4dDVrL/sLsjTmw/H8Kl/m7fRi3iYZRmSmZ29Plxfzs+xiOR3Px92LxbzfX86vkvG4MVr2s/ZlBn77EO9bCVGwc7Cf7RwMtTszxCZqLibn5Ytutxomh1Eukn+9PPAmh1aQ43RyGOCC0MgDFHSjaq6mefnyKLETMQzM85xPjCAPDqOwqGcYnBj8MMmDNHXzQJ2GXs7nmneIikrAyb1AS4LuBCVp6B4GTJKH52F4GIR5ztvD1A27AYf/MGFlTSg61rzXHCcaf6cJFjaYqGniYZUJDBGSnIj5KkPMHU4NJoYkE3rkcpF8DYlzTOQF8LZ3+NYT4QTJBp7jODzUOgYYPenEILWMSLwzxHCaN6tQE/IeyxsFoWgyOVQvDBSAUOmJcA0UQgwj8owD/xNZqAO9x39n+kVCcAsptlCRaXiP0VQthPEQc7om9CA8GFK3hxmORMEDNEh8DAzZ06CYQwBAYgjTokFhU5zfGd4JsOlATsBQX8HG8QwGo1UMGcQYxR+GFAYiyf1AA1UFeBM0bmD4i7AHZQe0A3SGSAoCJ+BgKqGUEw1y6bcSrh0/dlfVBYwyOoqiIERFMXO/BfazOu1W934pfE/8I7q2bdLBI3XMo7r94EvfL/wKIVPUJMgJ4JhxkIv830p4zfkfJKxADElNw3D5B8g7QMj+/YT/mRjC/tHakGnKsPvhlecksaTEwarFLw/7D+hrhN96x9dn88uE+7JSKZPUJTKQPSY1peL9YISZr/gndtW2VVu17ERROtaPRchOYkXwX29vv9wGvaxs6fsmL/5IhLARfUVYf7dCEBTleEa+z/cjEbJu1ovJEylf92txs+0yxg9GyDGmW5rNIhD51/OKp0c/EiFjGAwp0chDMo48I7pu8cchZO59YeG2RUpICf/PED6u/w06SkgJKSElpISUkBJSQkpICSkhJaSElJASUkJKSAkpISWkhJSQElJCSkgJKSElpISUkBJSQkpICSkhJaSElJASUkJKSAkpISWkhJSQElJCSkgJKSElpISUkBJSQkpICSkhJaSElJASUkJKSAkpISWkhJTw+xP+D+whwke+UwSRAAAAAElFTkSuQmCC", :style => "width:200px;display:block;margin:auto;" + %td{:style => "padding-left: 35px"} + %strong{style: "font-size: 20px;"} S.A.S PRESTAPHONE + %p{style: "line-height: 3px;"} PONT DE BEAUVOISIN + %p{style: "line-height: 3px;"} Avenue Jean Jaures 73330 PONT DE BEAUVOISIN + %p{style: "line-height: 3px;"} 74330 POISY + %p{style: "line-height: 20px;"} TEL :0981251293 + + + %table + %thead + %tr + %th{:style => "width: 15%"} + %th{:style => "width: 50%"} + %th{:style => "width: 25%"} + %tbody + %tr + %td + %td + %td + %strong{style: "line-height: 70px;"} + FACTURE + =@price_document.d_number + %tr + %td{style: "line-height: 3px;"} Date : + %td{style: "line-height: 3px;"} + =l @price_document.date, :format => :date + %td + %p{style: "line-height: 3px;"} Josef Falser + %p{style: "line-height: 3px;"} zona produttiva Bodner 2 + %p{style: "line-height: 3px;"} 39053 Prato Isarco, IT + + + %table{style: "margin-top: 40px"} + %thead + %tr + %th.border-left.border-top{:style => "width: 5%"} + %th.border-left.border-top{:style => "width: 20%"} DESIGNATION + %th.border-left.border-top{:style => "width: 45%"} DESCRIPTION + %th.border-left.border-top{:style => "width: 15%"} PRIX UNITAIRE + %th.border-left.border-top.border-right{:style => "width: 15%"} TOTAL + %tbody + %tr.line-height-100 + %td.border-left.border-top 1 + %td.border-left.border-top SMARTPHONE RECONDITIONNE + %td.border-left.border-top Samsung Galaxy Xcover 4 | SIM unique | schwarz + %td.border-left.border-top 147,00 € + %td.border-left.border-top.border-right 147,00 € + %tr.line-height-100 + %td.border-left.border-top + %td.border-left.border-top + %td.border-left.border-top IMEI : Non renseigne + %td.border-left.border-top + %td.border-left.border-top.border-right + %tr.line-height-20 + %td.border-top + %td.border-top + %td.border-top + %td.border-left.border-top Total HT + %td.border-top.border-left.border-right.bg-grey + %strong 147,00 € + %tr.line-height-20 + %td + %td + %td + %td.border-left Taux T.V.A. + %td.border-left.border-right.bg-grey + %strong TVA/MARGE + %tr.line-height-20 + %td + %td + %td + %td.border-left.border-bottom + %strong Total TTC + %td.border-left.border-right.border-bottom.bg-grey + %strong 147,00 € + .clear + %br + %br + %br + %br + %br + %br + %br + %br + %br + %br + %br + %br + %br + %br + %br + %br + %br + %br diff --git a/app/views/admin/price_line_blocks/_form.html.haml b/app/views/admin/price_line_blocks/_form.html.haml index d069561..62518b3 100644 --- a/app/views/admin/price_line_blocks/_form.html.haml +++ b/app/views/admin/price_line_blocks/_form.html.haml @@ -32,14 +32,6 @@ =render :partial => "admin/particulars/form", :locals => {:form => form_particular_bill} =form_particular_bill.hidden_field :owner_id =form_particular_bill.hidden_field :owner_type - - - - - - - - -if current_admin.has_permission?("customer-sheets-bl") =# f.input :bl_comment, :label => "Commentaire à mettre sur le BL :", :input_html => {:style => "min-height:50px;height:50px;"} @@ -102,8 +94,5 @@ :javascript $('.p_product_ref_select').select2(); $('.add_lines').click(function() { - $('.p_product_ref_select').last().select2({ - //theme: "bootstrap" - }); - //$('.p_product_ref_select').last().removeClass('form-control'); - }) \ No newline at end of file + $('.p_product_ref_select').last().select2(}); + }); \ No newline at end of file diff --git a/app/views/admin/price_line_blocks/_form_facture_achat.html.haml b/app/views/admin/price_line_blocks/_form_facture_achat.html.haml index d71d68c..71a8487 100644 --- a/app/views/admin/price_line_blocks/_form_facture_achat.html.haml +++ b/app/views/admin/price_line_blocks/_form_facture_achat.html.haml @@ -61,8 +61,9 @@ .price_lines_form =f.semantic_fields_for :price_lines do |f| - =render :partial => "admin/price_lines/form_bon_de_reception_achat", :locals => {:form => f} - + -# =render :partial => "admin/price_lines/form_bon_de_reception_achat", :locals => {:form => f} + =render :partial => "admin/price_lines/form", :locals => {:form => f} + %p= link_to_add_fields "Ajouter une ligne", f, :price_lines, {:class => "btn btn-primary add_lines"} @@ -105,9 +106,7 @@ = f.input :ct_payment_month_end, :label => "Fin de mois ?" :javascript + $('.p_product_ref_select').select2(); $('.add_lines').click(function() { - $('.p_product_ref_select').last().select2({ - //theme: "bootstrap" - }); - //$('.p_product_ref_select').last().removeClass('form-control'); - }) + $('.p_product_ref_select').last().select2(); + }); diff --git a/app/views/admin/price_line_p_articles/_form.html.haml b/app/views/admin/price_line_p_articles/_form.html.haml index b58b1ec..2dcf600 100644 --- a/app/views/admin/price_line_p_articles/_form.html.haml +++ b/app/views/admin/price_line_p_articles/_form.html.haml @@ -1,7 +1 @@ = form.input :p_article_id, as: :select, collection: PArticle.joins(:p_product_ref).where(p_product_ref: @price_line.p_product_ref).map{|p_article| [p_article.serialized_name, p_article.id]}, label: "Article(s) associé(s)", input_html: {class:"p_article_select"} - -:javascript - $('.p_article_select').select2({ - //theme: "bootstrap" - }); - //$('.p_article_select').removeClass('form-control'); diff --git a/app/views/admin/price_lines/_add_p_article_form.html.haml b/app/views/admin/price_lines/_add_p_article_form.html.haml index 6367aa5..aed4cdb 100644 --- a/app/views/admin/price_lines/_add_p_article_form.html.haml +++ b/app/views/admin/price_lines/_add_p_article_form.html.haml @@ -6,4 +6,4 @@ = f.semantic_fields_for :p_articles do |form| =render :partial => "admin/p_articles/form", :locals => {:form => form, @price_line => f.object} %p= link_to_add_fields "Ajouter un article", f, :p_articles, {:class => "btn btn-primary"} if f.object.p_articles.count < f.object.qte - .actions=f.submit "Sauvegarder", :class => "btn btn-primary" + =render :partial => "qi/actions", :locals => {:f => f} diff --git a/app/views/admin/price_lines/_add_price_line_p_article_form.html.haml b/app/views/admin/price_lines/_add_price_line_p_article_form.html.haml index d410809..95fe240 100644 --- a/app/views/admin/price_lines/_add_price_line_p_article_form.html.haml +++ b/app/views/admin/price_lines/_add_price_line_p_article_form.html.haml @@ -1,8 +1,17 @@ .mx-2.my-2 =semantic_form_for [:admin, @price_line], :remote => true do |f| - =f.inputs do - .price_line_p_articles_form.col-3 - = f.semantic_fields_for :price_line_p_articles do |form| - = render "admin/price_line_p_articles/form", form: form, price_line: @price_line - %p= link_to_add_fields "Ajouter un article", f, :price_line_p_articles, {:class => "btn btn-primary"} if @price_line.p_articles.count < @price_line.qte - =render :partial => "qi/actions", :locals => {:f => f} + .content + =f.inputs do + .price_line_p_articles_form + = f.semantic_fields_for :price_line_p_articles do |form| + = render "admin/price_line_p_articles/form", form: form, price_line: @price_line + %p= link_to_add_fields "Ajouter un article", f, :price_line_p_articles, {:class => "btn btn-primary add_price_line_p_article"} if @price_line.p_articles.count < @price_line.qte + =render :partial => "qi/actions", :locals => {:f => f} + + + +:javascript + $('.p_article_select').select2(); + $('.add_price_line_p_article').click(function() { + $('.p_article_select').last().select2(); + }); diff --git a/pdf.js b/pdf.js index 9ecda95..3e5666b 100644 --- a/pdf.js +++ b/pdf.js @@ -8,16 +8,12 @@ const createPdf = async() => { browser = await puppeteer.launch({args: ['--no-sandbox', '--disable-setuid-sandbox']}); const page = await browser.newPage(); //await page.setViewport({width: 794, height: 1122, deviceScaleFactor: 1}); - await page._emulationManager._client.send( - 'Emulation.setDefaultBackgroundColorOverride', - { color: { r: 0, g: 0, b: 0, a: 0 } } - ); await page.goto(process.argv[2], {timeout: 3000, waitUntil: 'networkidle2'}); await page.waitFor(250); await page.pdf({ path: process.argv[3], format: 'A4', - margin: { top: "0cm", right: "0cm", bottom: "0cm", left: "0cm" }, + margin: { top: "0.5cm", right: "1cm", bottom: "4.2cm", left: "1cm" }, printBackground: false }); } catch (err) { diff --git a/pdf3.js b/pdf3.js new file mode 100644 index 0000000..9ecda95 --- /dev/null +++ b/pdf3.js @@ -0,0 +1,32 @@ +'use strict'; + +const puppeteer = require('puppeteer'); + +const createPdf = async() => { + let browser; + try { + browser = await puppeteer.launch({args: ['--no-sandbox', '--disable-setuid-sandbox']}); + const page = await browser.newPage(); + //await page.setViewport({width: 794, height: 1122, deviceScaleFactor: 1}); + await page._emulationManager._client.send( + 'Emulation.setDefaultBackgroundColorOverride', + { color: { r: 0, g: 0, b: 0, a: 0 } } + ); + await page.goto(process.argv[2], {timeout: 3000, waitUntil: 'networkidle2'}); + await page.waitFor(250); + await page.pdf({ + path: process.argv[3], + format: 'A4', + margin: { top: "0cm", right: "0cm", bottom: "0cm", left: "0cm" }, + printBackground: false + }); + } catch (err) { + console.log(err.message); + } finally { + if (browser) { + browser.close(); + } + process.exit(); + } +}; +createPdf(); \ No newline at end of file diff --git a/pdf_stamp/cgv.pdf b/pdf_stamp/cgv.pdf new file mode 100644 index 0000000..09b6619 Binary files /dev/null and b/pdf_stamp/cgv.pdf differ diff --git a/pdf_stamp/en-tete.pdf b/pdf_stamp/en-tete.pdf deleted file mode 100644 index 72480fc..0000000 Binary files a/pdf_stamp/en-tete.pdf and /dev/null differ diff --git a/pdf_stamp/en-tête.pdf b/pdf_stamp/en-tête.pdf new file mode 100644 index 0000000..4f2ae93 Binary files /dev/null and b/pdf_stamp/en-tête.pdf differ