comee_core 0.1.99 → 0.2.0
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/controllers/comee/core/client_prices_controller.rb +59 -1
- data/app/models/comee/core/client_order.rb +4 -0
- data/app/models/comee/core/client_price.rb +8 -0
- data/app/models/comee/core/price.rb +18 -0
- data/app/serializers/comee/core/client_price_serializer.rb +1 -1
- data/app/serializers/comee/core/master_price_serializer.rb +2 -1
- data/config/routes.rb +9 -2
- data/lib/comee/core/version.rb +1 -1
- data/spec/factories/comee/core/client_prices.rb +4 -0
- 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: 57905a1877a1cfdd9fea4c9e066e0f9ee22917dac5b52da002c2c6870f8599da
         | 
| 4 | 
            +
              data.tar.gz: fd73641d6b2535751080b5d582b96e4f8506b192f990b664644afaef4a187b7b
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 74ed17525f0cad01052f2b1b3f4dbe72dc6c155422e738ca441686402b3fa19ab1c6c616021c211e918b39d05d00cef643b0cbf7e634250bc1a72d4c8a838fed
         | 
| 7 | 
            +
              data.tar.gz: 78ddd02578f0e92d16d75e04399d08d081fd9d00e989c4ea76c6c7ec29b86686010a91032a2e3de26369e817a997b7b1c7e554c0a1301e9ccc6d50a095fba79c
         | 
| @@ -9,6 +9,52 @@ module Comee | |
| 9 9 | 
             
                    end
         | 
| 10 10 | 
             
                  end
         | 
| 11 11 |  | 
| 12 | 
            +
                  def create
         | 
| 13 | 
            +
                    super do
         | 
| 14 | 
            +
                      price = ClientPrice.new(model_params)
         | 
| 15 | 
            +
                      master_price = MasterPrice.find_by(product_id: price.product_id, primary: true)
         | 
| 16 | 
            +
                      price.price = master_price&.selling_price
         | 
| 17 | 
            +
                      if price.price
         | 
| 18 | 
            +
                        price.price = price.margin_increase? ? price.price * (1 + price.margin / 100) : price.price * (1 - price.margin / 100)
         | 
| 19 | 
            +
                      end
         | 
| 20 | 
            +
                      price
         | 
| 21 | 
            +
                    end
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                  def update
         | 
| 25 | 
            +
                    if @obj.draft?
         | 
| 26 | 
            +
                      product_id = model_params[:product_id] || @obj.product_id
         | 
| 27 | 
            +
                      master_price = MasterPrice.find_by(product_id: product_id, primary: true)
         | 
| 28 | 
            +
                      @obj.price = master_price&.selling_price
         | 
| 29 | 
            +
                      if @obj.price
         | 
| 30 | 
            +
                        @obj.price = @obj.margin_increase? ? @obj.price * (1 + @obj.margin / 100) : @obj.price * (1 - @obj.margin / 100)
         | 
| 31 | 
            +
                      end
         | 
| 32 | 
            +
                      if @obj.update(model_params)
         | 
| 33 | 
            +
                        render_content(@obj)
         | 
| 34 | 
            +
                      else
         | 
| 35 | 
            +
                        render json: {success: false, error: @obj.errors.full_messages[0]}, status: :unprocessable_entity
         | 
| 36 | 
            +
                      end
         | 
| 37 | 
            +
                    else
         | 
| 38 | 
            +
                      error = "Client price should be in draft state to edit."
         | 
| 39 | 
            +
                      render json: {success: false, error: error}, status: :unprocessable_entity
         | 
| 40 | 
            +
                    end
         | 
| 41 | 
            +
                  rescue StandardError => e
         | 
| 42 | 
            +
                    render json: {success: false, error: e.message}
         | 
| 43 | 
            +
                  end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                  def extend_validity
         | 
| 46 | 
            +
                    price = ClientPrice.find(params[:id])
         | 
| 47 | 
            +
                    if price.draft?
         | 
| 48 | 
            +
                      render json: {success: false, error: "Price must be an approved price for validity extension."}
         | 
