Browse Source

make possible create admin users

jose miguel 7 years ago
parent
commit
d615bdc2f3

+ 27 - 32
app/controllers/users_controller.rb

@@ -2,31 +2,26 @@ class UsersController < ApplicationController
   ##--- Breadcrum_rails
   add_breadcrumb I18n.t("breadcrumbs." + controller_name), :users_path
   add_breadcrumb "Cambio de contraseña", :pwdchange_path, only: :update_password
-  add_breadcrumb "Nuevo Usuario" , :new_user_path, only: :new
-  add_breadcrumb "Editar usuario"  , :edit_user_path, only: :edit
+  add_breadcrumb "Nuevo Usuario", :new_user_path, only: :new
+  add_breadcrumb "Editar usuario", :edit_user_path, only: :edit
 
   before_action :set_user, only: [:edit, :update]
   before_action :get_filters, only: [:index, :show, :edit, :new]
 
   def index
-    if current_user.usertype == 'A'
-      @users = User.includes(:pointsale, :warehouse).where('status > 0').order("id desc")
-    else
-      @users = User.includes(:pointsale, :warehouse).where('status > 0 and pointsale_id = ?', current_user.pointsale_id).order("id desc")
-    end
+    @users = current_user.usertype == 'A' ? User.includes(:pointsale, :warehouse).where('status > 0').order("id desc") : User.includes(:pointsale, :warehouse).where('status > 0 and pointsale_id = ?', current_user.pointsale_id).order("id desc")
   end
 
   def new
     @user = User.new
   end
 
-  def edit
-  end
+  def edit; end
 
   def update
     respond_to do |format|
       @user.skip_validations_when_edit = true
-      message =  "Usuario #{@user.userid} ha sido modificado."
+      message = "Usuario #{@user.userid} ha sido modificado."
       @user.audit_comment = message
       if @user.update(user_params)
         format.html { redirect_to users_path, success: message }
@@ -41,10 +36,14 @@ class UsersController < ApplicationController
   def create
     @user = User.new(user_params)
     respond_to do |format|
-      message = "Usuario #{@user.userid} creado y asignado al " + ( @user.pointsale.present? ? "punto de venta #{@user.pointsale.name}" : "almacén #{@user.warehouse.name}")
+      message = if @user.usertype == 'A'
+                  "usuario #{@user.userid} con perfil ADMINISTRADOR creado."
+                else
+                  "Usuario #{@user.userid} creado y asignado al " + (@user.pointsale.present? ? "punto de venta #{@user.pointsale.name}" : "almacén #{@user.warehouse.name}")
+                end
       @user.audit_comment = message
       if @user.save
-        format.html { redirect_to users_path, success: message}
+        format.html { redirect_to users_path, success: message }
         format.json { render :show, status: :created, location: @user }
       else
         format.html { render :new }
@@ -62,9 +61,9 @@ class UsersController < ApplicationController
     respond_to do |format|
       message = "La contraseña de " + @user.full_name + " fue modificada."
       @user.audit_comment = message
-      if  @user.update_with_password(user_params)
+      if @user.update_with_password(user_params)
         # Sign in the user by passing validation in case their password changed
-        sign_in @user, :bypass => true
+        sign_in @user, bypass: true
         format.html { redirect_to root_path, success: message }
         # format.json { render :show, status: :created, location: @user }
       else
@@ -82,9 +81,9 @@ class UsersController < ApplicationController
       user.status = "active"
     end
     respond_to do |format|
-      message = "El usuario " + user.userid + " fue "+ (user.active? ? "activado" : "desactivado")+"."
+      message = "El usuario " + user.userid + " fue " + (user.active? ? "activado" : "desactivado") + "."
       user.audit_comment = message
-      if user.save(:validate => false)
+      if user.save(validate: false)
         format.html { redirect_to users_path, warning: message }
         format.json { head :no_content }
       else
@@ -96,22 +95,18 @@ class UsersController < ApplicationController
 
   private
 
-    # Use callbacks to share common setup or constraints between actions.
-    def set_user
-      @user = User.find(params[:id])
-    end
+  # Use callbacks to share common setup or constraints between actions.
+  def set_user
+    @user = User.find(params[:id])
+  end
 
-    def get_filters
-      if params[:current_page].blank?
-        @current_page = 1
-      else
-        @current_page = params[:current_page]
-      end
-      @filter = params[:filter]
-    end
+  def get_filters
+    @current_page = params[:current_page].blank? ? 1 : params[:current_page]
+    @filter = params[:filter]
+  end
 
-    def user_params
-      # NOTE: Using `strong_parameters` gem
-      params.require(:user).permit(:current_password, :password, :password_confirmation, :pointsale_id, :warehouse_id, :usertype, :userid, :first_name, :last_name, :email )
-    end
+  def user_params
+    # NOTE: Using `strong_parameters` gem
+    params.require(:user).permit(:current_password, :password, :password_confirmation, :pointsale_id, :warehouse_id, :usertype, :userid, :first_name, :last_name, :email)
+  end
 end

+ 51 - 55
app/models/user.rb

@@ -1,68 +1,64 @@
 class User < ActiveRecord::Base
+  # Include default devise modules. Others available are:
+  # :confirmable, :lockable, :timeoutable and :omniauthable
+  devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable
+  devise :session_limitable # other devise options
 
-	# Include default devise modules. Others available are:
-	# :confirmable, :lockable, :timeoutable and :omniauthable
-	devise :database_authenticatable, :registerable,
-				 :recoverable, :rememberable, :trackable, :validatable
-	devise :session_limitable # other devise options
+  before_update :warehouse_or_pointsale
 
-	before_update :warehouse_or_pointsale
+  #-- Associations
+  belongs_to :pointsale
+  belongs_to :warehouse
+  has_many :pre_sales
+  has_many :product_wastes
+  has_many :pre_purchases
+  has_many :open_cash_registers
+  has_many :credit_payments
+  has_many :cash_outs
+  has_many :special_prices
+  has_many :transfers
+  has_many :commissions
+  has_many :products_returns
 
-	#-- Associations
-	belongs_to :pointsale
-	belongs_to :warehouse
-	has_many :pre_sales
-	has_many :product_wastes
-	has_many :pre_purchases
-	has_many :open_cash_registers
-	has_many :credit_payments
-	has_many :cash_outs
-	has_many :special_prices
-	has_many :transfers
-	has_many :commissions
-	has_many :products_returns
+  enum status: [:erased, :active, :inactive]
+  ##--- Llevar registro de Actividad del usuario
+  audited
 
-	enum status: [ :erased, :active, :inactive ]
-	##--- Llevar registro de Actividad del usuario
-	audited
+  ##--- Validaciones previas de guardar
+  attr_accessor :skip_validations_from_pointsale
+  attr_accessor :skip_validations_when_edit
+  validates_presence_of :userid, message: "Debe especificar el nombre de usuario, es con el que el usuario iniciará sesión."
+  validates :password, presence: { message: "Debe especificar la contraseña nueva" },  length: { within: Devise.password_length, too_short: "La contraseña no puede ser menor a %{count}." }, unless: :skip_validations_when_edit
+  validates :password_confirmation, presence: { message: "Debe confirmar la contraseña nueva" }, unless: :skip_validations_when_edit
+  # validates_presence_of :pointsale_id, message: "Debe seleccionar el punto de venta al que pertenecera el usuario.", on: [:create, :update], unless: :skip_validations_from_pointsale
+  validates_presence_of :usertype, message: "Debe seleccionar el tipo de usuario, con este se determinara los permisos que tendrá dentro del sistema.", on: [:create, :update], unless: :skip_validations_from_pointsale
 
-	##--- Validaciones previas de guardar
-	attr_accessor :skip_validations_from_pointsale
-	attr_accessor :skip_validations_when_edit
-	validates_presence_of :userid, message: "Debe especificar el nombre de usuario, es con el que el usuario iniciará sesión."
-	validates :password, :presence => { :message => "Debe especificar la contraseña nueva"},  length: { :within => Devise.password_length, too_short: "La contraseña no puede ser menor a %{count}." }, unless: :skip_validations_when_edit
-	validates :password_confirmation, :presence => { :message => "Debe confirmar la contraseña nueva"}, unless: :skip_validations_when_edit
-	# validates_presence_of :pointsale_id, message: "Debe seleccionar el punto de venta al que pertenecerá el usuario.", :on => [:create, :update], unless: :skip_validations_from_pointsale
-	validates_presence_of :usertype, message: "Debe seleccionar el tipo de usuario, con este se determinara los permisos que tendrá dentro del sistema.", :on => [:create, :update], unless: :skip_validations_from_pointsale
+  validates :pointsale_id, presence: { message: "Debe seleccionar un almacén o un punto de venta al que pertenecerá el usuario." }, if: Proc { |c| c.warehouse_id.blank? && c.usertype != 'A' }, on: [:create, :update], unless: :skip_validations_from_pointsale
+  validates :warehouse_id, presence: { message: "Debe seleccionar un almacén o un punto de venta al que pertenecerá el usuario." }, if: Proc { |c| c.pointsale_id.blank? && c.usertype != 'A' }, on: [:create, :update], unless: :skip_validations_from_pointsale
 
-  validates :pointsale_id , presence: { message: "Debe seleccionar un almacén o un punto de venta al que pertenecerá el usuario." },
-  :if => Proc.new {|c| c.warehouse_id.blank?}, :on => [:create, :update], unless: :skip_validations_from_pointsale
-  validates :warehouse_id , presence: { message: "Debe seleccionar un almacén o un punto de venta al que pertenecerá el usuario." },
-  :if => Proc.new {|c| c.pointsale_id.blank?}, :on => [:create, :update], unless: :skip_validations_from_pointsale
+  validates :userid, uniqueness: { message: "El usuario ya fue utilizado, favor de especificar otro." }
 
-	validates :userid, uniqueness: { message: "El usuario ya fue utilizado, favor de especificar otro." }
+  def full_name
+    "#{first_name} #{last_name}"
+  end
 
-	def full_name
-		"#{first_name} #{last_name}"
-	end
+  def get_open_cash_register
+    open_cash_registers.where(status: 0).last
+  end
 
-	def get_open_cash_register
-		self.open_cash_registers.where(:status => 0).last
-	end
+  def warehouse_or_pointsale
+    if pointsale_id.present?
+      self.warehouse_id = nil
+    elsif warehouse_id.present?
+      self.pointsale_id = nil
+    end
+  end
 
-	def warehouse_or_pointsale
-		if pointsale_id.present?
-			self.warehouse_id = nil
-		elsif warehouse_id.present?
-			self.pointsale_id = nil
-		end
-	end
+  def active_for_authentication?
+    super && active?
+  end
 
-	def active_for_authentication?
-		super && active?
-	end
-
-	def inactive_message
-		"Usuario desactivado, contacte al administrador para activar su cuenta"
-	end
+  def inactive_message
+    "Usuario desactivado, contacte al administrador para activar su cuenta"
+  end
 end

+ 1 - 1
app/views/products/_form_remote.html.erb

@@ -59,7 +59,7 @@
 						<span class="required">*</span>
 					<% end %>
 					<div class="col-md-9">
-						<%= f.collection_select :unit_id, Unit.all, :id, :unit, {:prompt => "Seleccione"}, {:class => "form-control input-medium"}   %>
+						<%= f.collection_select :unit_id, Unit.vigentes, :id, :unit, {:prompt => "Seleccione"}, {:class => "form-control input-medium"}   %>
 					</div>
 				</div>
 			</div>

+ 1 - 1
app/views/units/_form.html.erb

@@ -16,7 +16,7 @@
     </div>
     <div class="form-actions">
       <div class="row">
-        <div class="col-md-offset-3 col-md-9">
+        <div class="col-md-9">
           <%= f.submit 'Guardar', { class: "btn green" } %>
         </div>
       </div>

+ 70 - 33
app/views/users/_form.html.erb

@@ -52,14 +52,14 @@
 								<%= f.label :usertype, "", {:class=>"col-md-3 control-label"} do %> Tipo de usuario
 									<span class="required">*</span><% end %>
 								<div class="col-md-4">
-									<%= f.select :usertype, (current_user.usertype=="A" ? Rails.application.config.usertypes_for_admin : Rails.application.config.usertypes_for_manager), {:prompt => "Seleccione"}, { :class => 'form-control select2' } %> 
+									<%= f.select :usertype, (current_user.usertype=="A" ? Rails.application.config.usertypes_for_admin : Rails.application.config.usertypes_for_manager), {:prompt => "Seleccione"}, { :class => 'form-control select2' } %>
 								</div>
-							</div>               
+							</div>
 							<div class="form-group hidden" id="pointsale_div">
 								<%= f.label :pointsale_id, "", {:class=>"col-md-3 control-label"} do %> Punto de venta
 									<span class="required">*</span><% end %>
 								<div class="col-md-4">
