forum.bitel.ru http://forum.bitel.ru/ |
|
Ежедневный отчет http://forum.bitel.ru/viewtopic.php?f=12&t=8636 |
Страница 1 из 1 |
Автор: | zavndw [ 28 окт 2013, 12:36 ] |
Заголовок сообщения: | Ежедневный отчет |
Подскажите может кто реализовывал, отчет в конце для отдела продаж автоматически что бы генерировался и операторы видели какие платежи они добавляли в течении для (по кассе и без нее) |
Автор: | dimOn [ 28 окт 2013, 12:53 ] |
Заголовок сообщения: | Re: Ежедневный отчет |
В смысле отчёт платежей в разрезе добавивших их юзеров? (как следствие с фильтром по дням) По идее довольно простой табличный отчёт. |
Автор: | zavndw [ 28 окт 2013, 12:56 ] |
Заголовок сообщения: | Re: Ежедневный отчет |
именно, но задача что бы он сам в конце для вылазил. Делать через api генерацию и запрос на выгрузку в сторонню систему или вывести в печать, не много ума не приложу как сделать. |
Автор: | skn [ 28 окт 2013, 13:06 ] |
Заголовок сообщения: | Re: Ежедневный отчет |
zavndw писал(а): именно, но задача что бы он сам в конце для вылазил. Делать через api генерацию и запрос на выгрузку в сторонню систему или вывести в печать, не много ума не приложу как сделать. что значит "сам в конце дня", в 23:59 распечать на принтер? |
Автор: | Cromeshnic [ 28 окт 2013, 13:19 ] |
Заголовок сообщения: | Re: Ежедневный отчет |
У меня есть пачка скриптов на ruby, которые по cron-у отчёты разные в csv делают и на почту высылают. Правда там для mysql используется старый модуль, да и в ruby я не мастер. Как-то так: Код: require 'rubygems'
require 'date' require 'iconv' require 'active_record/vendor/mysql' require 'zip/zip' require 'rmail' require 'net/smtp' # #Скрипт создает отчет по изменениям лимитов за предыдущий день #в формате csv и посылает его на почту, а также сохраняет локально и запаковывает в архив # class Main def self.mainloop report_path="reports/" mail_title= "Ежедневный отчет по установке лимитов за #{Date.today-1}" mail_to="test1@provider.ru test2@provider.ru" mail_from="test@provider.ru" host = '127.0.0.1' login = 'bgbilling' dbname = 'bgbilling' password = 'bgbilling' @db = Mysql.connect(host, login, password, dbname) @db.query("set names utf8") unless @db puts "Can't connect to database" exit 1 end report="Договор;Название;Предыдущая установка лимита;Установленный лимит;На сколько дней;Дата;Пользователь;Комментарий;\n" list=@db.query("select c.title, supertitle(c.id) name, (select nvalue from log_contract_limit ll where ll.cid=l.cid and ll.dt<l.dt order by dt desc limit 0,1), l.nvalue, l.days, l.dt, if(l.uid=0,'сервер',u.name) user, l.comment from log_contract_limit l left join contract c on l.cid=c.id left join user u on l.uid=u.id where date(l.dt)=date(now())- interval 1 day order by l.cid, l.dt desc") list.each do |row| row.each do |val| val="" if val == nil report+="\"#{val.to_s.gsub("\"","").gsub(";","")}\";" end report+="\n" end fname=report_path+"daily-limit-report.#{(Date.today-1).to_s}.csv" #Отправляем файлик на почту заинтересованным пользователям Helper.send_file(File.basename(fname), Iconv.new('cp1251','utf-8').iconv(report), Helper.enc(mail_title), mail_from, mail_to.split) #Пишем отчет в файлик для сохранения истории w=File.open(fname,"w") w.puts Iconv.new('cp1251','utf-8').iconv(report) w.close system("chmod 644 "+fname) #Архивируем Helper.zip_file(fname) File.delete(fname) end end def single_instance(&block) if File.open($0).flock(File::LOCK_EX | File::LOCK_NB) block.call else warn "Script #{$0} is already running" end end class Helper def self.enc(s) return "=?windows-1251?B?"+[Iconv.new('cp1251','utf-8').iconv(s)].pack("m").gsub(/\r|\n/,"")+"?=" end def self.send_file(filename, content, title, from, to) msg = RMail::Message.new part = RMail::Message.new part.header.set('Content-Type', 'application/octet-stream') part.header.set('Content-Disposition', 'attachment', 'filename' => filename) part.header.set('Content-Transfer-Encoding', 'base64') part.body=content.unpack('a*').pack('m') msg.add_part(part) msg.header.set("Subject", title) msg.header.set("To", to.join(", ")) msg.header.set("From", from) Net::SMTP.start('127.0.0.1') do |smtp| smtp.send_message RMail::Serialize.write('',msg), from, to end end def self.zip_file(filename) Dir.chdir(File.dirname(filename)) filename=File.basename(filename) Zip::ZipFile.open(filename + '.zip', Zip::ZipFile::CREATE) { |zipfile| zipfile.get_output_stream(filename) { |f| f.write(File.read(filename))} } end end if __FILE__ == $0 single_instance do Main.mainloop end end |
Автор: | dimOn [ 28 окт 2013, 13:34 ] |
Заголовок сообщения: | Re: Ежедневный отчет |
zavndw писал(а): именно, но задача что бы он сам в конце для вылазил. откуда вылазил |
Автор: | zavndw [ 28 окт 2013, 14:43 ] |
Заголовок сообщения: | Re: Ежедневный отчет |
из любого доступного для оператора места:-) |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |