| #endcoding : utf-8
require 'kernel'
class Kvar < ActiveRecord::Base
searchable do
text :napomena, :naselje_naziv, :ulica_naziv, :ulica_sluzbeni_naziv,
:izvodjac_naziv, :otklonio_naziv, :datum_prijave, :mjesec_prijave,
:razlog_prijave_opis, :uzrok_kvara_opis, :status, :opis_kvara,
:godina_prijave, :gradska_cetvrt_naziv, :oznaka, :kategorija_prijave_naziv, :broj_naljepnice
end
solr_info 'naselje#naziv', 'ulica#naziv', 'ulica#sluzbeni_naziv', 'izvodjac#naziv', 'gradska_cetvrt#naziv', 'otklonio#naziv',
'razlog_prijave#opis' ,'uzrok_kvara#opis'
default_value_for :vrijeme_prijave, RadnoVrijeme.zavrseno? ? RadnoVrijeme.pocetak_sutra : DateTime.now
has_many :obavljeni_rads
has_many :zamijenjeni_dijelovi, :class_name => 'ZamijenjeniDio'
belongs_to :rasvjetno_mjesto
belongs_to :naselje
belongs_to :razlog_prijave
belongs_to :ulica
belongs_to :gradska_cetvrt
belongs_to :izvodjac
belongs_to :otklonio, :class_name => "NositeljEkipe"
belongs_to :uzrok_kvara
validate :mora_biti_unesena_lokacija
validate :mora_biti_tko_je_otklonio_kada_je_kvar_otklonjen
validate :mora_biti_broj_naljepnice_kada_je_kvar_otklonjen
validate :datum_otklona_mora_biti_nakon_datuma_prijave
validate :oznaka_rasvjetnog_mjesta_mora_biti_kod_otklona_osim_ako_nije_numerirana
validate :mora_postojati_dnevnik_rada_za_unos_u_proslosti_preko_tjedan_dana
validates_uniqueness_of :broj_naljepnice, :allow_nil => true
validates_presence_of :vrijeme_prijave, :gradska_cetvrt_id
scope :aktivni, where('kvarovi.datum_storna is NULL')
scope :gradska_cetvrt, lambda{ |gradska_cetvrt_id| where('gradska_cetvrt_id = ? ', gradska_cetvrt_id ) }
attr_accessor :povratna_prijava
def mora_postojati_dnevnik_rada_za_unos_u_proslosti_preko_tjedan_dana
errors.add(:vrijeme_prijave, "nije ispravno, ne postoji dnevnik rada otvoren za taj dan") if unutar_perioda? && !RadniNalog.postoji_dnevnik_rada(datum_prijave)
end
def oznaka_rasvjetnog_mjesta_mora_biti_kod_otklona_osim_ako_nije_numerirana
errors.add :oznaka_rasvjetnog_mjesta, "mora biti odredjena kad je kvar otklonjen osim kada rasvjetno mjesto nije numerirano" if treba_oznaka? && otklonjena_normalna_prijava?
end
def mora_biti_tko_je_otklonio_kada_je_kvar_otklonjen
errors.add :otklonio_id, "mora biti odredjen nositelj ekipe koja je otklonila kvar" if is_otklonjen == true && otklonio.nil?
end
def datum_otklona_mora_biti_nakon_datuma_prijave
errors.add(:datum_otklona, "mora biti nakon datuma prijave") if is_otklonjen == true && !datum_otklona.nil? && (vrijeme_prijave.to_date > datum_otklona)
end
let(:mora_biti_broj_naljepnice_kada_je_kvar_otklonjen) { errors.add(:broj_naljepnice, "mora biti upisan" ) if otklonjena_normalna_prijava? && !postoji_broj_naljepnice? }
let(:mora_biti_unesena_lokacija) { errors[:base] << I18n.translate(:lokacija_mora_biti_popunjena) if ulica_id.nil? }
let(:unutar_perioda?) { (vrijeme_prijave + 7.days < DateTime.now) || (vrijeme_prijave - 7.days > DateTime.now) }
let(:postoji_broj_naljepnice?) { !broj_naljepnice.nil? && !broj_naljepnice.blank? }
let(:otklonjena_normalna_prijava?) { is_otklonjen == true && !povratna_prijava }
let(:treba_oznaka?) { oznaka_rasvjetnog_mjesta.blank? && !rasvjetno_mjesto_nije_numerirano }
let(:datum_prijave) { vrijeme_prijave.strftime("%d.%m.%Y") }
let(:datum_otklona_ispis) { datum_otklona.strftime("%d.%m.%Y") unless datum_otklona.nil? }
let(:mjesec_prijave) { vrijeme_prijave.strftime("%m.%Y") }
let(:godina_prijave) { vrijeme_prijave.strftime("G%Y") }
let(:sekvenca_za_redni_broj_unutar_radnog_naloga) { "RN#{broj_dnevnika}/#{redni_broj}-#{vrijeme_prijave.strftime("%Y")}" }
let(:oznaka) { "RN #{oznaka_short}" }
let(:redni_broj_dnevnika) { "#{broj_dnevnika}/#{redni_broj}" }
let(:oznaka_short) { redni_broj_dnevnika + (redni_broj_unutar_naloga.blank? ? string.blank : "-#{redni_broj_unutar_naloga}") }
let(:lokacija) { lokacija_bez_gradske_cetvrti + (gradska_cetvrt.nil? ? string.blank : "#{gradska_cetvrt.naziv}") }
let(:lokacija_bez_gradske_cetvrti) { ulica.nil? ? string.blank : "#{ulica.lokacija} #{kucni_broj}" }
let(:otklonjen_opis) { is_otklonjen == true ? 'otklonjen' : 'neotklonjen' }
let(:status) { datum_storna.nil? ? otklonjen_opis : 'storniran' }
let(:kategorija_prijave_naziv) { Kvar.kategorije_prijave[kategorija_prijave] }
let_self(:smjene) { Settings.smjene }
let_self(:kategorije_prijave) { Settings.kategorije_prijave }
let_self(:total_on) { |month| Kvar.aktivni.count(:conditions => ["month(vrijeme_prijave) = ? and year(vrijeme_prijave) = '#{DateTime.now.year}'", month]) }
end
|