mirror of
https://github.com/internetee/registry.git
synced 2025-08-06 09:45:11 +02:00
Merge branch 'master' into story/115762063-show-historical-nested
This commit is contained in:
commit
368b9978ef
70 changed files with 1096 additions and 467 deletions
|
@ -49,7 +49,8 @@ module Repp
|
|||
response_code: status,
|
||||
api_user_name: current_user.try(:username),
|
||||
api_user_registrar: current_user.try(:registrar).try(:to_s),
|
||||
ip: request.ip
|
||||
ip: request.ip,
|
||||
uuid: request.try(:uuid)
|
||||
})
|
||||
end
|
||||
|
||||
|
|
|
@ -29,13 +29,13 @@ $(document).on 'page:change', ->
|
|||
$('.js-contact-form').trigger('restoreDefault')
|
||||
|
||||
$('[data-legal-document]').each (i, fileInput)->
|
||||
minSize = 8 * 1024 # 8kB
|
||||
minSize = 3 * 1024 # 3kB
|
||||
maxSize = 8 * 1024 * 1024; # 8 MB
|
||||
$(fileInput).closest('form').submit (e) ->
|
||||
if (files = fileInput.files).length
|
||||
fileSize = files[0].size
|
||||
if fileSize < minSize
|
||||
alert 'Document size should be more than 8kB'
|
||||
alert 'Document size should be more than 3kB'
|
||||
return false
|
||||
else if fileSize > maxSize
|
||||
alert 'Document size should be less than 8MB'
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
class Admin::AccountActivitiesController < AdminController
|
||||
load_and_authorize_resource
|
||||
before_action :set_default_dates, only: [:index]
|
||||
|
||||
def index # rubocop: disable Metrics/AbcSize
|
||||
params[:q] ||= {}
|
||||
|
||||
ca_cache = params[:q][:created_at_lteq]
|
||||
begin
|
||||
|
@ -41,4 +41,20 @@ class Admin::AccountActivitiesController < AdminController
|
|||
|
||||
params[:q][:created_at_lteq] = ca_cache
|
||||
end
|
||||
|
||||
def set_default_dates
|
||||
params[:q] ||= {}
|
||||
|
||||
if params[:q][:created_at_gteq].nil? && params[:q][:created_at_lteq].nil? && params[:created_after].present?
|
||||
|
||||
default_date = params[:created_after]
|
||||
|
||||
if !['today', 'tomorrow', 'yesterday'].include?(default_date)
|
||||
default_date = 'today'
|
||||
end
|
||||
|
||||
params[:q][:created_at_gteq] = Date.send(default_date).strftime("%Y-%m-%d")
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
|
|
@ -10,22 +10,22 @@ class Admin::ContactsController < AdminController
|
|||
search_params[:registrant_domains_id_not_null] = 1
|
||||
end
|
||||
|
||||
@q = Contact.includes(:registrar).search(search_params)
|
||||
@q = Contact.includes(:registrar).joins(:registrar).select('contacts.*, registrars.name').search(search_params)
|
||||
@contacts = @q.result(distinct: :true).page(params[:page])
|
||||
|
||||
if params[:statuses_contains]
|
||||
contacts = Contact.includes(:registrar).where(
|
||||
contacts = Contact.includes(:registrar).joins(:registrar).select('contacts.*, registrars.name').where(
|
||||
"contacts.statuses @> ?::varchar[]", "{#{params[:statuses_contains].join(',')}}"
|
||||
)
|
||||
else
|
||||
contacts = Contact.includes(:registrar)
|
||||
contacts = Contact.includes(:registrar).joins(:registrar).select('contacts.*, registrars.name')
|
||||
end
|
||||
contacts = contacts.where("ident_country_code is null or ident_country_code=''") if params[:only_no_country_code].eql?('1')
|
||||
|
||||
|
||||
normalize_search_parameters do
|
||||
@q = contacts.search(search_params)
|
||||
@contacts = @q.result(distinct: :true).page(params[:page])
|
||||
@q = contacts.includes(:registrar).joins(:registrar).select('contacts.*, registrars.name').search(search_params)
|
||||
@contacts = @q.result.uniq.page(params[:page])
|
||||
end
|
||||
|
||||
@contacts = @contacts.per(params[:results_per_page]) if params[:results_per_page].to_i > 0
|
||||
|
|
|
@ -9,7 +9,7 @@ class Admin::DomainsController < AdminController
|
|||
params[:q] ||= {}
|
||||
if params[:statuses_contains]
|
||||
domains = Domain.includes(:registrar, :registrant).where(
|
||||
"statuses @> ?::varchar[]", "{#{params[:statuses_contains].join(',')}}"
|
||||
"domains.statuses @> ?::varchar[]", "{#{params[:statuses_contains].join(',')}}"
|
||||
)
|
||||
else
|
||||
domains = Domain.includes(:registrar, :registrant)
|
||||
|
|
|
@ -1,13 +1,33 @@
|
|||
class Admin::EppLogsController < AdminController
|
||||
load_and_authorize_resource class: ApiLog::EppLog
|
||||
before_action :set_default_dates, only: [:index]
|
||||
|
||||
def index
|
||||
@q = ApiLog::EppLog.search(params[:q])
|
||||
@q.sorts = 'id desc' if @q.sorts.empty?
|
||||
@epp_logs = @q.result.page(params[:page])
|
||||
|
||||
@epp_logs = @q.result
|
||||
@epp_logs = @epp_logs.where("extract(epoch from created_at) >= extract(epoch from ?::timestamp)", Time.parse(params[:q][:created_at_gteq])) if params[:q][:created_at_gteq].present?
|
||||
@epp_logs = @epp_logs.where("extract(epoch from created_at) <= extract(epoch from ?::timestamp)", Time.parse(params[:q][:created_at_lteq])) if params[:q][:created_at_lteq].present?
|
||||
@epp_logs = @epp_logs.page(params[:page])
|
||||
end
|
||||
|
||||
def show
|
||||
@epp_log = ApiLog::EppLog.find(params[:id])
|
||||
end
|
||||
|
||||
def set_default_dates
|
||||
params[:q] ||= {}
|
||||
|
||||
if params[:q][:created_at_gteq].nil? && params[:q][:created_at_lteq].nil? && params[:created_after].present?
|
||||
default_date = params[:created_after]
|
||||
|
||||
if !['today', 'tomorrow', 'yesterday'].include?(default_date)
|
||||
default_date = 'today'
|
||||
end
|
||||
|
||||
params[:q][:created_at_gteq] = Date.send(default_date).strftime("%Y-%m-%d")
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
|
|
@ -57,7 +57,7 @@ class Admin::RegistrarsController < AdminController
|
|||
def registrar_params
|
||||
params.require(:registrar).permit(
|
||||
:name, :reg_no, :vat_no, :street, :city, :state, :zip, :billing_address,
|
||||
:country_code, :email, :phone, :billing_email, :code
|
||||
:country_code, :email, :phone, :billing_email, :code, :test_registrar
|
||||
)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,13 +1,34 @@
|
|||
class Admin::ReppLogsController < AdminController
|
||||
load_and_authorize_resource class: ApiLog::ReppLog
|
||||
before_action :set_default_dates, only: [:index]
|
||||
|
||||
def index
|
||||
@q = ApiLog::ReppLog.search(params[:q])
|
||||
@q.sorts = 'id desc' if @q.sorts.empty?
|
||||
@repp_logs = @q.result.page(params[:page])
|
||||
|
||||
@repp_logs = @q.result
|
||||
@repp_logs = @repp_logs.where("extract(epoch from created_at) >= extract(epoch from ?::timestamp)", Time.parse(params[:q][:created_at_gteq])) if params[:q][:created_at_gteq].present?
|
||||
@repp_logs = @repp_logs.where("extract(epoch from created_at) <= extract(epoch from ?::timestamp)", Time.parse(params[:q][:created_at_lteq])) if params[:q][:created_at_lteq].present?
|
||||
@repp_logs = @repp_logs.page(params[:page])
|
||||
end
|
||||
|
||||
def show
|
||||
@repp_log = ApiLog::ReppLog.find(params[:id])
|
||||
end
|
||||
|
||||
def set_default_dates
|
||||
params[:q] ||= {}
|
||||
|
||||
if params[:q][:created_at_gteq].nil? && params[:q][:created_at_lteq].nil? && params[:created_after].present?
|
||||
|
||||
default_date = params[:created_after]
|
||||
|
||||
if !['today', 'tomorrow', 'yesterday'].include?(default_date)
|
||||
default_date = 'today'
|
||||
end
|
||||
|
||||
params[:q][:created_at_gteq] = Date.send(default_date).strftime("%Y-%m-%d")
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
|
|
@ -55,6 +55,10 @@ class ApplicationController < ActionController::Base
|
|||
end
|
||||
end
|
||||
|
||||
def info_for_paper_trail
|
||||
{ uuid: request.uuid }
|
||||
end
|
||||
|
||||
def user_for_paper_trail
|
||||
user_log_str(current_user)
|
||||
end
|
||||
|
|
|
@ -19,6 +19,8 @@ class Epp::ContactsController < EppController
|
|||
authorize! :create, Epp::Contact
|
||||
@contact = Epp::Contact.new(params[:parsed_frame], current_user.registrar)
|
||||
|
||||
@contact.add_legal_file_to_new(params[:parsed_frame])
|
||||
|
||||
if @contact.save
|
||||
render_epp_response '/epp/contacts/create'
|
||||
else
|
||||
|
@ -29,7 +31,7 @@ class Epp::ContactsController < EppController
|
|||
def update
|
||||
authorize! :update, @contact, @password
|
||||
|
||||
if @contact.update_attributes(params[:parsed_frame])
|
||||
if @contact.update_attributes(params[:parsed_frame], current_user)
|
||||
render_epp_response 'epp/contacts/update'
|
||||
else
|
||||
handle_errors(@contact)
|
||||
|
@ -39,7 +41,7 @@ class Epp::ContactsController < EppController
|
|||
def delete
|
||||
authorize! :delete, @contact, @password
|
||||
|
||||
if @contact.destroy_and_clean
|
||||
if @contact.destroy_and_clean(params[:parsed_frame])
|
||||
render_epp_response '/epp/contacts/delete'
|
||||
else
|
||||
handle_errors(@contact)
|
||||
|
|
|
@ -30,6 +30,8 @@ class Epp::DomainsController < EppController
|
|||
handle_errors and return unless balance_ok?('create') # loads pricelist in this method
|
||||
|
||||
ActiveRecord::Base.transaction do
|
||||
@domain.add_legal_file_to_new(params[:parsed_frame])
|
||||
|
||||
if @domain.save # TODO: Maybe use validate: false here because we have already validated the domain?
|
||||
current_user.registrar.debit!({
|
||||
sum: @domain_pricelist.price.amount,
|
||||
|
|
|
@ -361,7 +361,7 @@ class EppController < ApplicationController
|
|||
if request_command == 'login' && frame.present?
|
||||
frame.gsub!(/pw>.+<\//, 'pw>[FILTERED]</')
|
||||
end
|
||||
trimmed_request = frame.gsub(/<eis:legalDocument([^>]+)>([^<])+<\/eis:legalDocument>/, "<eis:legalDocument>[FILTERED]</eis:legalDocument>")
|
||||
trimmed_request = frame.gsub(/<eis:legalDocument([^>]+)>([^<])+<\/eis:legalDocument>/, "<eis:legalDocument>[FILTERED]</eis:legalDocument>") if frame.present?
|
||||
|
||||
ApiLog::EppLog.create({
|
||||
request: trimmed_request,
|
||||
|
@ -371,7 +371,8 @@ class EppController < ApplicationController
|
|||
response: @response,
|
||||
api_user_name: @api_user.try(:username) || current_user.try(:username) || 'api-public',
|
||||
api_user_registrar: @api_user.try(:registrar).try(:to_s) || current_user.try(:registrar).try(:to_s),
|
||||
ip: request.ip
|
||||
ip: request.ip,
|
||||
uuid: request.uuid
|
||||
})
|
||||
end
|
||||
# rubocop: enable Metrics/CyclomaticComplexity
|
||||
|
|
|
@ -22,18 +22,18 @@ class Registrant::DomainDeleteConfirmsController < RegistrantController
|
|||
verification_token: params[:token])
|
||||
if params[:rejected]
|
||||
if @registrant_verification.domain_registrant_delete_reject!
|
||||
flash[:notice] = t(:registrant_domain_verification_rejected)
|
||||
flash[:notice] = t(:registrant_domain_delete_rejected)
|
||||
redirect_to registrant_domain_delete_confirm_path(@domain.id, rejected: true)
|
||||
else
|
||||
flash[:alert] = t(:registrant_domain_verification_rejected_failed)
|
||||
flash[:alert] = t(:registrant_domain_delete_rejected_failed)
|
||||
return render 'show'
|
||||
end
|
||||
elsif params[:confirmed]
|
||||
if @registrant_verification.domain_registrant_delete_confirm!
|
||||
flash[:notice] = t(:registrant_domain_verification_confirmed)
|
||||
flash[:notice] = t(:registrant_domain_delete_confirmed)
|
||||
redirect_to registrant_domain_delete_confirm_path(@domain.id, confirmed: true)
|
||||
else
|
||||
flash[:alert] = t(:registrant_domain_verification_confirmed_failed)
|
||||
flash[:alert] = t(:registrant_domain_delete_confirmed_failed)
|
||||
return render 'show'
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,17 +3,30 @@ class DomainDeleteConfirmJob < Que::Job
|
|||
# it's recommended to keep transaction against job table as short as possible.
|
||||
ActiveRecord::Base.transaction do
|
||||
domain = Epp::Domain.find(domain_id)
|
||||
|
||||
case action
|
||||
when RegistrantVerification::CONFIRMED
|
||||
domain.poll_message!(:poll_pending_delete_confirmed_by_registrant)
|
||||
domain.apply_pending_delete!
|
||||
raise_errors!(domain)
|
||||
|
||||
when RegistrantVerification::REJECTED
|
||||
DomainMailer.pending_delete_rejected_notification(domain_id, true).deliver
|
||||
domain.statuses.delete(DomainStatus::PENDING_DELETE_CONFIRMATION)
|
||||
domain.poll_message!(:poll_pending_delete_rejected_by_registrant)
|
||||
|
||||
domain.cancel_pending_delete
|
||||
domain.save(validate: false)
|
||||
raise_errors!(domain)
|
||||
|
||||
DomainMailer.pending_delete_rejected_notification(domain_id, true).deliver
|
||||
end
|
||||
|
||||
destroy # it's best to destroy the job in the same transaction
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
def raise_errors!(domain)
|
||||
throw "domain #{domain.name} failed with errors #{domain.errors.full_messages}" if domain.errors.any?
|
||||
end
|
||||
end
|
||||
|
|
17
app/jobs/domain_delete_job.rb
Normal file
17
app/jobs/domain_delete_job.rb
Normal file
|
@ -0,0 +1,17 @@
|
|||
class DomainDeleteJob < Que::Job
|
||||
|
||||
def run(domain_id)
|
||||
domain = Domain.find(domain_id)
|
||||
|
||||
::PaperTrail.whodunnit = "job - #{self.class.name}"
|
||||
WhoisRecord.where(domain_id: domain.id).destroy_all
|
||||
|
||||
domain.destroy
|
||||
bye_bye = domain.versions.last
|
||||
domain.registrar.messages.create!(
|
||||
body: "#{I18n.t(:domain_deleted)}: #{domain.name}",
|
||||
attached_obj_id: bye_bye.id,
|
||||
attached_obj_type: bye_bye.class.to_s
|
||||
)
|
||||
end
|
||||
end
|
10
app/jobs/domain_set_delete_candidate_job.rb
Normal file
10
app/jobs/domain_set_delete_candidate_job.rb
Normal file
|
@ -0,0 +1,10 @@
|
|||
class DomainSetDeleteCandidateJob < Que::Job
|
||||
|
||||
def run(domain_id)
|
||||
domain = Domain.find(domain_id)
|
||||
domain.statuses << DomainStatus::DELETE_CANDIDATE
|
||||
::PaperTrail.whodunnit = "job - #{self.class.name}"
|
||||
domain.save(validate: false)
|
||||
DomainDeleteJob.enqueue(domain.id, run_at: rand(((24*60) - (DateTime.now.hour * 60 + DateTime.now.minute))).minutes.from_now)
|
||||
end
|
||||
end
|
|
@ -7,8 +7,13 @@ class DomainUpdateConfirmJob < Que::Job
|
|||
case action
|
||||
when RegistrantVerification::CONFIRMED
|
||||
domain.poll_message!(:poll_pending_update_confirmed_by_registrant)
|
||||
raise_errors!(domain)
|
||||
|
||||
domain.apply_pending_update!
|
||||
raise_errors!(domain)
|
||||
|
||||
domain.clean_pendings!
|
||||
raise_errors!(domain)
|
||||
when RegistrantVerification::REJECTED
|
||||
domain.send_mail :pending_update_rejected_notification_for_new_registrant
|
||||
domain.poll_message!(:poll_pending_update_rejected_by_registrant)
|
||||
|
@ -17,4 +22,8 @@ class DomainUpdateConfirmJob < Que::Job
|
|||
destroy # it's best to destroy the job in the same transaction
|
||||
end
|
||||
end
|
||||
|
||||
def raise_errors!(domain)
|
||||
throw "domain #{domain.name} failed with errors #{domain.errors.full_messages}" if domain.errors.any?
|
||||
end
|
||||
end
|
||||
|
|
|
@ -4,6 +4,11 @@ class ContactMailer < ApplicationMailer
|
|||
def email_updated(old_email, email, contact_id, should_deliver)
|
||||
@contact = Contact.find_by(id: contact_id)
|
||||
@old_email = old_email
|
||||
unless @contact
|
||||
Rails.logger.info "Cannot send email in #{self.class.name}##{__method__} with contact_id #{contact_id}. It cannot be found"
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
return unless email || @contact
|
||||
return if delivery_off?(@contact, should_deliver)
|
||||
|
|
|
@ -9,12 +9,34 @@ class DomainMailer < ApplicationMailer
|
|||
compose_from(params)
|
||||
end
|
||||
|
||||
def registrant_updated_notification_for_new_registrant(params)
|
||||
compose_from(params)
|
||||
|
||||
def registrant_updated_notification_for_new_registrant(domain_id, old_registrant_id, new_registrant_id, should_deliver)
|
||||
@domain = Domain.find_by(id: domain_id)
|
||||
return unless @domain
|
||||
return if delivery_off?(@domain, should_deliver)
|
||||
|
||||
@old_registrant = Registrant.find(old_registrant_id)
|
||||
@new_registrant = Registrant.find(new_registrant_id)
|
||||
|
||||
return if whitelist_blocked?(@new_registrant.email)
|
||||
mail(to: format(@new_registrant.email),
|
||||
subject: "#{I18n.t(:registrant_updated_notification_for_new_registrant_subject,
|
||||
name: @domain.name)} [#{@domain.name}]")
|
||||
end
|
||||
|
||||
def registrant_updated_notification_for_old_registrant(params)
|
||||
compose_from(params)
|
||||
|
||||
def registrant_updated_notification_for_old_registrant(domain_id, old_registrant_id, new_registrant_id, should_deliver)
|
||||
@domain = Domain.find_by(id: domain_id)
|
||||
return unless @domain
|
||||
return if delivery_off?(@domain, should_deliver)
|
||||
|
||||
@old_registrant = Registrant.find(old_registrant_id)
|
||||
@new_registrant = Registrant.find(new_registrant_id)
|
||||
|
||||
return if whitelist_blocked?(@old_registrant.email)
|
||||
mail(to: format(@old_registrant.email),
|
||||
subject: "#{I18n.t(:registrant_updated_notification_for_old_registrant_subject,
|
||||
name: @domain.name)} [#{@domain.name}]")
|
||||
end
|
||||
|
||||
def pending_update_rejected_notification_for_new_registrant(params)
|
||||
|
|
|
@ -6,7 +6,6 @@ class AccountActivity < ActiveRecord::Base
|
|||
belongs_to :bank_transaction
|
||||
belongs_to :invoice
|
||||
|
||||
attr_accessor :registrar
|
||||
|
||||
CREATE = 'create'
|
||||
RENEW = 'renew'
|
||||
|
@ -24,14 +23,15 @@ class AccountActivity < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def to_csv
|
||||
attributes = %w(registrar description activity_type created_at sum)
|
||||
attributes = %w(description activity_type created_at sum)
|
||||
|
||||
CSV.generate(headers: true) do |csv|
|
||||
csv << %w(registrar description activity_type receipt_date sum)
|
||||
|
||||
all.each do |x| # rubocop:disable Rails/FindEach
|
||||
x.registrar = Registrar.find(x.account_id).try(:code)
|
||||
csv << attributes.map { |attr| x.send(attr) }
|
||||
attrs = [x.account.registrar.try(:code)]
|
||||
attrs += attributes.map { |attr| x.send(attr) }
|
||||
csv << attrs
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -2,7 +2,6 @@ class BankTransaction < ActiveRecord::Base
|
|||
include Versions
|
||||
belongs_to :bank_statement
|
||||
has_one :account_activity
|
||||
has_many :directo_records, as: :item, class_name: 'Directo'# Deprecated
|
||||
|
||||
scope :unbinded, lambda {
|
||||
where('id NOT IN (SELECT bank_transaction_id FROM account_activities where bank_transaction_id IS NOT NULL)')
|
||||
|
|
|
@ -12,6 +12,10 @@ class Contact < ActiveRecord::Base
|
|||
# TODO: remove later
|
||||
has_many :depricated_statuses, class_name: 'DepricatedContactStatus', dependent: :destroy
|
||||
|
||||
has_paper_trail class_name: "ContactVersion", meta: { children: :children_log }
|
||||
|
||||
attr_accessor :legal_document_id
|
||||
|
||||
accepts_nested_attributes_for :legal_documents
|
||||
|
||||
validates :name, :phone, :email, :ident, :ident_type,
|
||||
|
@ -32,6 +36,7 @@ class Contact < ActiveRecord::Base
|
|||
validate :val_ident_valid_format?
|
||||
validate :uniq_statuses?
|
||||
validate :validate_html
|
||||
validate :val_country_code
|
||||
|
||||
after_initialize do
|
||||
self.statuses = [] if statuses.nil?
|
||||
|
@ -39,7 +44,7 @@ class Contact < ActiveRecord::Base
|
|||
self.ident_updated_at = Time.zone.now if new_record? && ident_updated_at.blank?
|
||||
end
|
||||
|
||||
before_validation :set_ident_country_code
|
||||
before_validation :to_upcase_country_code
|
||||
before_validation :prefix_code
|
||||
before_create :generate_auth_info
|
||||
|
||||
|
@ -76,7 +81,7 @@ class Contact < ActiveRecord::Base
|
|||
|
||||
ORG = 'org'
|
||||
PRIV = 'priv'
|
||||
BIRTHDAY = 'birthday'
|
||||
BIRTHDAY = 'birthday'.freeze
|
||||
PASSPORT = 'passport'
|
||||
|
||||
IDENT_TYPES = [
|
||||
|
@ -247,6 +252,8 @@ class Contact < ActiveRecord::Base
|
|||
if ident.size != 8 || !(ident =~/\A[0-9]{8}\z/)
|
||||
errors.add(:ident, err_msg)
|
||||
end
|
||||
when BIRTHDAY
|
||||
errors.add(:ident, err_msg) if id.blank? # only for create action right now. Later for all of them
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -279,6 +286,10 @@ class Contact < ActiveRecord::Base
|
|||
!org?
|
||||
end
|
||||
|
||||
def birthday?
|
||||
ident_type == BIRTHDAY
|
||||
end
|
||||
|
||||
def generate_auth_info
|
||||
return if @generate_auth_info_disabled
|
||||
return if auth_info.present?
|
||||
|
@ -330,22 +341,36 @@ class Contact < ActiveRecord::Base
|
|||
# TODO: refactor, it should not allow to destroy with normal destroy,
|
||||
# no need separate method
|
||||
# should use only in transaction
|
||||
def destroy_and_clean
|
||||
def destroy_and_clean frame
|
||||
if domains_present?
|
||||
errors.add(:domains, :exist)
|
||||
return false
|
||||
end
|
||||
|
||||
legal_document_data = Epp::Domain.parse_legal_document_from_frame(frame)
|
||||
|
||||
if legal_document_data
|
||||
|
||||
doc = LegalDocument.create(
|
||||
documentable_type: Contact,
|
||||
document_type: legal_document_data[:type],
|
||||
body: legal_document_data[:body]
|
||||
)
|
||||
self.legal_documents = [doc]
|
||||
self.legal_document_id = doc.id
|
||||
self.save
|
||||
end
|
||||
destroy
|
||||
end
|
||||
|
||||
def set_ident_country_code
|
||||
return true unless ident_country_code_changed? && ident_country_code.present?
|
||||
code = Country.new(ident_country_code)
|
||||
if code
|
||||
self.ident_country_code = code.alpha2
|
||||
else
|
||||
errors.add(:ident, :invalid_country_code)
|
||||
end
|
||||
def to_upcase_country_code
|
||||
self.ident_country_code = ident_country_code.upcase if ident_country_code
|
||||
self.country_code = country_code.upcase if country_code
|
||||
end
|
||||
|
||||
def val_country_code
|
||||
errors.add(:ident, :invalid_country_code) unless Country.new(ident_country_code)
|
||||
errors.add(:ident, :invalid_country_code) unless Country.new(country_code)
|
||||
end
|
||||
|
||||
def related_domain_descriptions
|
||||
|
@ -525,9 +550,15 @@ class Contact < ActiveRecord::Base
|
|||
]).present?
|
||||
end
|
||||
|
||||
def update_related_whois_records
|
||||
names = related_domain_descriptions.keys
|
||||
UpdateWhoisRecordJob.enqueue(names, :domain) if names.present?
|
||||
end
|
||||
def update_related_whois_records
|
||||
names = related_domain_descriptions.keys
|
||||
UpdateWhoisRecordJob.enqueue(names, :domain) if names.present?
|
||||
end
|
||||
|
||||
def children_log
|
||||
log = HashWithIndifferentAccess.new
|
||||
log[:legal_documents]= [legal_document_id]
|
||||
log
|
||||
end
|
||||
|
||||
end
|
||||
|
|
24
app/models/counter.rb
Normal file
24
app/models/counter.rb
Normal file
|
@ -0,0 +1,24 @@
|
|||
class Counter
|
||||
def initialize value = 0
|
||||
@value = value
|
||||
end
|
||||
attr_accessor :value
|
||||
def method_missing *args, &blk
|
||||
@value.send(*args, &blk)
|
||||
end
|
||||
def to_s
|
||||
@value.to_s
|
||||
end
|
||||
|
||||
def now
|
||||
@value
|
||||
end
|
||||
|
||||
# pre-increment ".+" when x not present
|
||||
def next(x = 1)
|
||||
@value += x
|
||||
end
|
||||
def prev(x = 1)
|
||||
@value -= x
|
||||
end
|
||||
end
|
|
@ -1,4 +1,5 @@
|
|||
class Directo < ActiveRecord::Base
|
||||
DOMAIN_TO_PRODUCT = {"ee" => "01EE", "com.ee" => "02COM", "pri.ee" => "03PRI", "fie.ee"=>"04FIE", "med.ee" => "05MED"}.freeze
|
||||
belongs_to :item, polymorphic: true
|
||||
|
||||
def self.send_receipts
|
||||
|
@ -52,9 +53,127 @@ class Directo < ActiveRecord::Base
|
|||
def self.dump_result_to_db mappers, xml
|
||||
Nokogiri::XML(xml).css("Result").each do |res|
|
||||
obj = mappers[res.attributes["docid"].value.to_i]
|
||||
obj.directo_records.create!(response: res.as_json.to_h)
|
||||
obj.directo_records.create!(response: res.as_json.to_h, invoice_number: obj.number)
|
||||
obj.update_columns(in_directo: true)
|
||||
Rails.logger.info("[DIRECTO] Invoice #{res.attributes["docid"].value} was pushed and return is #{res.as_json.to_h.inspect}")
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
def self.send_monthly_invoices(debug: false)
|
||||
@debug = debug
|
||||
I18n.locale = :et
|
||||
month = Time.now - 1.month
|
||||
invoices_until = month.end_of_month
|
||||
date_format = "%Y-%m-%d"
|
||||
invoice_counter= Counter.new
|
||||
|
||||
min_directo = Setting.directo_monthly_number_min.presence.try(:to_i)
|
||||
max_directo = Setting.directo_monthly_number_max.presence.try(:to_i)
|
||||
last_directo = [Setting.directo_monthly_number_last.presence.try(:to_i), min_directo].compact.max || 0
|
||||
if max_directo && max_directo <= last_directo
|
||||
raise "Directo counter is out of period (max allowed number is smaller than last counter number)"
|
||||
end
|
||||
|
||||
directo_next = last_directo
|
||||
Registrar.where.not(test_registrar: true).find_each do |registrar|
|
||||
unless registrar.cash_account
|
||||
Rails.logger.info("[DIRECTO] Monthly invoice for registrar #{registrar.id} has been skipped as it doesn't has cash_account")
|
||||
next
|
||||
end
|
||||
counter = Counter.new(1)
|
||||
items = {}
|
||||
registrar_activities = AccountActivity.where(account_id: registrar.account_ids).where("created_at BETWEEN ? AND ?",month.beginning_of_month, month.end_of_month)
|
||||
|
||||
# adding domains items
|
||||
registrar_activities.where(activity_type: [AccountActivity::CREATE, AccountActivity::RENEW]).each do |activity|
|
||||
pricelist = load_activity_pricelist(activity)
|
||||
unless pricelist
|
||||
Rails.logger.error("[DIRECTO] Skipping activity #{activity.id} as pricelist not found")
|
||||
next
|
||||
end
|
||||
|
||||
pricelist.years_amount.times do |i|
|
||||
year = i+1
|
||||
hash = {
|
||||
"ProductID" => DOMAIN_TO_PRODUCT[pricelist.category],
|
||||
"Unit" => "tk",
|
||||
"ProductName" => ".#{pricelist.category} registreerimine: #{pricelist.years_amount} aasta",
|
||||
"UnitPriceWoVAT" => pricelist.price_decimal/pricelist.years_amount
|
||||
}
|
||||
hash["StartDate"] = (activity.created_at + (year-1).year).end_of_month.strftime(date_format) if year > 1
|
||||
hash["EndDate"] = (activity.created_at + (year-1).year + 1).end_of_month.strftime(date_format) if year > 1
|
||||
|
||||
if items.has_key?(hash)
|
||||
items[hash]["Quantity"] += 1
|
||||
else
|
||||
items[hash] = {"RN"=>counter.next, "RR" => counter.now - i, "Quantity"=> 1}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
#adding prepaiments
|
||||
if items.any?
|
||||
total = 0
|
||||
items.each{ |key, val| total += val["Quantity"] * key["UnitPriceWoVAT"] }
|
||||
hash = {"ProductID" => Setting.directo_receipt_product_name, "Unit" => "tk", "ProductName" => "Domeenide ettemaks", "UnitPriceWoVAT"=>total}
|
||||
items[hash] = {"RN"=>counter.next, "RR" => counter.now, "Quantity"=> -1}
|
||||
end
|
||||
|
||||
# generating XML
|
||||
if items.any?
|
||||
directo_next += 1
|
||||
invoice_counter.next
|
||||
|
||||
builder = Nokogiri::XML::Builder.new(encoding: "UTF-8") do |xml|
|
||||
xml.invoices{
|
||||
xml.invoice("Number" =>directo_next,
|
||||
"InvoiceDate" =>invoices_until.strftime(date_format),
|
||||
"PaymentTerm" =>Setting.directo_receipt_payment_term,
|
||||
"CustomerCode"=>registrar.directo_handle,
|
||||
"Language" =>"",
|
||||
"Currency" =>registrar_activities.first.currency,
|
||||
"SalesAgent" =>Setting.directo_sales_agent){
|
||||
xml.line("RN" => 1, "RR"=>1, "ProductName"=> "Domeenide registreerimine - #{I18n.l(invoices_until, format: "%B %Y").titleize}")
|
||||
items.each do |line, val|
|
||||
xml.line(val.merge(line))
|
||||
end
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
data = builder.to_xml.gsub("\n",'')
|
||||
response = RestClient::Request.execute(url: ENV['directo_invoice_url'], method: :post, payload: {put: "1", what: "invoice", xmldata: data}, verify_ssl: false).to_s
|
||||
if @debug
|
||||
STDOUT << "#{Time.zone.now.utc} - Directo xml had to be sent #{data}\n"
|
||||
else
|
||||
Setting.directo_monthly_number_last = directo_next
|
||||
Nokogiri::XML(response).css("Result").each do |res|
|
||||
Directo.create!(request: data, response: res.as_json.to_h, invoice_number: directo_next)
|
||||
Rails.logger.info("[DIRECTO] Invoice #{res.attributes["docid"].value} was pushed and return is #{res.as_json.to_h.inspect}")
|
||||
end
|
||||
end
|
||||
else
|
||||
Rails.logger.info("[DIRECTO] Registrar #{registrar.id} has nothing to be sent to Directo")
|
||||
end
|
||||
|
||||
end
|
||||
STDOUT << "#{Time.zone.now.utc} - Directo invoices sending finished. #{invoice_counter.now} are sent\n"
|
||||
end
|
||||
|
||||
|
||||
def self.load_activity_pricelist activity
|
||||
@pricelists ||= {}
|
||||
return @pricelists[activity.log_pricelist_id] if @pricelists.has_key?(activity.log_pricelist_id)
|
||||
|
||||
pricelist = Pricelist.find_by(id: activity.log_pricelist_id) || PricelistVersion.find_by(item_id: activity.log_pricelist_id).try(:reify)
|
||||
unless pricelist
|
||||
@pricelists[activity.log_pricelist_id] = nil
|
||||
Rails.logger.info("[DIRECTO] AccountActivity #{activity.id} cannot be sent as pricelist wasn't found #{activity.log_pricelist_id}")
|
||||
return
|
||||
end
|
||||
|
||||
@pricelists[activity.log_pricelist_id] = pricelist.version_at(activity.created_at) || pricelist
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -7,6 +7,8 @@ class Domain < ActiveRecord::Base
|
|||
|
||||
attr_accessor :roles
|
||||
|
||||
attr_accessor :legal_document_id
|
||||
|
||||
# TODO: whois requests ip whitelist for full info for own domains and partial info for other domains
|
||||
# TODO: most inputs should be trimmed before validatation, probably some global logic?
|
||||
|
||||
|
@ -345,7 +347,8 @@ class Domain < ActiveRecord::Base
|
|||
end
|
||||
|
||||
|
||||
# state change shouln't be
|
||||
# state changes may be done low-level - no validation
|
||||
# in this metod we still save PaperTrail log.
|
||||
def clean_pendings_lowlevel
|
||||
statuses.delete(DomainStatus::PENDING_DELETE_CONFIRMATION)
|
||||
statuses.delete(DomainStatus::PENDING_UPDATE)
|
||||
|
@ -354,13 +357,23 @@ class Domain < ActiveRecord::Base
|
|||
status_notes[DomainStatus::PENDING_UPDATE] = ''
|
||||
status_notes[DomainStatus::PENDING_DELETE] = ''
|
||||
|
||||
update_columns(
|
||||
hash = {
|
||||
registrant_verification_token: nil,
|
||||
registrant_verification_asked_at: nil,
|
||||
pending_json: {},
|
||||
status_notes: status_notes,
|
||||
statuses: statuses.presence || [DomainStatus::OK]
|
||||
)
|
||||
statuses: statuses.presence || [DomainStatus::OK],
|
||||
# need this column in order to update PaperTrail version properly
|
||||
updated_at: Time.now.utc
|
||||
}
|
||||
|
||||
# PaperTrail
|
||||
self.attributes = hash
|
||||
record_update
|
||||
clear_version_instance!
|
||||
reset_transaction_id
|
||||
|
||||
update_columns(hash)
|
||||
end
|
||||
|
||||
def pending_update!
|
||||
|
@ -384,6 +397,7 @@ class Domain < ActiveRecord::Base
|
|||
self.registrant_verification_token = token
|
||||
self.registrant_verification_asked_at = asked_at
|
||||
set_pending_update
|
||||
touch_always_version
|
||||
pending_json['new_registrant_id'] = new_registrant_id
|
||||
pending_json['new_registrant_email'] = new_registrant_email
|
||||
pending_json['new_registrant_name'] = new_registrant_name
|
||||
|
@ -449,19 +463,14 @@ class Domain < ActiveRecord::Base
|
|||
period_i ||= period
|
||||
unit ||= period_unit
|
||||
|
||||
# TODO: test if name.scan(/\.(.+)\z/).first.first is faster
|
||||
zone = name.split('.').drop(1).join('.')
|
||||
|
||||
p = period_i / 365 if unit == 'd'
|
||||
p = period_i / 12 if unit == 'm'
|
||||
p = period_i if unit == 'y'
|
||||
|
||||
if p > 1
|
||||
p = "#{p}years"
|
||||
else
|
||||
p = "#{p}year"
|
||||
end
|
||||
|
||||
Pricelist.pricelist_for(zone, operation, p)
|
||||
Pricelist.pricelist_for(zone, operation, "#{p}year".pluralize(p))
|
||||
end
|
||||
|
||||
### VALIDATIONS ###
|
||||
|
@ -566,7 +575,7 @@ class Domain < ActiveRecord::Base
|
|||
statuses << DomainStatus::SERVER_MANUAL_INZONE
|
||||
end
|
||||
|
||||
self.force_delete_at = Time.zone.now + Setting.redemption_grace_period.days unless force_delete_at
|
||||
self.force_delete_at = (Time.zone.now + (Setting.redemption_grace_period.days + 1.day)).utc.beginning_of_day unless force_delete_at
|
||||
transaction do
|
||||
save!(validate: false)
|
||||
registrar.messages.create!(
|
||||
|
@ -595,7 +604,7 @@ class Domain < ActiveRecord::Base
|
|||
|
||||
def set_graceful_expired
|
||||
self.outzone_at = valid_to + Setting.expire_warning_period.days
|
||||
self.delete_at = outzone_at + Setting.redemption_grace_period.days
|
||||
self.delete_at = (outzone_at + (Setting.redemption_grace_period.days + 1.day)).utc.beginning_of_day
|
||||
self.statuses |= [DomainStatus::EXPIRED]
|
||||
end
|
||||
|
||||
|
@ -603,7 +612,7 @@ class Domain < ActiveRecord::Base
|
|||
# TODO: currently valid_to attribute update logic is open
|
||||
# self.valid_to = valid_from + self.class.convert_period_to_time(period, period_unit)
|
||||
self.outzone_at = Time.zone.now + Setting.expire_warning_period.days
|
||||
self.delete_at = Time.zone.now + Setting.redemption_grace_period.days
|
||||
self.delete_at = (Time.zone.now + (Setting.redemption_grace_period.days + 1.day)).utc.beginning_of_day
|
||||
statuses << DomainStatus::EXPIRED
|
||||
end
|
||||
|
||||
|
@ -725,17 +734,14 @@ class Domain < ActiveRecord::Base
|
|||
# rubocop: enable Metrics/CyclomaticComplexity
|
||||
# rubocop: enable Metrics/PerceivedComplexity
|
||||
|
||||
|
||||
# small optimization that we'are using to_a if it was done already
|
||||
# otherwise just getting ids
|
||||
def children_log
|
||||
log = HashWithIndifferentAccess.new
|
||||
log[:admin_contacts] = admin_contact_ids
|
||||
log[:tech_contacts] = tech_contact_ids
|
||||
log[:nameservers] = nameserver_ids
|
||||
log[:domain_statuses]= domain_status_ids
|
||||
log[:dnskeys] = dnskey_ids
|
||||
log[:legal_documents]= [legal_document_id]
|
||||
log[:registrant] = [registrant_id]
|
||||
log[:domain_statuses] = domain_status_ids
|
||||
log
|
||||
end
|
||||
|
||||
|
|
|
@ -65,46 +65,55 @@ class DomainCron
|
|||
marked
|
||||
end
|
||||
|
||||
def self.start_delete_period
|
||||
begin
|
||||
STDOUT << "#{Time.zone.now.utc} - Setting delete_candidate to domains\n" unless Rails.env.test?
|
||||
#doing nothing, deprecated
|
||||
|
||||
d = Domain.where('delete_at <= ?', Time.zone.now)
|
||||
marked = 0
|
||||
real = 0
|
||||
d.each do |domain|
|
||||
next unless domain.delete_candidateable?
|
||||
real += 1
|
||||
domain.statuses << DomainStatus::DELETE_CANDIDATE
|
||||
STDOUT << "#{Time.zone.now.utc} DomainCron.start_delete_period: ##{domain.id} (#{domain.name}) #{domain.changes}\n" unless Rails.env.test?
|
||||
domain.save(validate: false) and marked += 1
|
||||
end
|
||||
ensure # the operator should see what was accomplished
|
||||
STDOUT << "#{Time.zone.now.utc} - Finished setting delete_candidate - #{marked} out of #{real} successfully set\n" unless Rails.env.test?
|
||||
end
|
||||
marked
|
||||
def self.start_delete_period
|
||||
# begin
|
||||
# STDOUT << "#{Time.zone.now.utc} - Setting delete_candidate to domains\n" unless Rails.env.test?
|
||||
#
|
||||
# d = Domain.where('delete_at <= ?', Time.zone.now)
|
||||
# marked = 0
|
||||
# real = 0
|
||||
# d.each do |domain|
|
||||
# next unless domain.delete_candidateable?
|
||||
# real += 1
|
||||
# domain.statuses << DomainStatus::DELETE_CANDIDATE
|
||||
# STDOUT << "#{Time.zone.now.utc} DomainCron.start_delete_period: ##{domain.id} (#{domain.name})\n" unless Rails.env.test?
|
||||
# ::PaperTrail.whodunnit = "cron - #{__method__}"
|
||||
# domain.save(validate: false) and marked += 1
|
||||
# end
|
||||
# ensure # the operator should see what was accomplished
|
||||
# STDOUT << "#{Time.zone.now.utc} - Finished setting delete_candidate - #{marked} out of #{real} successfully set\n" unless Rails.env.test?
|
||||
# end
|
||||
# marked
|
||||
end
|
||||
|
||||
def self.destroy_delete_candidates
|
||||
STDOUT << "#{Time.zone.now.utc} - Destroying domains\n" unless Rails.env.test?
|
||||
|
||||
c = 0
|
||||
Domain.where("statuses @> '{deleteCandidate}'::varchar[]").each do |x|
|
||||
WhoisRecord.where(domain_id: x.id).destroy_all
|
||||
destroy_with_message x
|
||||
STDOUT << "#{Time.zone.now.utc} Domain.destroy_delete_candidates: by deleteCandidate ##{x.id} (#{x.name})\n" unless Rails.env.test?
|
||||
|
||||
c += 1
|
||||
Domain.where('delete_at <= ?', Time.zone.now).each do |x|
|
||||
next unless x.delete_candidateable?
|
||||
|
||||
x.statuses << DomainStatus::DELETE_CANDIDATE
|
||||
|
||||
# If domain successfully saved, add it to delete schedule
|
||||
if x.save(validate: false)
|
||||
::PaperTrail.whodunnit = "cron - #{__method__}"
|
||||
DomainDeleteJob.enqueue(x.id, run_at: rand(((24*60) - (DateTime.now.hour * 60 + DateTime.now.minute))).minutes.from_now)
|
||||
STDOUT << "#{Time.zone.now.utc} Domain.destroy_delete_candidates: job added by deleteCandidate status ##{x.id} (#{x.name})\n" unless Rails.env.test?
|
||||
c += 1
|
||||
end
|
||||
end
|
||||
|
||||
Domain.where('force_delete_at <= ?', Time.zone.now).each do |x|
|
||||
WhoisRecord.where(domain_id: x.id).destroy_all
|
||||
destroy_with_message x
|
||||
STDOUT << "#{Time.zone.now.utc} DomainCron.destroy_delete_candidates: by force delete time ##{x.id} (#{x.name})\n" unless Rails.env.test?
|
||||
DomainDeleteJob.enqueue(x.id, run_at: rand(((24*60) - (DateTime.now.hour * 60 + DateTime.now.minute))).minutes.from_now)
|
||||
STDOUT << "#{Time.zone.now.utc} DomainCron.destroy_delete_candidates: job added by force delete time ##{x.id} (#{x.name})\n" unless Rails.env.test?
|
||||
c += 1
|
||||
end
|
||||
|
||||
STDOUT << "#{Time.zone.now.utc} - Successfully destroyed #{c} domains\n" unless Rails.env.test?
|
||||
STDOUT << "#{Time.zone.now.utc} - Job destroy added for #{c} domains\n" unless Rails.env.test?
|
||||
end
|
||||
|
||||
# rubocop: enable Metrics/AbcSize
|
||||
|
|
|
@ -20,28 +20,7 @@ class DomainMailModel
|
|||
domain_info
|
||||
compose
|
||||
end
|
||||
|
||||
def registrant_updated_notification_for_new_registrant
|
||||
registrant
|
||||
subject(:registrant_updated_notification_for_new_registrant_subject)
|
||||
domain_info
|
||||
compose
|
||||
end
|
||||
|
||||
def registrant_updated_notification_for_old_registrant
|
||||
registrant_pending
|
||||
registrant_old
|
||||
subject(:registrant_updated_notification_for_old_registrant_subject)
|
||||
new_registrant = Registrant.find @domain.pending_json['new_registrant_id']
|
||||
@params[:registrant_name] = new_registrant.name
|
||||
@params[:registrant_ident] = new_registrant.ident
|
||||
@params[:registrant_priv] = new_registrant.priv?
|
||||
@params[:registrant_email] = new_registrant.email
|
||||
@params[:registrant_street] = new_registrant.street
|
||||
@params[:registrant_city] = new_registrant.city
|
||||
@params[:registrant_country] = new_registrant.country.name
|
||||
compose
|
||||
end
|
||||
|
||||
def pending_update_rejected_notification_for_new_registrant
|
||||
registrant_pending
|
||||
|
|
|
@ -37,10 +37,7 @@ class Epp::Contact < Contact
|
|||
at[:country_code] = f.css('postalInfo addr cc').text if f.css('postalInfo addr cc').present?
|
||||
at[:auth_info] = f.css('authInfo pw').text if f.css('authInfo pw').present?
|
||||
|
||||
legal_frame = f.css('legalDocument').first
|
||||
if legal_frame.present?
|
||||
at[:legal_documents_attributes] = legal_document_attrs(legal_frame)
|
||||
end
|
||||
|
||||
at.merge!(ident_attrs(f.css('ident').first)) if new_record
|
||||
at
|
||||
end
|
||||
|
@ -104,6 +101,7 @@ class Epp::Contact < Contact
|
|||
|
||||
res
|
||||
end
|
||||
|
||||
end
|
||||
delegate :ident_attr_valid?, to: :class
|
||||
|
||||
|
@ -143,7 +141,7 @@ class Epp::Contact < Contact
|
|||
end
|
||||
|
||||
# rubocop:disable Metrics/AbcSize
|
||||
def update_attributes(frame)
|
||||
def update_attributes(frame, current_user)
|
||||
return super if frame.blank?
|
||||
at = {}.with_indifferent_access
|
||||
at.deep_merge!(self.class.attrs_from(frame.css('chg'), new_record: false))
|
||||
|
@ -152,8 +150,14 @@ class Epp::Contact < Contact
|
|||
at[:statuses] = statuses - statuses_attrs(frame.css('rem'), 'rem') + statuses_attrs(frame.css('add'), 'add')
|
||||
end
|
||||
|
||||
legal_frame = frame.css('legalDocument').first
|
||||
at[:legal_documents_attributes] = self.class.legal_document_attrs(legal_frame)
|
||||
# legal_frame = frame.css('legalDocument').first
|
||||
# at[:legal_documents_attributes] = self.class.legal_document_attrs(legal_frame)
|
||||
|
||||
if doc = attach_legal_document(Epp::Domain.parse_legal_document_from_frame(frame))
|
||||
frame.css("legalDocument").first.content = doc.path if doc && doc.persisted?
|
||||
self.legal_document_id = doc.id
|
||||
end
|
||||
|
||||
self.deliver_emails = true # turn on email delivery for epp
|
||||
|
||||
|
||||
|
@ -169,6 +173,8 @@ class Epp::Contact < Contact
|
|||
elsif ident_type == "birthday" && !ident[/\A\d{4}-\d{2}-\d{2}\z/] && (Date.parse(ident) rescue false)
|
||||
at.merge!(ident: ident_frame.text)
|
||||
at.merge!(ident_country_code: ident_frame.attr('cc')) if ident_frame.attr('cc').present?
|
||||
elsif ident_type == "birthday" && ident_country_code.blank?
|
||||
at.merge!(ident_country_code: ident_frame.attr('cc'))
|
||||
elsif ident_type.blank? && ident_country_code.blank?
|
||||
at.merge!(ident_type: ident_frame.attr('type'))
|
||||
at.merge!(ident_country_code: ident_frame.attr('cc')) if ident_frame.attr('cc').present?
|
||||
|
@ -180,6 +186,9 @@ class Epp::Contact < Contact
|
|||
end
|
||||
end
|
||||
|
||||
self.upid = current_user.registrar.id if current_user.registrar
|
||||
self.up_date = Time.zone.now
|
||||
|
||||
super(at)
|
||||
end
|
||||
# rubocop:enable Metrics/AbcSize
|
||||
|
@ -217,4 +226,29 @@ class Epp::Contact < Contact
|
|||
|
||||
status_list
|
||||
end
|
||||
|
||||
def attach_legal_document(legal_document_data)
|
||||
return unless legal_document_data
|
||||
|
||||
legal_documents.create(
|
||||
document_type: legal_document_data[:type],
|
||||
body: legal_document_data[:body]
|
||||
)
|
||||
end
|
||||
|
||||
def add_legal_file_to_new frame
|
||||
legal_document_data = Epp::Domain.parse_legal_document_from_frame(frame)
|
||||
return unless legal_document_data
|
||||
|
||||
doc = LegalDocument.create(
|
||||
documentable_type: Contact,
|
||||
document_type: legal_document_data[:type],
|
||||
body: legal_document_data[:body]
|
||||
)
|
||||
self.legal_documents = [doc]
|
||||
|
||||
frame.css("legalDocument").first.content = doc.path if doc && doc.persisted?
|
||||
self.legal_document_id = doc.id
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -133,7 +133,8 @@ class Epp::Domain < Domain
|
|||
[:base, :ds_data_not_allowed],
|
||||
[:base, :key_data_not_allowed],
|
||||
[:period, :not_a_number],
|
||||
[:period, :not_an_integer]
|
||||
[:period, :not_an_integer],
|
||||
[:registrant, :cannot_be_missing]
|
||||
],
|
||||
'2308' => [
|
||||
[:base, :domain_name_blocked, { value: { obj: 'name', val: name_dirty } }]
|
||||
|
@ -155,7 +156,8 @@ class Epp::Domain < Domain
|
|||
def attrs_from(frame, current_user, action = nil)
|
||||
at = {}.with_indifferent_access
|
||||
|
||||
code = frame.css('registrant').first.try(:text)
|
||||
registrant_frame = frame.css('registrant').first
|
||||
code = registrant_frame.try(:text)
|
||||
if code.present?
|
||||
if action == 'chg' && registrant_change_prohibited?
|
||||
add_epp_error('2304', nil, DomainStatus::SERVER_REGISTRANT_CHANGE_PROHIBITED, I18n.t(:object_status_prohibits_operation))
|
||||
|
@ -166,7 +168,10 @@ class Epp::Domain < Domain
|
|||
else
|
||||
add_epp_error('2303', 'registrant', code, [:registrant, :not_found])
|
||||
end
|
||||
end
|
||||
else
|
||||
add_epp_error('2306', nil, nil, [:registrant, :cannot_be_missing])
|
||||
end if registrant_frame
|
||||
|
||||
|
||||
at[:name] = frame.css('name').text if new_record?
|
||||
at[:registrar_id] = current_user.registrar.try(:id)
|
||||
|
@ -195,9 +200,27 @@ class Epp::Domain < Domain
|
|||
end
|
||||
|
||||
at[:dnskeys_attributes] = dnskeys_attrs(dnskey_frame, action)
|
||||
at[:legal_documents_attributes] = legal_document_from(frame)
|
||||
|
||||
at
|
||||
end
|
||||
|
||||
|
||||
# Adding legal doc to domain and
|
||||
# if something goes wrong - raise Rollback error
|
||||
def add_legal_file_to_new frame
|
||||
legal_document_data = Epp::Domain.parse_legal_document_from_frame(frame)
|
||||
return unless legal_document_data
|
||||
|
||||
doc = LegalDocument.create(
|
||||
documentable_type: Domain,
|
||||
document_type: legal_document_data[:type],
|
||||
body: legal_document_data[:body]
|
||||
)
|
||||
self.legal_documents = [doc]
|
||||
|
||||
frame.css("legalDocument").first.content = doc.path if doc && doc.persisted?
|
||||
self.legal_document_id = doc.id
|
||||
end
|
||||
# rubocop: enable Metrics/PerceivedComplexity
|
||||
# rubocop: enable Metrics/CyclomaticComplexity
|
||||
# rubocop: enable Metrics/MethodLength
|
||||
|
@ -457,15 +480,6 @@ class Epp::Domain < Domain
|
|||
status_list
|
||||
end
|
||||
|
||||
def legal_document_from(frame)
|
||||
ld = frame.css('legalDocument').first
|
||||
return [] unless ld
|
||||
|
||||
[{
|
||||
body: ld.text,
|
||||
document_type: ld['type']
|
||||
}]
|
||||
end
|
||||
|
||||
# rubocop: disable Metrics/AbcSize
|
||||
# rubocop: disable Metrics/CyclomaticComplexity
|
||||
|
@ -477,6 +491,7 @@ class Epp::Domain < Domain
|
|||
|
||||
if doc = attach_legal_document(Epp::Domain.parse_legal_document_from_frame(frame))
|
||||
frame.css("legalDocument").first.content = doc.path if doc && doc.persisted?
|
||||
self.legal_document_id = doc.id
|
||||
end
|
||||
|
||||
at_add = attrs_from(frame.css('add'), current_user, 'add')
|
||||
|
@ -489,6 +504,11 @@ class Epp::Domain < Domain
|
|||
|
||||
# at[:statuses] += at_add[:domain_statuses_attributes]
|
||||
|
||||
if errors.empty? && verify
|
||||
self.upid = current_user.registrar.id if current_user.registrar
|
||||
self.up_date = Time.zone.now
|
||||
end
|
||||
|
||||
if registrant_id && registrant.code == frame.css('registrant')
|
||||
|
||||
throw :epp_error, {
|
||||
|
@ -515,19 +535,23 @@ class Epp::Domain < Domain
|
|||
preclean_pendings
|
||||
user = ApiUser.find(pending_json['current_user_id'])
|
||||
frame = Nokogiri::XML(pending_json['frame'])
|
||||
old_registrant_id = registrant_id
|
||||
|
||||
self.deliver_emails = true # turn on email delivery
|
||||
self.statuses.delete(DomainStatus::PENDING_UPDATE)
|
||||
self.upid = user.registrar.id if user.registrar
|
||||
self.up_date = Time.zone.now
|
||||
::PaperTrail.whodunnit = user.id_role_username # updator str should be the request originator not the approval user
|
||||
|
||||
send_mail :registrant_updated_notification_for_old_registrant
|
||||
return unless update(frame, user, false)
|
||||
clean_pendings!
|
||||
|
||||
send_mail :registrant_updated_notification_for_new_registrant
|
||||
WhoisRecord.find_by(domain_id: id).save # need to reload model
|
||||
|
||||
save! # for notification if everything fails
|
||||
|
||||
WhoisRecord.find_by(domain_id: id).save # need to reload model
|
||||
DomainMailer.registrant_updated_notification_for_old_registrant(id, old_registrant_id, registrant_id, true).deliver
|
||||
DomainMailer.registrant_updated_notification_for_new_registrant(id, old_registrant_id, registrant_id, true).deliver
|
||||
|
||||
true
|
||||
end
|
||||
|
||||
|
@ -576,7 +600,7 @@ class Epp::Domain < Domain
|
|||
msg: I18n.t(:object_status_prohibits_operation)
|
||||
} unless pending_deletable?
|
||||
|
||||
self.delete_at = Time.zone.now + Setting.redemption_grace_period.days
|
||||
self.delete_at = (Time.zone.now + (Setting.redemption_grace_period.days + 1.day)).utc.beginning_of_day
|
||||
set_pending_delete
|
||||
set_server_hold if server_holdable?
|
||||
save(validate: false)
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
class LegalDocument < ActiveRecord::Base
|
||||
include EppErrors
|
||||
MIN_BODY_SIZE = (1.37 * 3.kilobytes).ceil
|
||||
|
||||
if ENV['legal_document_types'].present?
|
||||
TYPES = ENV['legal_document_types'].split(',').map(&:strip)
|
||||
else
|
||||
|
@ -10,11 +13,22 @@ class LegalDocument < ActiveRecord::Base
|
|||
belongs_to :documentable, polymorphic: true
|
||||
|
||||
|
||||
validates :body, length: { minimum: (1.37 * 8.kilobytes).ceil }, if: ->(file){ file.path.blank? && !Rails.env.staging?}
|
||||
validate :val_body_length, if: ->(file){ file.path.blank? && !Rails.env.staging?}
|
||||
|
||||
before_create :add_creator
|
||||
before_save :save_to_filesystem
|
||||
|
||||
def epp_code_map
|
||||
{
|
||||
'2306' => [
|
||||
[:body, :length]
|
||||
]
|
||||
}
|
||||
end
|
||||
|
||||
def val_body_length
|
||||
errors.add(:body, :length) if body.nil? || body.size < MIN_BODY_SIZE
|
||||
end
|
||||
|
||||
|
||||
def save_to_filesystem
|
||||
|
|
|
@ -8,6 +8,8 @@ class Pricelist < ActiveRecord::Base
|
|||
)
|
||||
}
|
||||
|
||||
scope :valid_at, ->(time){ where("valid_from IS NULL OR valid_from <= ?", time).where("valid_to IS NULL OR valid_to >= ?", time) }
|
||||
|
||||
monetize :price_cents
|
||||
|
||||
validates :price_cents, :price_currency, :price,
|
||||
|
@ -27,6 +29,14 @@ class Pricelist < ActiveRecord::Base
|
|||
"#{operation_category} #{category}"
|
||||
end
|
||||
|
||||
def years_amount
|
||||
duration.to_i
|
||||
end
|
||||
|
||||
def price_decimal
|
||||
price_cents / BigDecimal.new('100')
|
||||
end
|
||||
|
||||
class << self
|
||||
def pricelist_for(zone, operation, period)
|
||||
lists = valid.where(category: zone, operation_category: operation, duration: period)
|
||||
|
|
|
@ -30,10 +30,20 @@ class RegistrantUser < User
|
|||
return false if issuer_organization != ACCEPTED_ISSUER
|
||||
|
||||
idc_data.force_encoding('UTF-8')
|
||||
identity_code = idc_data.scan(/serialNumber=(\d+)/).flatten.first
|
||||
country = idc_data.scan(/^\/C=(.{2})/).flatten.first
|
||||
first_name = idc_data.scan(%r{/GN=(.+)/serialNumber}).flatten.first
|
||||
last_name = idc_data.scan(%r{/SN=(.+)/GN}).flatten.first
|
||||
|
||||
# handling here new and old mode
|
||||
if idc_data.starts_with?("/")
|
||||
identity_code = idc_data.scan(/serialNumber=(\d+)/).flatten.first
|
||||
country = idc_data.scan(/^\/C=(.{2})/).flatten.first
|
||||
first_name = idc_data.scan(%r{/GN=(.+)/serialNumber}).flatten.first
|
||||
last_name = idc_data.scan(%r{/SN=(.+)/GN}).flatten.first
|
||||
else
|
||||
parse_str = "," + idc_data
|
||||
identity_code = parse_str.scan(/,serialNumber=(\d+)/).flatten.first
|
||||
country = parse_str.scan(/,C=(.{2})/).flatten.first
|
||||
first_name = parse_str.scan(/,GN=([^,]+)/).flatten.first
|
||||
last_name = parse_str.scan(/,SN=([^,]+)/).flatten.first
|
||||
end
|
||||
|
||||
u = where(registrant_ident: "#{country}-#{identity_code}").first_or_create
|
||||
u.username = "#{first_name} #{last_name}"
|
||||
|
|
|
@ -56,7 +56,7 @@
|
|||
%thead
|
||||
%tr
|
||||
%th{class: 'col-xs-2'}
|
||||
= sort_link(@q, 'registrar')
|
||||
= sort_link(@q, 'account_registrar_code', t(:registrar))
|
||||
%th{class: 'col-xs-3'}
|
||||
= sort_link(@q, 'description')
|
||||
%th{class: 'col-xs-2'}
|
||||
|
|
|
@ -29,11 +29,11 @@
|
|||
.col-md-3
|
||||
.form-group
|
||||
= f.label t(:created_after)
|
||||
= f.search_field :created_at_gteq, class: 'form-control', placeholder: t(:created_after), autocomplete: 'off'
|
||||
= f.search_field :created_at_gteq, value: params[:q][:created_at_gteq], class: 'form-control datepicker', placeholder: t(:created_after), autocomplete: 'off'
|
||||
.col-md-3
|
||||
.form-group
|
||||
= f.label t(:created_before)
|
||||
= f.search_field :created_at_lteq, class: 'form-control', placeholder: t(:created_before), autocomplete: 'off'
|
||||
= f.search_field :created_at_lteq, value: params[:q][:created_at_lteq], class: 'form-control datepicker', placeholder: t(:created_before), autocomplete: 'off'
|
||||
.col-md-3{style: 'padding-top: 25px;'}
|
||||
%button.btn.btn-primary
|
||||
|
||||
|
|
|
@ -82,6 +82,11 @@
|
|||
= f.label :code
|
||||
.col-md-7
|
||||
= f.text_field(:code, class: 'form-control', disabled: !f.object.new_record?)
|
||||
.form-group
|
||||
.col-md-4.control-label
|
||||
= f.label :test_registrar
|
||||
.col-md-7
|
||||
= f.check_box :test_registrar, class: 'form-control'
|
||||
|
||||
%hr
|
||||
.row
|
||||
|
|
|
@ -14,12 +14,15 @@
|
|||
= sort_link(@q, 'reg_no', t(:reg_no))
|
||||
%th{class: 'col-xs-4'}
|
||||
= t(:credit_balance)
|
||||
%th{class: 'col-xs-4'}
|
||||
= t(:test_registrar)
|
||||
%tbody
|
||||
- @registrars.each do |x|
|
||||
%tr
|
||||
%td= link_to(x, [:admin, x])
|
||||
%td= x.reg_no
|
||||
%td= "#{x.balance}"
|
||||
%td= "#{x.test_registrar}"
|
||||
.row
|
||||
.col-md-12
|
||||
= paginate @registrars
|
||||
|
|
|
@ -2,6 +2,10 @@
|
|||
= link_to(t(:edit), edit_admin_registrar_path(@registrar), class: 'btn btn-primary')
|
||||
= link_to(t(:delete), admin_registrar_path(@registrar),
|
||||
method: :delete, data: { confirm: t(:are_you_sure) }, class: 'btn btn-danger')
|
||||
- content_for :page_name do
|
||||
= @registrar.name
|
||||
- if @registrar.test_registrar?
|
||||
%span{style: "color: #c9302c;"} (test)
|
||||
= render 'shared/title', name: @registrar.name
|
||||
|
||||
- if @registrar.errors.any?
|
||||
|
|
|
@ -29,11 +29,11 @@
|
|||
.col-md-3
|
||||
.form-group
|
||||
= f.label t(:created_after)
|
||||
= f.search_field :created_at_gteq, class: 'form-control', placeholder: t(:created_after), autocomplete: 'off'
|
||||
= f.search_field :created_at_gteq, value: params[:q][:created_at_gteq], class: 'form-control datepicker', placeholder: t(:created_after), autocomplete: 'off'
|
||||
.col-md-3
|
||||
.form-group
|
||||
= f.label t(:created_before)
|
||||
= f.search_field :created_at_lteq, class: 'form-control', placeholder: t(:created_before), autocomplete: 'off'
|
||||
= f.search_field :created_at_lteq, value: params[:q][:created_at_lteq], class: 'form-control datepicker', placeholder: t(:created_before), autocomplete: 'off'
|
||||
.col-md-3{style: 'padding-top: 25px;'}
|
||||
%button.btn.btn-primary
|
||||
|
||||
|
|
|
@ -69,6 +69,9 @@
|
|||
%tbody
|
||||
= render 'setting_row', var: :invoice_number_min
|
||||
= render 'setting_row', var: :invoice_number_max
|
||||
= render 'setting_row', var: :directo_monthly_number_min
|
||||
= render 'setting_row', var: :directo_monthly_number_max
|
||||
= render 'setting_row', var: :directo_monthly_number_last
|
||||
= render 'setting_row', var: :days_to_keep_invoices_active
|
||||
= render 'setting_row', var: :days_to_keep_overdue_invoices_active
|
||||
= render 'setting_row', var: :minimum_deposit
|
||||
|
|
|
@ -55,7 +55,7 @@
|
|||
%li= link_to t(:pricelists), admin_pricelists_path
|
||||
%li= link_to t(:bank_statements), admin_bank_statements_path
|
||||
%li= link_to t(:invoices), admin_invoices_path
|
||||
%li= link_to t(:account_activities), admin_account_activities_path
|
||||
%li= link_to t(:account_activities), admin_account_activities_path(created_after: 'today')
|
||||
%li.divider
|
||||
%li.dropdown-header= t(:archive)
|
||||
%li= link_to t(:domains_history), admin_domain_versions_path
|
||||
|
@ -68,8 +68,8 @@
|
|||
%li= link_to t(:reserved_domains), admin_reserved_domains_path
|
||||
%li= link_to t(:mail_templates), admin_mail_templates_path
|
||||
-# %li= link_to t(:domains_history), admin_domain_versions_path
|
||||
%li= link_to t(:epp_logs), admin_epp_logs_path
|
||||
%li= link_to t(:repp_logs), admin_repp_logs_path
|
||||
%li= link_to t(:epp_logs), admin_epp_logs_path(created_after: 'today')
|
||||
%li= link_to t(:repp_logs), admin_repp_logs_path(created_after: 'today')
|
||||
%li= link_to t(:que), '/admin/que'
|
||||
|
||||
- if signed_in?
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
Tere <%= @contact.name %>
|
||||
<br><br>
|
||||
Kontakti <%= @contact.name %> eposti aadress on muudetud<br>
|
||||
Kontakti <%= @contact.name %> e-posti aadress on muudetud<br>
|
||||
endine aadress: <%= @old_email %><br>
|
||||
uus aadress: <%= @contact.email %>
|
||||
<br><br>
|
||||
Eposti aadressile saadetakse domeenidega seotud infot seal hulgas kinnitustaotluseid omaniku vahetuse ja domeeni kustutamise korral. Palun veenduge, et muudatus on korrektne ning probleemide korral pöörduga oma registripidaja poole. Teie registripidaja on <%= @contact.registrar.name %>
|
||||
E-posti aadressile saadetakse domeeni toimingutega seotud infot, seal hulgas kinnitustaotlused omanikuvahetuse ja domeeni kustutamise korral. Palun veenduge, et muudatus on korrektne ning probleemide korral pöörduge oma registripidaja poole. Teie registripidaja on <%= @contact.registrar.name %>
|
||||
<br><br>
|
||||
<% if @contact.related_domain_descriptions.present? %>
|
||||
Muudatusega seotud domeenid:<br>
|
||||
|
@ -16,7 +16,7 @@ Muudatusega seotud domeenid:<br>
|
|||
Kontaktandmed:<br>
|
||||
Nimi: <%= @contact.name %><br>
|
||||
Isikukood: <%= @contact.ident %><br>
|
||||
Epost: <%= @contact.email %><br>
|
||||
E-post: <%= @contact.email %><br>
|
||||
Tel: <%= @contact.phone %><br>
|
||||
Tänav: <%= @contact.street %><br>
|
||||
Linn: <%= @contact.city %><br>
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
Tere <%= @contact.name %>
|
||||
|
||||
Kontakti <%= @contact.name %> eposti aadress on muudetud
|
||||
Kontakti <%= @contact.name %> e-posti aadress on muudetud
|
||||
endine aadress: <%= @old_email %>
|
||||
uus aadress: <%= @contact.email %>
|
||||
|
||||
Eposti aadressile saadetakse domeenidega seotud infot seal hulgas kinnitustaotluseid omaniku vahetuse ja domeeni kustutamise korral. Palun veenduge, et muudatus on korrektne ning probleemide korral pöörduga oma registripidaja poole. Teie registripidaja on <%= @contact.registrar.name %>
|
||||
E-posti aadressile saadetakse domeeni toimingutega seotud infot, seal hulgas kinnitustaotlused omanikuvahetuse ja domeeni kustutamise korral. Palun veenduge, et muudatus on korrektne ning probleemide korral pöörduge oma registripidaja poole. Teie registripidaja on <%= @contact.registrar.name %>
|
||||
|
||||
<% if @contact.related_domain_descriptions.present? %>
|
||||
Muudatusega seotud domeenid:
|
||||
|
@ -16,7 +16,7 @@ Muudatusega seotud domeenid:
|
|||
Kontaktandmed:
|
||||
Nimi: <%= @contact.name %>
|
||||
Isikukood: <%= @contact.ident %>
|
||||
Epost: <%= @contact.email %>
|
||||
E-post: <%= @contact.email %>
|
||||
Tel: <%= @contact.phone %>
|
||||
Tänav: <%= @contact.street %>
|
||||
Linn: <%= @contact.city %>
|
||||
|
|
|
@ -15,9 +15,9 @@ Tänav: <%= @params[:registrant_street] %><br>
|
|||
Linn: <%= @params[:registrant_city] %><br>
|
||||
Riik: <%= @params[:registrant_country] %>
|
||||
<br><br>
|
||||
Juhime Teie tähelepanu asjaolule, et omanikuvahetuse protseduur viiaks lõpule vaid juhul, kui domeeni hetkel kehtiv registreerija <%= @params[:old_registrant_name] %> omanikuvahetuse tähtaegselt kinnitab.
|
||||
Juhime Teie tähelepanu asjaolule, et omanikuvahetuse protseduur viiakse lõpule vaid juhul, kui domeeni hetkel kehtiv registreerija <%= @params[:old_registrant_name] %> omanikuvahetuse tähtaegselt kinnitab.
|
||||
<br><br>
|
||||
Juhul kui <%= @params[:old_registrant_name] %> lükkab omanikuvahtuse taotluse tagasi või ei anna kinnitust enne <%= Setting.expire_pending_confirmation %> tundi, omanikuvahetuse protseduur tühistatakse.
|
||||
Juhul kui <%= @params[:old_registrant_name] %> lükkab omanikuvahetuse taotluse tagasi või ei anna kinnitust enne <%= Setting.expire_pending_confirmation %> tundi, omanikuvahetuse protseduur tühistatakse.
|
||||
<br><br>
|
||||
Küsimuste korral palun võtke ühendust registripidajaga <%= @params[:registrar_name] %>, kelle kontaktid leiate http://internet.ee/registripidajad/akrediteeritud-registripidajad
|
||||
<br><br>
|
||||
|
|
|
@ -15,9 +15,9 @@ Tänav: <%= @params[:registrant_street] %>
|
|||
Linn: <%= @params[:registrant_city] %>
|
||||
Riik: <%= @params[:registrant_country] %>
|
||||
|
||||
Juhime Teie tähelepanu asjaolule, et omanikuvahetuse protseduur viiaks lõpule vaid juhul, kui domeeni hetkel kehtiv registreerija <%= @params[:old_registrant_name] %> omanikuvahetuse tähtaegselt kinnitab.
|
||||
Juhime Teie tähelepanu asjaolule, et omanikuvahetuse protseduur viiakse lõpule vaid juhul, kui domeeni hetkel kehtiv registreerija <%= @params[:old_registrant_name] %> omanikuvahetuse tähtaegselt kinnitab.
|
||||
|
||||
Juhul kui <%= @params[:old_registrant_name] %> lükkab omanikuvahtuse taotluse tagasi või ei anna kinnitust enne <%= Setting.expire_pending_confirmation %> tundi, omanikuvahetuse protseduur tühistatakse.
|
||||
Juhul kui <%= @params[:old_registrant_name] %> lükkab omanikuvahetuse taotluse tagasi või ei anna kinnitust enne <%= Setting.expire_pending_confirmation %> tundi, omanikuvahetuse protseduur tühistatakse.
|
||||
|
||||
Küsimuste korral palun võtke ühendust registripidajaga <%= @params[:registrar_name] %>, kelle kontaktid leiate http://internet.ee/registripidajad/akrediteeritud-registripidajad
|
||||
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
Tere,
|
||||
<br><br>
|
||||
Domeeni <%= @params[:name] %> registreerija vahetuse taotlus on kinnitatud ning andmed registris uuendatud.
|
||||
Domeeni <%= @domain.name %> registreerija vahetuse taotlus on kinnitatud ning andmed registris uuendatud.
|
||||
<br><br>
|
||||
Uue registreerija andmed:<br>
|
||||
Nimi: <%= @params[:registrant_name] %><br>
|
||||
<% if @params[:registrant_priv] %>
|
||||
Isikukood: <%= @params[:registrant_ident] %><br>
|
||||
Nimi: <%= @new_registrant.name %><br>
|
||||
<% if @new_registrant.priv? %>
|
||||
Isikukood: <%= @new_registrant.ident %><br>
|
||||
<% else %>
|
||||
Äriregistrikood: <%= @params[:registrant_ident] %><br>
|
||||
Äriregistrikood: <%= @new_registrant.ident %><br>
|
||||
<% end %>
|
||||
Epost: <%= @params[:registrant_email] %><br>
|
||||
Tänav: <%= @params[:registrant_street] %><br>
|
||||
Linn: <%= @params[:registrant_city] %><br>
|
||||
Riik: <%= @params[:registrant_country] %>
|
||||
Epost: <%= @new_registrant.email %><br>
|
||||
Tänav: <%= @new_registrant.street %><br>
|
||||
Linn: <%= @new_registrant.city %><br>
|
||||
Riik: <%= @new_registrant.country.name %>
|
||||
<br><br>
|
||||
Lugupidamisega<br>
|
||||
Eesti Interneti SA
|
||||
|
@ -21,19 +21,19 @@ Eesti Interneti SA
|
|||
<br><br>
|
||||
Hi,
|
||||
<br><br>
|
||||
Process for changing registrant of the domain <%= @params[:name] %> has been approved and the data in the registry is updated.
|
||||
Process for changing registrant of the domain <%= @domain.name %> has been approved and the data in the registry is updated.
|
||||
<br><br>
|
||||
New registrant:<br>
|
||||
Name: <%= @params[:registrant_name] %><br>
|
||||
<% if @params[:registrant_priv] %>
|
||||
Personal code: <%= @params[:registrant_ident] %><br>
|
||||
Name: <%= @new_registrant.name %><br>
|
||||
<% if @new_registrant.priv? %>
|
||||
Personal code: <%= @new_registrant.ident %><br>
|
||||
<% else %>
|
||||
Business Registry code: <%= @params[:registrant_ident] %><br>
|
||||
Business Registry code: <%= @new_registrant.ident %><br>
|
||||
<% end %>
|
||||
E-mail: <%= @params[:registrant_email] %><br>
|
||||
Street: <%= @params[:registrant_street] %><br>
|
||||
City: <%= @params[:registrant_city] %><br>
|
||||
Country: <%= @params[:registrant_country] %>
|
||||
E-mail: <%= @new_registrant.email %><br>
|
||||
Street: <%= @new_registrant.street %><br>
|
||||
City: <%= @new_registrant.city %><br>
|
||||
Country: <%= @new_registrant.country.name %>
|
||||
<br><br>
|
||||
Best Regards,<br>
|
||||
Estonian Internet Foundation
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
Tere,
|
||||
|
||||
Domeeni <%= @params[:name] %> registreerija vahetuse taotlus on kinnitatud ning andmed registris uuendatud.
|
||||
Domeeni <%= @domain.name %> registreerija vahetuse taotlus on kinnitatud ning andmed registris uuendatud.
|
||||
|
||||
Uue registreerija andmed:
|
||||
Nimi: <%= @params[:registrant_name] %>
|
||||
<% if @params[:registrant_priv] %>
|
||||
Isikukood: <%= @params[:registrant_ident] %>
|
||||
Nimi: <%= @new_registrant.name %>
|
||||
|
||||
<% if @new_registrant.priv? %>
|
||||
Isikukood: <%= @new_registrant.ident %>
|
||||
<% else %>
|
||||
Äriregistrikood: <%= @params[:registrant_ident] %>
|
||||
Äriregistrikood: <%= @new_registrant.ident %>
|
||||
<% end %>
|
||||
Epost: <%= @params[:registrant_email] %>
|
||||
Tänav: <%= @params[:registrant_street] %>
|
||||
Linn: <%= @params[:registrant_city] %>
|
||||
Riik: <%= @params[:registrant_country] %>
|
||||
Epost: <%= @new_registrant.email %>
|
||||
Tänav: <%= @new_registrant.street %>
|
||||
Linn: <%= @new_registrant.city %>
|
||||
Riik: <%= @new_registrant.country.name %>
|
||||
|
||||
Lugupidamisega
|
||||
Eesti Interneti SA
|
||||
|
@ -21,19 +22,20 @@ Eesti Interneti SA
|
|||
|
||||
Hi,
|
||||
|
||||
Process for changing registrant of the domain <%= @params[:name] %> has been approved and the data in the registry is updated.
|
||||
Process for changing registrant of the domain <%= @domain.name %> has been approved and the data in the registry is updated.
|
||||
|
||||
New registrant:
|
||||
Name: <%= @params[:registrant_name] %>
|
||||
<% if @params[:registrant_priv] %>
|
||||
Personal code: <%= @params[:registrant_ident] %>
|
||||
Name: <%= @new_registrant.name %>
|
||||
|
||||
<% if @new_registrant.priv? %>
|
||||
Personal code: <%= @new_registrant.ident %>
|
||||
<% else %>
|
||||
Business Registry code: <%= @params[:registrant_ident] %>
|
||||
Business Registry code: <%= @new_registrant.ident %>
|
||||
<% end %>
|
||||
E-mail: <%= @params[:registrant_email] %>
|
||||
Street: <%= @params[:registrant_street] %>
|
||||
City: <%= @params[:registrant_city] %>
|
||||
Country: <%= @params[:registrant_country] %>
|
||||
E-mail: <%= @new_registrant.email %>
|
||||
Street: <%= @new_registrant.street %>
|
||||
City: <%= @new_registrant.city %>
|
||||
Country: <%= @new_registrant.country.name %>
|
||||
|
||||
Best Regards,
|
||||
Estonian Internet Foundation
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
Tere,
|
||||
<br><br>
|
||||
Domeeni <%= @params[:name] %> registreerija vahetuse taotlus on kinnitatud ning andmed registris uuendatud.
|
||||
Domeeni <%= @domain.name %> registreerija vahetuse taotlus on kinnitatud ning andmed registris uuendatud.
|
||||
<br><br>
|
||||
Uue registreerija andmed:<br>
|
||||
Nimi: <%= @params[:new_registrant_name] %><br>
|
||||
<% if @params[:registrant_priv] %>
|
||||
Isikukood: <%= @params[:registrant_ident] %><br>
|
||||
Nimi: <%= @new_registrant.name %><br>
|
||||
<% if @new_registrant.priv? %>
|
||||
Isikukood: <%= @new_registrant.ident %><br>
|
||||
<% else %>
|
||||
Äriregistrikood: <%= @params[:registrant_ident] %><br>
|
||||
Äriregistrikood: <%= @new_registrant.ident %><br>
|
||||
<% end %>
|
||||
Epost: <%= @params[:registrant_email] %><br>
|
||||
Tänav: <%= @params[:registrant_street] %><br>
|
||||
Linn: <%= @params[:registrant_city] %><br>
|
||||
Riik: <%= @params[:registrant_country] %>
|
||||
Epost: <%= @new_registrant.email %><br>
|
||||
Tänav: <%= @new_registrant.street %><br>
|
||||
Linn: <%= @new_registrant.city %><br>
|
||||
Riik: <%= @new_registrant.country.name %>
|
||||
<br><br>
|
||||
Lugupidamisega<br>
|
||||
Eesti Interneti SA
|
||||
|
@ -21,19 +21,19 @@ Eesti Interneti SA
|
|||
<br><br>
|
||||
Hi,
|
||||
<br><br>
|
||||
Process for changing registrant of the domain <%= @params[:name] %> has been approved and the data in the registry is updated.
|
||||
Process for changing registrant of the domain <%= @domain.name %> has been approved and the data in the registry is updated.
|
||||
<br><br>
|
||||
New registrant:<br>
|
||||
Name: <%= @params[:new_registrant_name] %><br>
|
||||
<% if @params[:registrant_priv] %>
|
||||
Personal code: <%= @params[:registrant_ident] %><br>
|
||||
Name: <%= @new_registrant.name %><br>
|
||||
<% if @new_registrant.priv? %>
|
||||
Personal code: <%= @new_registrant.ident %><br>
|
||||
<% else %>
|
||||
Business Registry code: <%= @params[:registrant_ident] %><br>
|
||||
Business Registry code: <%= @new_registrant.ident %><br>
|
||||
<% end %>
|
||||
E-mail: <%= @params[:registrant_email] %><br>
|
||||
Street: <%= @params[:registrant_street] %><br>
|
||||
City: <%= @params[:registrant_city] %><br>
|
||||
Country: <%= @params[:registrant_country] %>
|
||||
E-mail: <%= @new_registrant.email %><br>
|
||||
Street: <%= @new_registrant.street %><br>
|
||||
City: <%= @new_registrant.city %><br>
|
||||
Country: <%= @new_registrant.country.name %>
|
||||
<br><br>
|
||||
Best Regards,<br>
|
||||
Estonian Internet Foundation
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
Tere,
|
||||
|
||||
Domeeni <%= @params[:name] %> registreerija vahetuse taotlus on kinnitatud ning andmed registris uuendatud.
|
||||
Domeeni <%= @domain.name %> registreerija vahetuse taotlus on kinnitatud ning andmed registris uuendatud.
|
||||
|
||||
Uue registreerija andmed:
|
||||
Nimi: <%= @params[:new_registrant_name] %>
|
||||
Nimi: <%= @new_registrant.name %>
|
||||
|
||||
<% if @params[:registrant_priv] %>
|
||||
Isikukood: <%= @params[:registrant_ident] %>
|
||||
<% if @new_registrant.priv? %>
|
||||
Isikukood: <%= @new_registrant.ident %>
|
||||
<% else %>
|
||||
Äriregistrikood: <%= @params[:registrant_ident] %>
|
||||
Äriregistrikood: <%= @new_registrant.ident %>
|
||||
<% end %>
|
||||
Epost: <%= @params[:registrant_email] %>
|
||||
Tänav: <%= @params[:registrant_street] %>
|
||||
Linn: <%= @params[:registrant_city] %>
|
||||
Riik: <%= @params[:registrant_country] %>
|
||||
Epost: <%= @new_registrant.email %>
|
||||
Tänav: <%= @new_registrant.street %>
|
||||
Linn: <%= @new_registrant.city %>
|
||||
Riik: <%= @new_registrant.country.name %>
|
||||
|
||||
Lugupidamisega
|
||||
Eesti Interneti SA
|
||||
|
@ -22,20 +22,20 @@ Eesti Interneti SA
|
|||
|
||||
Hi,
|
||||
|
||||
Process for changing registrant of the domain <%= @params[:name] %> has been approved and the data in the registry is updated.
|
||||
Process for changing registrant of the domain <%= @domain.name %> has been approved and the data in the registry is updated.
|
||||
|
||||
New registrant:
|
||||
Name: <%= @params[:new_registrant_name] %>
|
||||
Name: <%= @new_registrant.name %>
|
||||
|
||||
<% if @params[:registrant_priv] %>
|
||||
Personal code: <%= @params[:registrant_ident] %>
|
||||
<% if @new_registrant.priv? %>
|
||||
Personal code: <%= @new_registrant.ident %>
|
||||
<% else %>
|
||||
Business Registry code: <%= @params[:registrant_ident] %>
|
||||
Business Registry code: <%= @new_registrant.ident %>
|
||||
<% end %>
|
||||
E-mail: <%= @params[:registrant_email] %>
|
||||
Street: <%= @params[:registrant_street] %>
|
||||
City: <%= @params[:registrant_city] %>
|
||||
Country: <%= @params[:registrant_country] %>
|
||||
E-mail: <%= @new_registrant.email %>
|
||||
Street: <%= @new_registrant.street %>
|
||||
City: <%= @new_registrant.city %>
|
||||
Country: <%= @new_registrant.country.name %>
|
||||
|
||||
Best Regards,
|
||||
Estonian Internet Foundation
|
||||
|
|
|
@ -6,10 +6,12 @@
|
|||
%thead
|
||||
%tr
|
||||
%th{class: 'col-xs-4'}= t(:type)
|
||||
%th{class: 'col-xs-8'}= t(:id)
|
||||
%th{class: 'col-xs-4'}= t(:name)
|
||||
%th{class: 'col-xs-4'}= t(:id)
|
||||
%tbody
|
||||
- @data.css('contact').each do |x|
|
||||
- registrant = Contact.find_by_code(x.text)
|
||||
%tr
|
||||
%td= x['type']
|
||||
%td= x.text
|
||||
|
||||
%td= registrant.name
|
||||
%td= x.text
|
|
@ -10,8 +10,9 @@
|
|||
%dt= t(:registrar)
|
||||
%dd= @data.css('clID').text
|
||||
|
||||
- registrant = Contact.find_by_code(@data.css('registrant').text)
|
||||
%dt= t(:registrant)
|
||||
%dd= @data.css('registrant').text
|
||||
%dd= "#{registrant.name} (#{@data.css('registrant').text})"
|
||||
|
||||
%dt= t(:registered)
|
||||
%dd= @data.css('crDate').text
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
.row
|
||||
.col-sm-6
|
||||
%h1.text-center-xs
|
||||
= truncate(name, length: 35)
|
||||
= content_for?(:page_name) ? yield(:page_name) : truncate(name, length: 35)
|
||||
.col-sm-6
|
||||
%h1.text-right.text-center-xs
|
||||
= yield :actions
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue