This commit is contained in:
Nicolas Bally 2020-02-02 22:24:38 +01:00
parent 6d7bf8a44c
commit 602f61fde7
22 changed files with 282 additions and 26 deletions

10
Gemfile
View File

@ -38,8 +38,12 @@ group :development, :test do
gem "capistrano", '2.15.9', group: :development, require: false gem "capistrano", '2.15.9', group: :development, require: false
gem "rvm-capistrano",'1.4.1', group: :development gem "rvm-capistrano",'1.4.1', group: :development
gem 'net-ssh', '~>2.7.0' #gem 'net-ssh', '~>2.7.0'
#gem 'net-sftp'
gem 'net-ssh', '~> 5.1.0'
#gem 'openssl', '~> 2.0.0.beta.1'
gem 'web-console', '~> 2.0' gem 'web-console', '~> 2.0'
@ -68,7 +72,7 @@ gem 'gravatar_image_tag'
gem 'roo', '~> 2.1.0' gem 'roo', '~> 2.1.0'
gem 'roo-xls' gem 'roo-xls'
gem 'curb' gem 'curb', "0.9.10"
gem 'kaminari-bootstrap' gem 'kaminari-bootstrap'
@ -83,7 +87,7 @@ gem "iban-tools"
gem "nokogiri" gem "nokogiri"
gem "houston"
gem 'twitter-text' gem 'twitter-text'

View File

@ -68,6 +68,8 @@ GEM
execjs execjs
coffee-script-source (1.9.1) coffee-script-source (1.9.1)
columnize (0.9.0) columnize (0.9.0)
commander (4.4.6)
highline (~> 1.7.2)
concurrent-ruby (1.1.3) concurrent-ruby (1.1.3)
countries (1.2.2) countries (1.2.2)
currencies (~> 0.4.2) currencies (~> 0.4.2)
@ -76,7 +78,7 @@ GEM
countries (~> 1.2.0) countries (~> 1.2.0)
sort_alphabetical (~> 1.0) sort_alphabetical (~> 1.0)
crass (1.0.4) crass (1.0.4)
curb (0.8.8) curb (0.9.10)
currencies (0.4.2) currencies (0.4.2)
debug_inspector (0.0.2) debug_inspector (0.0.2)
debugger-linecache (1.2.0) debugger-linecache (1.2.0)
@ -116,6 +118,9 @@ GEM
railties (>= 4.0.1) railties (>= 4.0.1)
hashie (3.5.7) hashie (3.5.7)
highline (1.7.8) highline (1.7.8)
houston (2.4.0)
commander (~> 4.4)
json
html2haml (2.0.0) html2haml (2.0.0)
erubis (~> 2.7.0) erubis (~> 2.7.0)
haml (~> 4.0.0) haml (~> 4.0.0)
@ -161,7 +166,7 @@ GEM
net-ssh (>= 2.6.5) net-ssh (>= 2.6.5)
net-sftp (2.1.2) net-sftp (2.1.2)
net-ssh (>= 2.6.5) net-ssh (>= 2.6.5)
net-ssh (2.7.0) net-ssh (5.1.0)
net-ssh-gateway (1.2.0) net-ssh-gateway (1.2.0)
net-ssh (>= 2.6.5) net-ssh (>= 2.6.5)
nokogiri (1.6.8.1) nokogiri (1.6.8.1)
@ -187,10 +192,9 @@ GEM
xml-simple xml-simple
paypal-sdk-merchant (1.117.2) paypal-sdk-merchant (1.117.2)
paypal-sdk-core (~> 0.3.0) paypal-sdk-core (~> 0.3.0)
posix-spawn (0.3.11) posix-spawn (0.3.13)
pygments.rb (0.6.3) pygments.rb (1.2.1)
posix-spawn (~> 0.3.6) multi_json (>= 1.0.0)
yajl-ruby (~> 1.2.0)
rack (1.6.11) rack (1.6.11)
rack-test (0.6.3) rack-test (0.6.3)
rack (>= 1.0) rack (>= 1.0)
@ -314,7 +318,6 @@ GEM
wicked_pdf (0.11.0) wicked_pdf (0.11.0)
rails rails
xml-simple (1.1.5) xml-simple (1.1.5)
yajl-ruby (1.2.1)
PLATFORMS PLATFORMS
ruby ruby
@ -328,7 +331,7 @@ DEPENDENCIES
carrierwave carrierwave
coffee-rails (~> 4.1.0) coffee-rails (~> 4.1.0)
country_select country_select
curb curb (= 0.9.10)
fastimage fastimage
formtastic (= 2.3.0) formtastic (= 2.3.0)
formtastic-bootstrap formtastic-bootstrap
@ -336,12 +339,13 @@ DEPENDENCIES
gibbon gibbon
gravatar_image_tag gravatar_image_tag
haml-rails haml-rails
houston
iban-tools iban-tools
jbuilder (~> 2.0) jbuilder (~> 2.0)
jquery-rails jquery-rails
kaminari-bootstrap kaminari-bootstrap
mysql2 mysql2
net-ssh (~> 2.7.0) net-ssh (~> 5.1.0)
nokogiri nokogiri
ogone-rails ogone-rails
omniauth-facebook omniauth-facebook
@ -371,4 +375,4 @@ DEPENDENCIES
wicked_pdf wicked_pdf
BUNDLED WITH BUNDLED WITH
1.16.2 1.17.3

View File

@ -21,7 +21,8 @@ module DocumentLineHelper
end end
fields = f.fields_for(association, new_object, :child_index => "new_#{association}") do |builder| fields = f.fields_for(association, new_object, :child_index => "new_#{association}") do |builder|
render("admin/"+association.to_s + "/form", :form => builder)
render(controller.class.parents[0].to_s.downcase+"/"+association.to_s + "/form", :form => builder)
end end
link_to name,"#", :onclick => "add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\");return false;" link_to name,"#", :onclick => "add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\");return false;"

View File

@ -1,5 +1,5 @@
class GeneralMailer < ActionMailer::Base class GeneralMailer < ActionMailer::Base
default from: "contact@kaps.net" default from: "hey@kaps.net"
add_template_helper(MailHelper) add_template_helper(MailHelper)
@ -8,7 +8,7 @@ class GeneralMailer < ActionMailer::Base
# #
# en.question.deliver.subject # en.question.deliver.subject
# #
def send_qi_mail(lang_slug, slug, to, options) def send_qi_mail(lang_slug, slug, to, options={})
@mail_content = MailContent.find_key(LangSite.find_by_slug(lang_slug), slug) @mail_content = MailContent.find_key(LangSite.find_by_slug(lang_slug), slug)
@ -16,7 +16,23 @@ class GeneralMailer < ActionMailer::Base
@options = options @options = options
mail to: to, :subject => "[KapsMe] "+@mail_content.subject.to_s if @options[:subject]
subject = @options[:subject]
else
subject = @mail_content.subject.to_s
end
mail to: to, :subject => "[KapsMe] "+subject
end
def new_send_qi_mail(options = {})
mail to: options[:to], :subject => "[KapsMe] "+options[:subject] do |format|
format.html { render :inline => options[:body] }
end
end end

View File

@ -6,6 +6,10 @@ class Kap < ActiveRecord::Base
validates :name, :presence => true validates :name, :presence => true
validates :kaps_type_id, :presence => true validates :kaps_type_id, :presence => true
has_many :kaps_rappels
accepts_nested_attributes_for :kaps_rappels, :allow_destroy => true
validates :start_at, :presence => true validates :start_at, :presence => true
@ -46,4 +50,6 @@ class Kap < ActiveRecord::Base
end end
end end

View File

@ -2,6 +2,7 @@ class KapsDay < ActiveRecord::Base
belongs_to :p_customer belongs_to :p_customer
has_many :kapsmes has_many :kapsmes
has_many :kaps_rappels, :through => :kapsmes
after_save do after_save do

43
app/models/kaps_rappel.rb Normal file
View File

@ -0,0 +1,43 @@
class KapsRappel < ActiveRecord::Base
belongs_to :kap
def self.generate_rappels
puts "AAAAAAHHHH"
KapsDay.where(:date => Date.today).each do |kd|
kd.kaps_rappels.where("hour <= ?", Time.now.hour).each do |kr|
kr.generate_rappel(kd,Time.now)
end
end
end
def generate_rappel(kaps_day, time)
if kaps_rappel_items = KapsRappelItem.where(:kaps_rappel_id => self.id, :kaps_day_id => kaps_day.id) and count = kaps_rappel_items.count and count < (self.nbr_rep.to_i + 1)
if kaps_rappel_items.count == 0 or (time > kaps_rappel_items.order("created_at DESC").first.created_at + (self.minutes_rep.to_i >= 1 ? self.minutes_rep.to_i : 15).minutes)
KapsRappelItem.create(:kaps_rappel_id => self.id, :kaps_day_id => kaps_day.id, :kapsme_id => kaps_day.kapsmes.where(:kap_id => self.kap_id).first.id, :number => (count + 1))
end
puts "Un Rappel est lancé"
else
puts "RAPPEL"
puts count
puts "Rappel déjà fait"
end
end
end

View File

@ -0,0 +1,14 @@
class KapsRappelItem < ActiveRecord::Base
belongs_to :kaps_rappel
belongs_to :kapsme
belongs_to :kaps_day
after_create do
puts "BBBBBBBB"
GeneralMailer.new_send_qi_mail(:to => self.kaps_rappel.kap.p_customer.email, :subject => "Rappel : #{self.kapsme.name}", :body => "Rappel, la tâche \"#{self.kapsme.name}\" n'a pas été cochée aujourd'hui :(").deliver
end
end

View File

@ -1,7 +1,9 @@
class Kapsme < ActiveRecord::Base class Kapsme < ActiveRecord::Base
belongs_to :kaps belongs_to :kap
belongs_to :p_customer belongs_to :p_customer
has_many :kaps_rappels, :through => :kap
def kaps_type def kaps_type
if self.kaps_type_id == 1 if self.kaps_type_id == 1
"Journalier" "Journalier"

View File

View File

@ -22,5 +22,16 @@
%h3 Contacts de l'adresse :
.kaps_rappels_form
=f.semantic_fields_for :kaps_rappels do |form|
=render :partial => "public/kaps_rappels/form", :locals => {:form => form}
%p= link_to_add_fields ic(:plus)+" Ajouter un rappel", f, :kaps_rappels
.actions=f.submit "sauvegarder", :class => "btn btn-primary" .actions=f.submit "sauvegarder", :class => "btn btn-primary"

View File

@ -5,7 +5,12 @@
%p Les Kaps du jours %p Les Kaps du jours
-@kaps_day.generate_kapsmes -#@kaps_day.generate_kapsmes
-KapsRappel.generate_rappels
.qi_row .qi_row
.qi_pannel.qi_plain.padding{:style => "position:relative;"} .qi_pannel.qi_plain.padding{:style => "position:relative;"}
#pourcentage_inner{:style => "position:absolute;top:0;left:0;right:0;"} #pourcentage_inner{:style => "position:absolute;top:0;left:0;right:0;"}

View File

@ -0,0 +1,23 @@
.kaps_rappel_form.field
%table{:style => "width:100%;"}
%tr
%td
= form.hidden_field :rappel_type
%td
= form.input :hour, :label => "Heure du rappel :", :as => :string
%td
= form.input :nbr_rep, :label => "Nbr répétitions :"
%td
= form.input :minutes_rep, :label => "Minutes séparant les répétitions :", :as => :string
%td
= form.input :paused_inc, :label => "Rappel aussi les jours de pause ?"
%td{:style => "width:30px;"}
=link_to_remove_fields ic(:"trash-o"), form

View File

@ -20,10 +20,28 @@
# Learn more: http://github.com/javan/whenever # Learn more: http://github.com/javan/whenever
every 1.minute do #every 1.minute do
# runner "KapsDay.cron"
#end
every 2.minute do
runner "KapsRappel.generate_rappels"
end
every 1.days, at: '0:00 am'do
runner "KapsDay.cron"
end
every 1.days, at: '1:00 am'do
runner "KapsDay.cron"
end
every 1.days, at: '2:00 am'do
runner "KapsDay.cron"
end
every 1.days, at: '3:00 am'do
runner "KapsDay.cron" runner "KapsDay.cron"
end end
#every 1.days, at: '0:00 am'do

View File

@ -1 +0,0 @@
<div style="margin:auto;margin-top:100px;padding:50px;text-align:center;border:2px solid #FBA33A;width:600px;"><h2 style="margin-top:0;" >Cette page est en construction</h2><p style="text-align:center;">Notre nouveau site vient juste d'être mis en ligne, nous faisons tout pour le compléter au plus vite.</p></div>

View File

@ -0,0 +1,17 @@
class CreateKapsRappels < ActiveRecord::Migration
def change
create_table :kaps_rappels do |t|
t.string :name
t.integer :hour, :default => 18
t.integer :day
t.string :rappel_type, :default => "day"
t.boolean :paused_inc, :default => false
t.references :kap, index: true, foreign_key: true
t.integer :nbr_rep
t.integer :minutes_rep
t.timestamps null: false
end
end
end

View File

@ -0,0 +1,13 @@
class CreateKapsRappelItems < ActiveRecord::Migration
def change
create_table :kaps_rappel_items do |t|
t.references :kaps_rappel, index: true, foreign_key: true
t.integer :number
t.references :kapsme, index: true, foreign_key: true
t.references :kaps_day, index: true, foreign_key: true
t.datetime :generate_at
t.timestamps null: false
end
end
end

View File

@ -11,7 +11,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20200112130214) do ActiveRecord::Schema.define(version: 20200112211919) do
create_table "admin_admin_roles", force: :cascade do |t| create_table "admin_admin_roles", force: :cascade do |t|
t.integer "admin_id", limit: 4 t.integer "admin_id", limit: 4
@ -480,6 +480,35 @@ ActiveRecord::Schema.define(version: 20200112130214) do
add_index "kaps_days", ["p_customer_id"], name: "index_kaps_days_on_p_customer_id", using: :btree add_index "kaps_days", ["p_customer_id"], name: "index_kaps_days_on_p_customer_id", using: :btree
create_table "kaps_rappel_items", force: :cascade do |t|
t.integer "kaps_rappel_id", limit: 4
t.integer "number", limit: 4
t.integer "kapsme_id", limit: 4
t.integer "kaps_day_id", limit: 4
t.datetime "generate_at"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
add_index "kaps_rappel_items", ["kaps_day_id"], name: "index_kaps_rappel_items_on_kaps_day_id", using: :btree
add_index "kaps_rappel_items", ["kaps_rappel_id"], name: "index_kaps_rappel_items_on_kaps_rappel_id", using: :btree
add_index "kaps_rappel_items", ["kapsme_id"], name: "index_kaps_rappel_items_on_kapsme_id", using: :btree
create_table "kaps_rappels", force: :cascade do |t|
t.string "name", limit: 255
t.integer "hour", limit: 4, default: 18
t.integer "day", limit: 4
t.string "rappel_type", limit: 255, default: "day"
t.boolean "paused_inc", default: false
t.integer "kap_id", limit: 4
t.integer "nbr_rep", limit: 4
t.integer "minutes_rep", limit: 4
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
add_index "kaps_rappels", ["kap_id"], name: "index_kaps_rappels_on_kap_id", using: :btree
create_table "kapsmes", force: :cascade do |t| create_table "kapsmes", force: :cascade do |t|
t.string "name", limit: 255 t.string "name", limit: 255
t.text "description", limit: 65535 t.text "description", limit: 65535
@ -1628,6 +1657,10 @@ ActiveRecord::Schema.define(version: 20200112130214) do
add_foreign_key "home_slider_slides", "home_sliders" add_foreign_key "home_slider_slides", "home_sliders"
add_foreign_key "kaps", "p_customers" add_foreign_key "kaps", "p_customers"
add_foreign_key "kaps_days", "p_customers" add_foreign_key "kaps_days", "p_customers"
add_foreign_key "kaps_rappel_items", "kaps_days"
add_foreign_key "kaps_rappel_items", "kaps_rappels"
add_foreign_key "kaps_rappel_items", "kapsmes"
add_foreign_key "kaps_rappels", "kaps"
add_foreign_key "kapsmes", "kaps" add_foreign_key "kapsmes", "kaps"
add_foreign_key "kapsmes", "p_customers" add_foreign_key "kapsmes", "p_customers"
add_foreign_key "lang_pages", "lang_sites" add_foreign_key "lang_pages", "lang_sites"

15
test/fixtures/kaps_rappel_items.yml vendored Normal file
View File

@ -0,0 +1,15 @@
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
one:
kaps_rappel_id:
number: 1
kapsme_id:
kaps_day_id:
generate_at: 2020-01-12 22:19:19
two:
kaps_rappel_id:
number: 1
kapsme_id:
kaps_day_id:
generate_at: 2020-01-12 22:19:19

17
test/fixtures/kaps_rappels.yml vendored Normal file
View File

@ -0,0 +1,17 @@
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
one:
name: MyString
hour: 1
day: 1
type:
paused_inc: false
kap_id:
two:
name: MyString
hour: 1
day: 1
type:
paused_inc: false
kap_id:

View File

@ -0,0 +1,7 @@
require 'test_helper'
class KapsRappelItemTest < ActiveSupport::TestCase
# test "the truth" do
# assert true
# end
end

View File

@ -0,0 +1,7 @@
require 'test_helper'
class KapsRappelTest < ActiveSupport::TestCase
# test "the truth" do
# assert true
# end
end