Browse Source

added concepts for last reserved payments and last credit payments

Jose Miguel Ledon Nieblas 8 years ago
parent
commit
1f7ae188a7

+ 1 - 1
app/controllers/cash_registers_moves_controller.rb

@@ -60,7 +60,7 @@ class CashRegistersMovesController < ApplicationController
           @cash_registers_move.concept = :sale
         elsif @sale.reserved?
           @cash_registers_move.status = :inactive
-          @cash_registers_move.concept = :reserved_payment
+          @cash_registers_move.choose_concept_when_reserved
           @cash_registers_move.open_cash_register_id = session[:open_cash_register_id]
         end
 

+ 109 - 106
app/models/cash_registers_move.rb

@@ -1,108 +1,111 @@
 class CashRegistersMove < ActiveRecord::Base
-	belongs_to :open_cash_register
-	belongs_to :payment_method
-
-	belongs_to :expense
-	belongs_to :sale
-	belongs_to :purchase
-	belongs_to :credit_payment
-	belongs_to :products_return
-
-	##--- Llevar registro de Actividad del usuario
-	audited
-
-	enum move_type: [ :egreso, :ingreso ]
-	enum status: [ :inactive, :active ]
-	enum concept: [:sale, :purchase, :expense, :credit_payment, :reserved_payment, :products_return]
-
-	attr_accessor :skip_received_validation
-
-	validates_presence_of :quantity, message: "Debe indicar cantidad."
-	validates_presence_of :payment_method_id, message: "Debe seleccionar metodo de pago."
-	validates_presence_of :received, message: "Debe seleccionar monto recibido.", if: :is_in_cash?, unless: :skip_received_validation
-
-	scope :activos, -> { where( "cash_registers_moves.status = 1") }
-
-	def is_in_cash?
-		cash_payment_id = PaymentMethod.find_by(:isCash => 1).id
-		if self.payment_method_id == cash_payment_id
-			return true
-		else
-			return false
-		end
-	end
-
-	def calculate_quantities
-		cash_payment_method_id = PaymentMethod.find_by(:isCash => 1).id
-
-		# ventas
-		if self.sale.present?
-			if self.sale.cash?
-				if self.payment_method_id == cash_payment_method_id
-
-			      	sale_total = self.sale.total
-
-			      	already_paid = CashRegistersMove.where(:sale_id => self.sale_id,
-			        	:open_cash_register_id => self.open_cash_register_id).sum(:quantity)
-
-			      	rest = sale_total - already_paid
-			      	if self.received.present?
-			        	self.change = self.received - (sale_total - already_paid)
-			            self.quantity = self.received > rest ? rest : self.received
-			      	end
-				else
-			        self.quantity = self.received
-			        self.change = 0
-				end
-			elsif self.sale.reserved? || self.sale.credit?
-				if self.received.present?
-					self.change = self.received - self.quantity
-				else
-					self.change = 0
-				end
-			end
-		# devoluciones
-		elsif self.products_return.present?
-			if self.payment_method_id == cash_payment_method_id
-		      	total = self.products_return.difference_amount
-
-		      	already_paid = CashRegistersMove.where(:products_return_id => self.products_return_id,
-		        	:open_cash_register_id => self.open_cash_register_id).sum(:quantity)
-
-		      	rest = total - already_paid
-		      	if self.received.present?
-		        	self.change = self.received - (total - already_paid)
-		            self.quantity = self.received > rest ? rest : self.received
-		      	end
-			else
-		        self.quantity = self.received
-		        self.change = 0
-			end
-		end
-
-	end
-
-	def self.incomings_per_period(period)
-		all_incomings = Array.new
-		case period
-			when 'day'
-			    beg_period = Date.current.beginning_of_day
-			    end_period = Date.current.end_of_day
-			when 'week'
-		      	beg_period = Date.current.beginning_of_week
-		      	end_period = Date.current.end_of_week
-			when 'month'
-			    beg_period = Date.current.beginning_of_month
-			    end_period = Date.current.end_of_month
-		end
-
-      	Pointsale.activos.each do |pointsale|
-        	obj = {}
-	        obj[:pointsale] = pointsale.name.gsub(" ", "\n")
-	        obj[:total] = pointsale.open_cash_registers.where(:created_at => beg_period..end_period).joins(:cash_registers_moves).where("cash_registers_moves.move_type = '1' and cash_registers_moves.status = '1'").sum(:quantity)
-	        all_incomings << obj
-      	end
-      	all_incomings = all_incomings.to_json
-      	return all_incomings
-	end
+  belongs_to :open_cash_register
+  belongs_to :payment_method
+
+  belongs_to :expense
+  belongs_to :sale
+  belongs_to :purchase
+  belongs_to :credit_payment
+  belongs_to :products_return
+
+  ##--- Llevar registro de Actividad del usuario
+  audited
+
+  enum move_type: [:egreso, :ingreso]
+  enum status: [:inactive, :active]
+  enum concept: [:sale, :purchase, :expense, :credit_payment, :reserved_payment, :products_return, :reserved_first_payment, :reserved_last_payment]
+
+  attr_accessor :skip_received_validation
+
+  validates_presence_of :quantity, message: "Debe indicar cantidad."
+  validates_presence_of :payment_method_id, message: "Debe seleccionar metodo de pago."
+  validates_presence_of :received, message: "Debe seleccionar monto recibido.", if: :in_cash?, unless: :skip_received_validation
+
+  scope :activos, -> { where("cash_registers_moves.status = 1") }
+
+  def in_cash?
+    cash_payment_id = PaymentMethod.find_by(isCash: 1).id
+    if payment_method_id == cash_payment_id
+      return true
+    else
+      return false
+    end
+  end
+
+  # rubocop:disable Metrics/BlockNesting
+  def calculate_quantities
+    cash_payment_method_id = PaymentMethod.find_by(isCash: 1).id
+    # ventas
+    if sale.present?
+      if sale.cash?
+        if payment_method_id == cash_payment_method_id
+          sale_total = sale.total
+
+          already_paid = CashRegistersMove.where(sale_id: sale_id, open_cash_register_id: open_cash_register_id).sum(:quantity)
+
+          rest = sale_total - already_paid
+          if received.present?
+            self.change = received - (sale_total - already_paid)
+            self.quantity = received > rest ? rest : received
+          end
+        else
+          self.quantity = received
+          self.change = 0
+        end
+      elsif sale.reserved? || sale.credit?
+        self.change = received.present? ? (received - quantity) : 0
+      end
+    # devoluciones
+    elsif products_return.present?
+      if payment_method_id == cash_payment_method_id
+        total = products_return.difference_amount
+
+        already_paid = CashRegistersMove.where(products_return_id: products_return_id, open_cash_register_id: open_cash_register_id).sum(:quantity)
+
+        rest = total - already_paid
+        if received.present?
+          self.change = received - (total - already_paid)
+          self.quantity = received > rest ? rest : received
+        end
+      else
+        self.quantity = received
+        self.change = 0
+      end
+    end
+  end
+  # rubocop:enable Metrics/BlockNesting
+
+  def self.incomings_per_period(period)
+    all_incomings = Array.new
+    case period
+    when 'day'
+      beg_period = Date.current.beginning_of_day
+      end_period = Date.current.end_of_day
+    when 'week'
+      beg_period = Date.current.beginning_of_week
+      end_period = Date.current.end_of_week
+    when 'month'
+      beg_period = Date.current.beginning_of_month
+      end_period = Date.current.end_of_month
+    end
+
+    Pointsale.activos.each do |pointsale|
+      obj = {}
+      obj[:pointsale] = pointsale.name.tr(" ", "\n")
+      obj[:total] = pointsale.open_cash_registers.where(created_at: beg_period..end_period).joins(:cash_registers_moves).where("cash_registers_moves.move_type = '1' and cash_registers_moves.status = '1'").sum(:quantity)
+      all_incomings << obj
+    end
+    all_incomings.to_json
+  end
+
+  def choose_concept_when_reserved
+    reserve_has_moves = CashRegistersMove.where(sale_id: sale_id, move_type: 1, status: 1).any?
+    # rubocop:disable Style/ConditionalAssignment
+    if reserve_has_moves
+      self.concept = sale.reserve_debt > quantity ? :reserved_payment : :reserved_last_payment
+    else
+      self.concept = :reserved_first_payment
+    end
+    # rubocop:enable Style/ConditionalAssignment
+  end
 end

+ 36 - 9
app/views/cash_outs/receipt.pdf.erb

@@ -20,7 +20,6 @@
 	<h3 class="text-center">Corte de caja <%= pointsale.name %></h3>
 
 	<div class="resume" style="border-bottom:1px solid black;">
-		<h4 style="margin-top:5px;margin-bottom:5px">RESUMEN</h4>
 		<strong>Apertura de caja:</strong>&nbsp;&nbsp;
 			<%= l(cash_out.open_cash_register.created_at, :format => '%d/%m/%y %I:%M %p') %><br>
 		<strong>Corte de caja:</strong>&nbsp;&nbsp;
@@ -44,24 +43,23 @@
 			<thead>
 				<tr>
 					<th style="text-align:left">Fondo anterior</th>
-					<th style="text-align:center">Efectivo en caja</th>
-					<th style="text-align:center">Retiro</th>
-					<th style="text-align:right">Fondo</th>
+					<th style="text-align:left">Efectivo en caja</th>
+					<th style="text-align:left">Retiro</th>
+					<th style="text-align:center">Fondo</th>
 				</tr>
 			</thead>
 			<tbody>
 				<tr>
-
 					<td style="text-align:left">
 						<%= number_to_currency(initial_cash, precision: 2) %>
 					</td>
-					<td style="text-align:center">
+					<td style="text-align:left">
 						<%= number_to_currency(cash_out.physical_cash, precision: 2) %>
 					</td>
-					<td style="text-align:center">
+					<td style="text-align:left">
 						<%= number_to_currency(cash_out.received_cash, precision: 2) %>
 					</td>
-					<td style="text-align:right">
+					<td style="text-align:center">
 						<%= number_to_currency(cash_out.cash_fund, precision: 2) %>
 					</td>
 				</tr>
@@ -69,6 +67,35 @@
 		</table>
 	</div>
 
+	<div style="border-bottom:1px solid black; margin-top:10px">
+		<table cellspacing="0" width="100%">
+			<thead>
+				<tr>
+					<th style="text-align:left"></th>
+					<th style="text-align:center"></th>
+					<th style="text-align:center"></th>
+				</tr>
+			</thead>
+			<tbody>
+				<tr>
+					<td style="text-align:left"><strong>Ventas a contado</strong></td>
+					<td style="text-align:center"><strong>Abonos a crédito</strong></td>
+					<td style="text-align:center"><strong>Apartados</strong></td>
+				</tr>
+				<tr>
+					<td style="text-align:left">
+						<%= number_to_currency(sales_total, precision: 2) %>
+					</td>
+					<td style="text-align:center">
+						<%= number_to_currency(credit_sales, precision: 2) %>
+					</td>
+					<td style="text-align:center">
+						<%= number_to_currency(reserved_sales, precision: 2) %>
+					</td>
+				</tr>
+			</tbody>
+		</table>
+	</div>
 	<div style="border-bottom:1px solid black; margin-top:10px">
 		<h4 style="margin-top:5px;margin-bottom:5px">RESUMEN</h4>
 		<% cash_out.cash_out_details.each do | detail | %>
@@ -167,7 +194,7 @@
 					</tr>
 				</thead>
 				<tbody>
-					<% @expenses.each do |expense| %>
+					<% expenses.each do |expense| %>
 						<tr>
 							<td style="text-align:left">
 				                <strong> <%= expense.expensesconcept.name %></strong> <br>

+ 5 - 1
app/views/sales/receipt_partial_payment.pdf.erb

@@ -21,7 +21,11 @@
     <%= l(Date.today, :format => '%d/%m/%y %I:%M %p') %> &nbsp; | &nbsp; <%= current_user.first_name.upcase %> &nbsp; | &nbsp; <%= sale.sale_code %> &nbsp;
   </div>
   <div style="margin-top:5px">
-    <strong> ABONO A APARTADO </strong><br>
+    <% if sale.reserve_debt <= 0 %>
+      <strong> LIQUIDACIÓN DE APARTADO </strong><br>
+    <% else %>
+      <strong> ABONO A APARTADO </strong><br>
+    <% end %>
     Cliente: <strong> <%= sale.customer.nick_name %> </strong><br>
     Vencimiento: <strong><%= l(sale.expiration_date, :format => '%d/%m/%y') %></strong>
   </div>