ecom_core 1.2.17 → 1.2.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/models/ecom/core/crew_time.rb +45 -17
- data/lib/ecom/core/version.rb +1 -1
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: faf0a77147b59f982b4e26d123d93a93f7f51daa2f0d47b453df22ceac084f3e
         | 
| 4 | 
            +
              data.tar.gz: c7faa1131252a81ac43cbdd8b848c3f66f2db84cf09e64296de3fd7b490e116e
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: a83643810ff0d997045c7efa28da6a81f2b7c2f9b5a9cc13ed556735ab09559e6e55133f6e9412add7f8d597f1dffe705e195cfe84fa3c09ff0c4ceae5857f29
         | 
| 7 | 
            +
              data.tar.gz: b234a2bbcaad56cf90d94d974f0d611497dd9202056cbb3103775d502a156783a52e87d04afd0373bf9c3dc852fc20a395fe0d4f4ce0bdd4fcdb3c8ac796f356
         | 
| @@ -2,15 +2,15 @@ module Ecom | |
| 2 2 | 
             
              module Core
         | 
| 3 3 | 
             
                class CrewTime < ApplicationRecord
         | 
| 4 4 | 
             
                  # Time Ranges
         | 
| 5 | 
            -
                  MORNING =  | 
| 6 | 
            -
                  AFTERNOON =  | 
| 7 | 
            -
                   | 
| 5 | 
            +
                  MORNING = :morning
         | 
| 6 | 
            +
                  AFTERNOON = :afternoon
         | 
| 7 | 
            +
                  FULL_DAY = :full_day
         | 
| 8 8 |  | 
| 9 | 
            -
                  TIME_RANGE = {
         | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
                  }.freeze
         | 
| 9 | 
            +
                  # TIME_RANGE = {
         | 
| 10 | 
            +
                  #   MORNING => { start: Time.zone.parse('5:00 AM'), end: Time.zone.parse('9:00 AM') },
         | 
| 11 | 
            +
                  #   AFTERNOON => { start: Time.zone.parse('10:00 AM'), end: Time.zone.parse('2:00 PM') },
         | 
| 12 | 
            +
                  #   BOTH => { start: Time.zone.parse('5:00 AM'), end: Time.zone.parse('2:00 PM') }
         | 
| 13 | 
            +
                  # }.freeze
         | 
| 14 14 |  | 
| 15 15 | 
             
                  belongs_to :attendance_sheet_entry
         | 
| 16 16 | 
             
                  belongs_to :revision_to, class_name: 'Ecom::Core::CrewTime', optional: true
         | 
| @@ -47,15 +47,42 @@ module Ecom | |
| 47 47 | 
             
                    attendance_sheet_entry.save
         | 
| 48 48 | 
             
                  end
         | 
| 49 49 |  | 
| 50 | 
            +
                  # A method to get the available time ranges at a given point.
         | 
| 51 | 
            +
                  # We cannot define the range variables as a constant because
         | 
| 52 | 
            +
                  # the parsing should be done at the exact moment we are about
         | 
| 53 | 
            +
                  # to do time range calculations to avoid errors caused by date
         | 
| 54 | 
            +
                  # mismatches
         | 
| 55 | 
            +
                  def get_range
         | 
| 56 | 
            +
                    morning = {
         | 
| 57 | 
            +
                      start: Time.zone.parse('5:00 AM'),
         | 
| 58 | 
            +
                      finish: Time.zone.parse('9:00 AM')
         | 
| 59 | 
            +
                    }
         | 
| 60 | 
            +
                    afternoon = {
         | 
| 61 | 
            +
                      start: Time.zone.parse('10:00 AM'),
         | 
| 62 | 
            +
                      finish: Time.zone.parse('2:00 PM')
         | 
| 63 | 
            +
                    }
         | 
| 64 | 
            +
                    full_day = {
         | 
| 65 | 
            +
                      start: Time.zone.parse('5:00 AM'),
         | 
| 66 | 
            +
                      finish: Time.zone.parse('2:00 PM')
         | 
| 67 | 
            +
                    }
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                    {
         | 
| 70 | 
            +
                      morning: morning,
         | 
| 71 | 
            +
                      afternoon: afternoon,
         | 
| 72 | 
            +
                      full_day: full_day
         | 
| 73 | 
            +
                    }
         | 
| 74 | 
            +
                  end
         | 
| 75 | 
            +
             | 
| 50 76 | 
             
                  # A method to check if checkin and checkout range falls in the morning,
         | 
| 51 77 | 
             
                  # afternoon, or both.
         | 
| 52 78 | 
             
                  def find_range(start, finish)
         | 
| 53 | 
            -
                     | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 56 | 
            -
             | 
| 79 | 
            +
                    range = get_range
         | 
| 80 | 
            +
                    if start.before?(range[:morning][:finish]) && finish.before?(range[:afternoon][:start])
         | 
| 81 | 
            +
                      :morning
         | 
| 82 | 
            +
                    elsif start.after?(range[:morning][:finish]) && finish.after?(range[:afternoon][:start])
         | 
| 83 | 
            +
                      :afternoon
         | 
| 57 84 | 
             
                    else
         | 
| 58 | 
            -
                       | 
| 85 | 
            +
                      :full_day
         | 
| 59 86 | 
             
                    end
         | 
| 60 87 | 
             
                  end
         | 
| 61 88 |  | 
| @@ -63,13 +90,14 @@ module Ecom | |
| 63 90 | 
             
                  # of the defined morning and afternoon ranges
         | 
| 64 91 | 
             
                  def compute_hours
         | 
| 65 92 | 
             
                    # Reparse time to avoid errors caused by date differences
         | 
| 93 | 
            +
                    range = get_range
         | 
| 66 94 | 
             
                    start = Time.zone.parse(checkin_time.strftime('%I:%M%p'))
         | 
| 67 95 | 
             
                    finish = Time.zone.parse(checkout_time.strftime('%I:%M%p'))
         | 
| 68 | 
            -
                     | 
| 69 | 
            -
                    left = start.before?( | 
| 70 | 
            -
                    right = finish.after?( | 
| 96 | 
            +
                    day_part = find_range(start, finish)
         | 
| 97 | 
            +
                    left = start.before?(range[day_part][:start]) ? range[day_part][:start] : start
         | 
| 98 | 
            +
                    right = finish.after?(range[day_part][:finish]) ? range[day_part][:finish] : finish
         | 
| 71 99 | 
             
                    time = (right - left) / 1.hour
         | 
| 72 | 
            -
                    time -= 1 if  | 
| 100 | 
            +
                    time -= 1 if day_part == FULL_DAY
         | 
| 73 101 | 
             
                    time
         | 
| 74 102 | 
             
                  end
         | 
| 75 103 | 
             
                end
         | 
    
        data/lib/ecom/core/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: ecom_core
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1.2. | 
| 4 | 
            +
              version: 1.2.18
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Henock L.
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2020-07- | 
| 11 | 
            +
            date: 2020-07-21 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: aasm
         |