class.report.php 14.8 KB
<?
// ==============
// === report === 
// ==============
    include_once($_SERVER['DOCUMENT_ROOT']."/account/func/func.php");
    include_once($_SERVER['DOCUMENT_ROOT']."/account/func/func.eMailing.php");

    class Report {
    
        var $mass_client='';
        var $mass_order='';
        var $mass_order_grafic='';
      
        var $time='';

        function put_time($time) {
            $this->time = $time;
        }
     
        function make() {
        $kk=0;    
            foreach ($this->time as $Time) {

                // Äåíü
                
                $sql0 = "SELECT s.title, s.id, sum(o.total) as Total, count(o.total) as quant
                         FROM catalogs_orders as o
                         RIGHT JOIN zlo_order_status as s ON s.id=o.`status` AND $Time
                         WHERE s.id IN (1,2,4,5)
                         GROUP BY s.id
                         ORDER BY s.id ASC";
                $result0 = mysql_query($sql0) or die(mysql_error());
                if (mysql_affected_rows()!=0) {
                
                    while ($report=mysql_fetch_assoc($result0)) {
                    
                        if($kk==0) {
                            $this->mass_order[$report['id']]['title'][]=$report['title'];
                            $this->mass_client[$report['id']]['title'][]=$report['title'];
                        }
                            if ($report['Total']==0) {
                            $this->mass_order[$report['id']]['total'][]=freandlyDigits($report['Total']);
                            } else {
                            $this->mass_order[$report['id']]['total'][]="<a href='http://".$_SERVER['SERVER_NAME']."/admin.php/orders/?status=".$report['id']."' style='text-decoration:none; padding-right:5px;'>(".$report['quant'].")</a><span style='float:right;'>".freandlyDigits($report['Total'])."</span>";
                            }
                            
                        $sql00="SELECT o.*, u.*
                              FROM catalogs_orders as o 
                              LEFT JOIN zlo_users as u ON u.id=o.`user_id`
                              WHERE o.`status`='".$report['id']."'
                              AND $Time 
                              ORDER BY total DESC
                              LIMIT 1";
                        $result00 = mysql_query($sql00) or die(mysql_error());
                        if (mysql_affected_rows()!=0) {
                            $client=mysql_fetch_assoc($result00);
                            
                            list($client['name'])=explode(" ", $client['name']);
                            
                            $this->mass_client[$report['id']]['total'][]="<a href='http://".$_SERVER['SERVER_NAME']."/admin.php/orders/?action=show&user=".$client['user_id']."' style='text-decoration:none;'>".$client['name']."</a>";
                        } else {
                            $this->mass_client[$report['id']]['total'][]='';
                        }
                        
                    }
                    
                    $kk=1;
                }
            }
            
        }
            
        
        function html_report($mass) {
        
        $i=1;
        
        $html="<table cellpadding='1' cellspacing='1' style='margin-top:5px;' >
                <tr>
                    <th>Ñòàòóñ</th><th>Äåíü</th><th>Íåäåëÿ</th><th>Ìåñÿö</th>
                </tr>";
                        
                foreach($mass as $ids) { $i++;
                    
                    if($i==2) { $class='style="background:#D8E9FB;"'; } else { $class='';}
                    $html.="<tr $class>";
                    if($i==2) { $i=0;}
                    
                    foreach($ids as $id) {
                        foreach($id as $c=>$values) {
                            if($values==NULL) {$values = '0';}
                            $html.="<td align='left' style='padding: 4px;'>".$values."</td>";

                        }
                    }
                    $html.="</tr>";
                }

        $html.="</table>";
        
        return $html;
        
        }
        
        function get_mass_order() {
            return $this->mass_order;
        }
        
        function get_mass_client() {
            return $this->mass_client;
        }     
        
        function get_mass_order_grafic() {
            return $this->mass_order_grafic;
        } 
        
        function needUpdate() {
            // ïðîâåðÿåì èëè îòñûëàëñÿ îò÷åò
            $sql = "SELECT * FROM zlo_report_history WHERE `date`='".date('Y-m-d')."' ";
            $result = mysql_query($sql) or die(mysql_error());
            if(mysql_affected_rows()==0) {
                return 1;
            } else {
                return 0;
            }
        }

        function email() {
        
            // Åñëè åñòü ôàéë îòñûëàåì
            if(is_file($_SERVER['DOCUMENT_ROOT'].'/xml/'.date('Y').'/'.date('m').'/grafic_report_'.date('Y-m').'-'.(date('d')-1).'.png')) {
             
                $this->mass_client='';
                $this->mass_order='';

                $time='';
                $time['day']   = "( o.`mktime` BETWEEN ".mktime(0, 0, 0, date('n'), date('j')-1, date('Y'))." AND  ".mktime(0, 0, 0, date('n'), date('j'), date('Y')).") ";
                $time['week']  = "( o.`mktime` BETWEEN ".strtotime("last Monday")." AND  ".mktime(0, 0, 0, date('n'), date('j')-1, date('Y')).") ";
                $time['month'] = "( o.`mktime` BETWEEN ".mktime(0, 0, 0, date('n'), 1, date('Y'))." AND  ".mktime(0, 0, 0, date('n'), date('j')-1, date('Y')).") ";
                
                Report::put_time($time); 
                Report::make(); 
                
                $subject='Îò÷åò ïî extremstyle.ua çà '.(date('d')-1).'/'.date('m/Y');
                
                $mail="<div class='orders-report' style='display:table; overflow:hidden;'>";

                // === êëèåíòû ===
                        
                    $mail.="<div style='background: url(\"http://".$_SERVER['SERVER_NAME']."/img/bg_report.jpg\"); background-repeat:no-repeat; border:1px solid #B9B9B9; padding:0 15px 5px;'>";
                
                    $mail.="<span style='padding:5px 0; display:block;'>ÒÎÏ êëèåíòîâ çà ïåðèîä: </span>";
                    $mail.= Report::html_report(Report::get_mass_client());
                    $mail.="</div>";
                    
                    $mail.="<div style='height:20px;display:block;'></div>";
                        
                // === ïðîäàæè ===
                
                    $mail.="<div style='background: url(\"http://".$_SERVER['SERVER_NAME']."/img/bg_report.jpg\"); background-repeat:no-repeat; border:1px solid #B9B9B9; padding:0 15px 5px;'>";
                
                    $mail.="<span style='padding:5px 0; display:block;'>Ïðîäàæè çà ïåðèîä: </span>";
                    $mail.= Report::html_report(Report::get_mass_order());
                    $mail.="</div>";
                    
                    $mail.="<div style='height:20px;display:block;'></div>";
                    
                // === ãðàôèê ===
                
                    $mail.="<div style='background: url(\"http://".$_SERVER['SERVER_NAME']."/img/bg_report.jpg\"); background-repeat:no-repeat; border:1px solid #B9B9B9; padding:0 15px 5px;'>";
                    
                    $mail.="<span style='padding:5px 0; display:block;'>Ãðàôèê: </span>";
                    $mail.="<a href='http://".$_SERVER['SERVER_NAME']."/xml/".date('Y')."/".date('m')."/grafic_report_".date('Y-m').'-'.(date('d')-1).".png' ><img src='http://".$_SERVER['SERVER_NAME']."/xml/".date('Y')."/".date('m')."/grafic_report_".date('Y-m').'-'.(date('d')-1).".png' width='340px' ></a>";
                    
                    // ëåãåíäà
                    $mail.="<div class='legend' style='display:table;text-align:center;'>";
                        $mail.="<div style='width:15px; height:15px; background:#00A652; float:left;'></div><span style='float:left; padding:0 5px;'>íîâûé</span>";
                        $mail.="<div style='width:15px; height:15px; background:#0072BB; float:left;'></div><span style='float:left; padding:0 5px;'>ïîäòâåðæäåí</span>";
                        $mail.="<div style='width:15px; height:15px; background:#F36523; float:left;'></div><span style='float:left; padding:0 5px;'>îòìåíåí</span>";
                        $mail.="<div style='width:15px; height:15px; background:#ED1B24; float:left;'></div><span style='float:left; padding:0 5px;'>âûïîëíåí</span>";
                        $mail.="<div style='clear:both;'></div>";
                    $mail.="</div>";

                    $mail.="</div>";
                
                $mail.="</div>";
    
                // Ðàññûëêà óâåäîìëåíèé àäìèíàì
                $sql = "SELECT * FROM zlo_report_users WHERE email!='' ";
                $result = mysql_query($sql) or die(mysql_error());
                while ($admin=mysql_fetch_assoc($result)) {
                    sendMail ($admin['email'], $admin['username'], 'registration@extremstyle.ua', 'extremstyle.ua', $subject, $mail);
                }
                
                // Åñëè åñòü ôàéë çàïèñóåì çàäàíèå êàê ÑÄÅËÀÍÎÅ â áàçó
                $sql = "INSERT INTO zlo_report_history (`date`) values ('".date('Y-m-d')."') ";
                $result = mysql_query($sql) or die(mysql_error());
            }
           
        }
        
        function build_grafic(){ 
        
        $this->mass_order_grafic='';
        
            for($i=1; $i<=date('d'); $i++){
            
                // íà êîæäûé äåíü
                $Time="o.`mktime` BETWEEN ".mktime(0, 0, 0, date('n'), $i, date('Y'))." AND ".mktime(0, 0, 0, date('n'), $i+1, date('Y'))." ";

                $sql0 = "SELECT s.title, s.id, sum(o.total) as Total, count(o.total) as quant
                         FROM catalogs_orders as o
                         RIGHT JOIN zlo_order_status as s ON s.id=o.`status` AND $Time
                         WHERE s.id IN (1,2,4,5)
                         GROUP BY s.id
                         ORDER BY s.id ASC";
                $result0 = mysql_query($sql0) or die(mysql_error());
                if (mysql_affected_rows()!=0) {
                    while ($report=mysql_fetch_assoc($result0)) {
                        $this->mass_order_grafic[$report['title']][]=$report['quant'];
                    }
                    
                }
            
            }
        ?>
        
            <html><head>
            <script type="application/x-javascript" language="javascript">

            var userData = {
                'user1': {
                    <?
                    $i=0;
                    foreach($this->mass_order_grafic as $title=>$mass) { $i++;
                    
                        echo "'".$title."': { \n";
                        foreach($mass as $j=>$point) {
                             echo ($j+1).": ".$point; if((count($mass)-1)!= $j) echo ", ";
                        }
                        if ($i<=3) 
                        echo "}, \n";
                        else 
                        echo "} \n";
                    }
                    
                    ?>
                }    

            }
            var colors = ['#00A652', '#0072BB', '#F36523', '#ED1B24'];

            function draw() {

                var canvas = document.getElementById('canvas');
                if (canvas.getContext) {

                    var $ = canvas.getContext('2d');

                    var maxCount = 33 + 10;
                    var x0 = y0 = 50;
                    var width = canvas.width - 100;
                    var height = canvas.height - 100;

                    var stepY = Math.round(height / maxCount);
                    var stepX = 20;

                    $.beginPath();
                    $.moveTo(x0, y0);
                    $.lineTo(x0, height + y0);
                    $.lineTo(width + x0, height + y0);

                    // ==== îñü Õ - ðàçìåòêà ïî äíÿõ ====
                    var m = 0;
                    for (var i = x0; m < <?=date('t');?> ; i += stepX) {
                        m ++;
                        $.moveTo(i, height + y0);
                        $.lineTo(i, height + y0 + 15);
                        $.fillText(m, i + 3, height + y0 + 15);
                    }
                    
                    // ==== òî÷êè ====
                    var j=-1;
                    for (var user in userData) {
                        for (var type in userData[user]) { j ++;
                            for (var m in userData[user][type]) {
                                
                                var count = userData[user][type][m];
                                var x = x0 + ((m - 1) * stepX);
                                var y = y0 + (height - count * stepY);

                                // ==== îñü Ó - çíà÷åíèÿ âåðøèí ëèíèé ====
                                $.fillStyle  = colors[j];
                                $.fillText(count, x0 - 15, y);
                            }
                        }
                    }
                    
                $.stroke(); 
                
                    // ==== ëèíèè ====
                    var j=-1;
                    for (var user in userData) {
                        for (var type in userData[user]) { j ++;
                        
                        $.beginPath();
                        $.strokeStyle  = colors[j];
             
                        
                            for (var m in userData[user][type]) {
                                
                                var count = userData[user][type][m];
                                var x = x0 + ((m - 1) * stepX);
                                var y = y0 + (height - count * stepY);
                                
                                if (1 == m) { 
                                    $.moveTo(x, y); 
                                   
                                } else {

                                    $.lineTo(x, y);
                                }
                            }
                            
                        $.stroke();
                        
                        }
                    }

                }
                 
                //window.open(document.getElementById("canvas").toDataURL("image/png"), "new_window_name");

                var canvasData = canvas.toDataURL("image/png");
                var ajax = new XMLHttpRequest();
                ajax.open("POST",'/js/save.php',false);
                ajax.setRequestHeader('Content-Type', 'application/upload');
                ajax.send(canvasData );  

                }

                </script>
                </head><body onload="draw();">
                <canvas id="canvas" width="700" height="500" style="display:none;">No Canvas</canvas>
                </body></html>

        <?}
        
    }
?>