| 49 | 
            +
                    else
         | 
| 50 | 
            +
                      price.valid_to = extend_params[:valid_to]
         | 
| 51 | 
            +
                      price.save!
         | 
| 52 | 
            +
                      render_content(price)
         | 
| 53 | 
            +
                    end
         | 
| 54 | 
            +
                  rescue StandardError => e
         | 
| 55 | 
            +
                    render json: {success: false, error: e.message}
         | 
| 56 | 
            +
                  end
         | 
| 57 | 
            +
             | 
| 12 58 | 
             
                  def fetch_for_client
         | 
| 13 59 | 
             
                    client = Client.find(params[:id])
         | 
| 14 60 | 
             
                    client_id = client.parent_id || client.id
         | 
| @@ -17,6 +63,14 @@ module Comee | |
| 17 63 | 
             
                    render_content(prices)
         | 
| 18 64 | 
             
                  end
         | 
| 19 65 |  | 
| 66 | 
            +
                  def approve
         | 
| 67 | 
            +
                    price = ClientPrice.find(params[:id])
         | 
| 68 | 
            +
                    price = price.approve
         | 
| 69 | 
            +
                    render_content(price)
         | 
| 70 | 
            +
                  rescue StandardError => e
         | 
| 71 | 
            +
                    render json: {success: false, error: e.message}, status: :unprocessable_entity
         | 
| 72 | 
            +
                  end
         | 
| 73 | 
            +
             | 
| 20 74 | 
             
                  def filter
         | 
| 21 75 | 
             
                    prices = ClientPrice.includes(:client, :product, :unit, :product_lookup)
         | 
| 22 76 | 
             
                                        .ransack(params[:q]).result
         | 
| @@ -26,9 +80,13 @@ module Comee | |
| 26 80 | 
             
                  private
         | 
| 27 81 |  | 
| 28 82 | 
             
                  def model_params
         | 
| 29 | 
            -
                    params.require(:payload).permit(:valid_from, :valid_to, : | 
| 83 | 
            +
                    params.require(:payload).permit(:valid_from, :valid_to, :product_id, :margin, :margin_type, :client_id, :previous_price,
         | 
| 30 84 | 
             
                                                    :unit_id)
         | 
| 31 85 | 
             
                  end
         | 
| 86 | 
            +
             | 
| 87 | 
            +
                  def extend_params
         | 
| 88 | 
            +
                    params.require(:payload).permit(:valid_to)
         | 
| 89 | 
            +
                  end
         | 
| 32 90 | 
             
                end
         | 
| 33 91 | 
             
              end
         | 
| 34 92 | 
             
            end
         | 
| @@ -23,6 +23,14 @@ module Comee | |
| 23 23 | 
             
                    end
         | 
| 24 24 | 
             
                  end
         | 
| 25 25 |  | 
| 26 | 
            +
                  def margin_increase?
         | 
| 27 | 
            +
                    ClientPrice.margin_types[margin_type] == ClientPrice.margin_types[:increase]
         | 
| 28 | 
            +
                  end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                  def margin_discount?
         | 
| 31 | 
            +
                    ClientPrice.margin_types[margin_type] == ClientPrice.margin_types[:discount]
         | 
| 32 | 
            +
                  end
         | 
| 33 | 
            +
             | 
| 26 34 | 
             
                  def self.ransackable_attributes(_auth_object = nil)
         | 
| 27 35 | 
             
                    %w[
         | 
| 28 36 | 
             
                      id
         | 
| @@ -23,6 +23,14 @@ module Comee | |
| 23 23 | 
             
                    errors.add(:base, "Price validity date range is not correct.") unless period.valid?
         | 
| 24 24 | 
             
                  end
         | 
| 25 25 |  | 
| 26 | 
            +
                  def draft?
         | 
| 27 | 
            +
                    Price.price_statuses[price_status] == Price.price_statuses[:draft]
         | 
| 28 | 
            +
                  end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                  def approved?
         | 
| 31 | 
            +
                    Price.price_statuses[price_status] == Price.price_statuses[:approved]
         | 
| 32 | 
            +
                  end
         | 
| 33 | 
            +
             | 
| 26 34 | 
             
                  def compute_status
         | 
| 27 35 | 
             
                    period = Period.new(valid_from, valid_to)
         | 
| 28 36 | 
             
                    if period.past?
         | 
| @@ -34,6 +42,16 @@ module Comee | |
| 34 42 | 
             
                    end
         | 
| 35 43 | 
             
                  end
         | 
| 36 44 |  | 
| 45 | 
            +
                  def approve
         | 
| 46 | 
            +
                    if Price.price_statuses[price_status] == Price.price_statuses[:approved]
         | 
| 47 | 
            +
                      raise(StandardError, "Price status is already in approved state.")
         | 
| 48 | 
            +
                    end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                    self.price_status = Price.price_statuses[:approved]
         | 
| 51 | 
            +
                    save!
         | 
| 52 | 
            +
                    self
         | 
| 53 | 
            +
                  end
         | 
| 54 | 
            +
             | 
| 37 55 | 
             
                  def past?
         | 
| 38 56 | 
             
                    Price.statuses[status] == Price.statuses[:past]
         | 
| 39 57 | 
             
                  end
         | 
| @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            module Comee
         | 
| 2 2 | 
             
              module Core
         | 
| 3 3 | 
             
                class ClientPriceSerializer < ActiveModel::Serializer
         | 
| 4 | 
            -
                  attributes :id, :valid_from, :valid_to, :price, :status, :previous_price, :margin, :margin_type
         | 
| 4 | 
            +
                  attributes :id, :valid_from, :valid_to, :price, :status, :price_status, :previous_price, :margin, :margin_type
         | 
| 5 5 | 
             
                  belongs_to :product
         | 
| 6 6 | 
             
                  belongs_to :client
         | 
| 7 7 | 
             
                  belongs_to :unit
         | 
| @@ -1,7 +1,8 @@ | |
| 1 1 | 
             
            module Comee
         | 
| 2 2 | 
             
              module Core
         | 
| 3 3 | 
             
                class MasterPriceSerializer < ActiveModel::Serializer
         | 
| 4 | 
            -
                  attributes :id, :purchase_price, :selling_price, :valid_from, :valid_to, :primary, :margin, :lead_time, :status
         | 
| 4 | 
            +
                  attributes :id, :purchase_price, :selling_price, :valid_from, :valid_to, :primary, :margin, :lead_time, :status,
         | 
| 5 | 
            +
                             :price_status
         | 
| 5 6 | 
             
                  belongs_to :product
         | 
| 6 7 | 
             
                  belongs_to :supplier
         | 
| 7 8 | 
             
                  belongs_to :product_lookup
         | 
    
        data/config/routes.rb
    CHANGED
    
    | @@ -93,8 +93,15 @@ Comee::Core::Engine.routes.draw do | |
| 93 93 | 
             
                end
         | 
| 94 94 | 
             
              end
         | 
| 95 95 | 
             
              resources :agents
         | 
| 96 | 
            -
               | 
| 97 | 
            -
             | 
| 96 | 
            +
              resources :client_prices do
         | 
| 97 | 
            +
                member do
         | 
| 98 | 
            +
                  post "extend_validity"
         | 
| 99 | 
            +
                  post "approve"
         | 
| 100 | 
            +
                end
         | 
| 101 | 
            +
                collection do
         | 
| 102 | 
            +
                  post "filter"
         | 
| 103 | 
            +
                end
         | 
| 104 | 
            +
              end
         | 
| 98 105 | 
             
              post "/back_orders/filter", controller: :back_orders, action: :filter
         | 
| 99 106 | 
             
              resources :back_orders do
         | 
| 100 107 | 
             
                member do
         | 
    
        data/lib/comee/core/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: comee_core
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.2.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Henock L.
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2024-01- | 
| 11 | 
            +
            date: 2024-01-22 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: active_model_serializers
         |