-									<%= f.collection_select :pointsale_id, Pointsale.activos, :id, :name, {:prompt => "Seleccione", :selected => (current_user.usertype == 'G' ? current_user.pointsale_id : @user.pointsale_id) }, {:class => "form-control select2", 
+									<%= f.collection_select :pointsale_id, Pointsale.activos, :id, :name, {:prompt => "Seleccione", :selected => (current_user.usertype == 'G' ? current_user.pointsale_id : @user.pointsale_id) }, {:class => "form-control select2",
 										:disabled => (true if current_user.usertype == 'G')  } %>
 									<%= f.hidden_field :pointsale_id, :value => (current_user.usertype == 'G' ? current_user.pointsale_id : @user.pointsale_id), :id => 'pointsale_id' %>
 								</div>
@@ -71,17 +71,17 @@
 									<div class="col-md-4">
 										<%= f.collection_select :warehouse_id, Warehouse.activos, :id, :name, {:prompt => "Seleccione"}, {:class => "form-control select2" } %>
 									</div>
-								</div>               
-							<% end %>             
+								</div>
+							<% end %>
 							<div class="form-group">
 								<%= f.label :userid, "Nombre de usuario", {:class=>"col-md-3 control-label"} do %> Usuario
 									<span class="required">*</span>
 								<% end %>
 								<div class="col-md-4">
 									<%= f.text_field :userid, {:class=>"form-control", :disabled => @user.persisted?} %>
-									<span class="help-block"> El usuario no debe de contener espacios. </span>                
+									<span class="help-block"> El usuario no debe de contener espacios. </span>
 								</div>
-							</div>  
+							</div>
 							<% unless @user.persisted? %>
 								<div class="form-group">
 									<%= f.label :password, "Contraseña", {:class=>"col-md-3 control-label"} do %> Contraseña
@@ -98,13 +98,13 @@
 									<div class="col-md-4">
 										<%= f.password_field :password_confirmation, {:class=>"form-control"} %>
 									</div>
-								</div>              
+								</div>
 							<% end %>
 						</div>
 						<div class="tab-pane" id="tab2">
 							<h3 class="block">Proporciona los datos particulares del usuario</h3>
 							<div class="form-group">
-								<%= f.label :first_name, "Nombre", {:class=>"col-md-3 control-label"} do %> Nombre 
+								<%= f.label :first_name, "Nombre", {:class=>"col-md-3 control-label"} do %> Nombre
 									<span class="required">*</span>
 								<% end %>
 								<div class="col-md-4">
@@ -121,7 +121,7 @@
 							</div>
 							<div class="form-group">
 								<%= f.label :email, "Correo", {:class=>"col-md-3 control-label"} do %> Correo electrónico <span class="required">*</span>
-								<% end %> 
+								<% end %>
 								<div class="col-md-4">
 									<div class="input-icon">
 										<i class="fa fa-envelope"></i>
@@ -144,19 +144,19 @@
 								<div class="col-md-4">
 									<span class="form-control-static" data-display="user[pointsale_id]"></span>
 								</div>
-							</div> 
+							</div>
 							<div class="form-group hidden" id="warehouse_info_div">
 								<label class="control-label col-md-3">Almacén</label>
 								<div class="col-md-4">
 									<span class="form-control-static" data-display="user[warehouse_id]"></span>
 								</div>
-							</div>               
+							</div>
 							<div class="form-group">
 								<label class="control-label col-md-3">Tipo de usuario</label>
 								<div class="col-md-4">
 									<span class="form-control-static" data-display="user[usertype]"></span>
 								</div>
-							</div>                            
+							</div>
 							<h4 class="form-section">Datos particulares del usuario</h4>
 							<div class="form-group">
 								<label class="control-label col-md-3">Nombre:</label>
@@ -169,7 +169,7 @@
 								<div class="col-md-4">
 									<span class="form-control-static" data-display="user[last_name]"></span>
 								</div>
-							</div>              
+							</div>
 							<div class="form-group">
 								<label class="control-label col-md-3">Correo electrónico:</label>
 								<div class="col-md-4">
@@ -195,46 +195,83 @@
 				</div>
 			</div>
 		</div>
-	<% end %>  
+	<% end %>
 </div>
 <script type="text/javascript">
 	$(document).on("page:change", function() {
 		App.init();
 
 	<% if @user.persisted? %>
-		<% if @user.pointsale.present? %>
+		<% if @user.pointsale.present? && @user.usertype != 'A'%>
 			$('#pointsale_info_div').removeClass('hidden');
 			$('#pointsale_div').removeClass('hidden');
 			$("#user_pointsale_id").select2();
-		<% else %>
+		<% elsif @user.warehouse.present? && @user.usertype != 'A'%>
 			$('#warehouse_info_div').removeClass('hidden');
-			$('#warehouse_div').removeClass('hidden'); 
+			$('#warehouse_div').removeClass('hidden');
 			$("#user_warehouse_id").select2();
 		<% end %>
 	<% end %>
 
-	});  
+	});
 
 	$('#user_pointsale_id').on('change', function() {
 		$('#pointsale_id').val($(this).val());
 	});
 
 	$('#user_usertype').on('change', function() {
-		if($(this).val() == 'S') {
-			$('#warehouse_info_div').removeClass('hidden');
-			$('#pointsale_info_div').addClass('hidden');  
-			$('#user_pointsale_id').select2('val', null);      
-			$('#warehouse_div').removeClass('hidden');
-			$("#user_warehouse_id").select2();
-			$('#pointsale_div').addClass('hidden');  
-		} else {
-			$('#pointsale_info_div').removeClass('hidden');
-			$('#warehouse_info_div').addClass('hidden');  
-			$('#user_warehouse_id').select2('val', null);
-			$('#pointsale_div').removeClass('hidden');
-			$("#user_pointsale_id").select2();
-			$('#warehouse_div').addClass('hidden');  
+		var type = $(this).val();
+		switch(type) {
+			case 'A':
+				$('#pointsale_info_div').addClass('hidden');
+				$('#warehouse_info_div').addClass('hidden');
+				$('#warehouse_div').addClass('hidden');
+				$('#pointsale_div').addClass('hidden');
+				$('#user_warehouse_id').select2('val', null);
+				$('#user_pointsale_id').select2('val', null);
+				break;
+			case 'G':
+				$('#pointsale_info_div').removeClass('hidden');
+				$('#warehouse_info_div').addClass('hidden');
+				$('#user_warehouse_id').select2('val', null);
+				$('#pointsale_div').removeClass('hidden');
+				$("#user_pointsale_id").select2();
+				$('#warehouse_div').addClass('hidden');
+				break;
+			case 'S':
+				$('#warehouse_info_div').removeClass('hidden');
+				$('#pointsale_info_div').addClass('hidden');
+				$('#user_pointsale_id').select2('val', null);
+				$('#warehouse_div').removeClass('hidden');
+				$("#user_warehouse_id").select2();
+				$('#pointsale_div').addClass('hidden');
+				break;
+			case 'C':
+				$('#pointsale_info_div').removeClass('hidden');
+				$('#warehouse_info_div').addClass('hidden');
+				$('#user_warehouse_id').select2('val', null);
+				$('#pointsale_div').removeClass('hidden');
+				$("#user_pointsale_id").select2();
+				$('#warehouse_div').addClass('hidden');
+				break;
 		}
+
+
+		// if($(this).val() == 'S') {
+		// 	$('#warehouse_info_div').removeClass('hidden');
+		// 	$('#pointsale_info_div').addClass('hidden');
+		// 	$('#user_pointsale_id').select2('val', null);
+		// 	$('#warehouse_div').removeClass('hidden');
+		// 	$("#user_warehouse_id").select2();
+		// 	$('#pointsale_div').addClass('hidden');
+		// } else {
+		// 	$('#pointsale_info_div').removeClass('hidden');
+		// 	$('#warehouse_info_div').addClass('hidden');
+		// 	$('#user_warehouse_id').select2('val', null);
+		// 	$('#pointsale_div').removeClass('hidden');
+		// 	$("#user_pointsale_id").select2();
+		// 	$('#warehouse_div').addClass('hidden');
+		// }
 	});
 
 </script>

+ 1 - 0
config/application.rb

@@ -25,6 +25,7 @@ module Pos
     config.action_view.embed_authenticity_token_in_remote_forms = true
     config.active_record.raise_in_transactional_callbacks = true
     config.usertypes_for_admin = {
+      "Administrador" => "A",
       "Gerente" => "G",
       "Caja" => "C",
       "Almacenista" => "S"