Skip to content

Instantly share code, notes, and snippets.

defmodule Cache do
def init do
{:ok, pid} = Agent.start_link(fn -> %{} end)
pid
end
def set(pid, n, value) do
pid |> Agent.get_and_update(fn state -> {state, Map.put(state, n, value)} end)
pid
end
log_path = File.join(File.dirname(__FILE__), 'company_migration.log')
puts "Writing log to '#{log_path}'"
# a - append to file
open(log_path, 'a') do |f|
f.puts 'Running migration script'
f.puts 'Moving values from some custom fields to core fields...'
Company.find_each do |c|
c.update!(
log_path = File.join(File.dirname(__FILE__), 'company_migration.log')
puts "Writing log to '#{log_path}'"
# a - append to file
open(log_path, 'a') do |f|
f.puts 'Running migration script'
f.puts 'Moving values from some custom fields to core fields...'
Company.find_each do |c|
c.update!(
log_path = File.join(File.dirname(__FILE__), 'company_migration.log')
puts "Writing log to '#{log_path}'"
# a - append to file
open(log_path, 'a') do |f|
f.puts 'Running migration script'
f.puts 'Moving values from some custom fields to core fields...'
Company.find_each do |c|
c.update!(
{
"sys": {
"type": "Array"
},
"total": 3,
"skip": 0,
"limit": 100,
"items": [
{
"sys": {

Order имеет много Contracts

initial Contract имеет много prolongation Contracts

initial Contract может иметь много StayPeriods, но по хорошему должен иметь только один StayPeriod

после создания initial Contract и вселения в пансионат создаётся StayPeriod, который впоследствии связан с initial Contract лишь внешним ключом: StayPeriod имеет свой pansion_id и contract_id, а initial Contract имеет свои и они могут быть изменены независимо друг от друга

prolongation Contract не имеет StayPeriods (в просмотре контракта отображается StayPeriod от initial Contract)

# сохранить updated_at
old_entries = Nutrition::Warehouse::Entry.pluck(:id, :updated_at).to_h
# удалить транзакции списания и вернуть продукты на склад
Nutrition::Warehouse::Entry::Transaction.where(consumable_type: 'Nutrition::ActualMeal::Charge::Entry').destroy_all
Nutrition::ActualMenu.eager_load(actual_meals: :charge).joins(actual_meals: { charge: :entries }).distinct.each do |actual_menu|
# найти списания части меню
actual_meal_charge = actual_menu.actual_meals
.eager_load(:charge)
PATH
remote: jasper
specs:
jasper (0.0.1)
deep_merge
enumerize
httparty
nokogiri
rails (~> 4.2.6)
slim
SELECT
wo_amount.*,
CASE
WHEN product_unit = 'mg' THEN round(((product_amount * portions / 1000000)::NUMERIC), 2)
WHEN product_unit = 'g' THEN round(((product_amount * portions / 1000)::NUMERIC), 2)
WHEN product_unit = 'kg' THEN round(((product_amount * portions)::NUMERIC), 2)
WHEN product_unit = 'ml' THEN round(((product_amount * portions / 1000)::NUMERIC), 2)
WHEN product_unit = 'l' THEN round(((product_amount * portions)::NUMERIC), 2)
WHEN product_unit = 'mm' THEN round(((product_amount * portions / 1000000)::NUMERIC), 2)
WHEN product_unit = 'sm' THEN round(((product_amount * portions / 1000)::NUMERIC), 2)
-- call_direction: направление вызова:
-- 0 – внутренний (между двумя абонентами ВАТС),
-- 1 – входящий (от внешнего номера абоненту ВАТС),
-- 2 – исходящий (от абонента ВАТС на внешний номер).
-- entry_result: результат вызова.
-- 1 - звонок успешен и разговор состоялся,
-- 0 - звонок пропущен, разговор не состоялся.
-- line_number: линия ВАТС, через которую прошел вызов. Подставляется в зависимости от направления вызова: