/var/www/html_us/wp-content/plugins/woocommerce/src/Internal/Admin/Notes/NewSalesRecord.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
<?php
/**
 * WooCommerce Admin (Dashboard) New Sales Record Note Provider.
 *
 * Adds a note to the merchant's inbox when the previous day's sales are a new record.
 */

namespace Automattic\WooCommerce\Internal\Admin\Notes;

defined'ABSPATH' ) || exit;

use 
Automattic\WooCommerce\Admin\Notes\Note;
use 
Automattic\WooCommerce\Admin\Notes\Notes;
use 
Automattic\WooCommerce\Admin\Notes\NoteTraits;

/**
 * New_Sales_Record
 */
class NewSalesRecord {
    
/**
     * Note traits.
     */
    
use NoteTraits;

    
/**
     * Name of the note for use in the database.
     */
    
const NOTE_NAME 'wc-admin-new-sales-record';

    
/**
     * Option name for the sales record date in ISO 8601 (YYYY-MM-DD) date.
     */
    
const RECORD_DATE_OPTION_KEY 'woocommerce_sales_record_date';

    
/**
     * Option name for the sales record amount.
     */
    
const RECORD_AMOUNT_OPTION_KEY 'woocommerce_sales_record_amount';

    
/**
     * Returns the total of yesterday's sales.
     *
     * @param string $date Date for sales to sum (i.e. YYYY-MM-DD).
     * @return floatval
     */
    
public static function sum_sales_for_date$date ) {
        
$order_query = new \WC_Order_Query( array( 'date_created' => $date ) );
        
$orders      $order_query->get_orders();
        
$total       0;

        foreach ( (array) 
$orders as $order ) {
            
$total += $order->get_total();
        }

        return 
$total;
    }

    
/**
     * Possibly add a sales record note.
     */
    
public static function possibly_add_note() {
        
/**
         * Filter to allow for disabling sales record milestones.
         *
         * @since 3.7.0
         *
         * @param boolean default true
         */
        
$sales_record_notes_enabled apply_filters'woocommerce_admin_sales_record_milestone_enabled'true );

        if ( ! 
$sales_record_notes_enabled ) {
            return;
        }

        
$yesterday gmdate'Y-m-d'current_time'timestamp') - DAY_IN_SECONDS );
        
$total     self::sum_sales_for_date$yesterday );

        
// No sales yesterday? Bail.
        
if ( >= $total ) {
            return;
        }

        
$record_date get_optionself::RECORD_DATE_OPTION_KEY'' );
        
$record_amt  floatvalget_optionself::RECORD_AMOUNT_OPTION_KEY) );

        
// No previous entry? Just enter what we have and return without generating a note.
        
if ( empty( $record_date ) ) {
            
update_optionself::RECORD_DATE_OPTION_KEY$yesterday );
            
update_optionself::RECORD_AMOUNT_OPTION_KEY$total );
                return;
        }

        
// Otherwise, if yesterdays total bested the record, update AND generate a note.
        
if ( $total $record_amt ) {
            
update_optionself::RECORD_DATE_OPTION_KEY$yesterday );
            
update_optionself::RECORD_AMOUNT_OPTION_KEY$total );

            
// We only want one sales record note at any time in the inbox, so we delete any other first.
            
Notes::delete_notes_with_nameself::NOTE_NAME );

            
$note self::get_note_with_record_data$record_date$record_amt$yesterday$total );
            
$note->save();
        }
    }

    
/**
     * Get the note with record data.
     *
     * @param string $record_date record date Y-m-d.
     * @param float  $record_amt record amount.
     * @param string $yesterday yesterday's date Y-m-d.
     * @param string $total total sales for yesterday.
     *
     * @return Note
     */
    
public static function get_note_with_record_data$record_date$record_amt$yesterday$total ) {
        
// Use F jS (March 7th) format for English speaking countries.
        
if ( substrget_user_locale(), 0) === 'en' ) {
            
$date_format 'F jS';
        } else {
            
// otherwise, fallback to the system date format.
            
$date_format get_option'date_format' );
        }

        
$formatted_yesterday   date_i18n$date_formatstrtotime$yesterday ) );
        
$formatted_total       html_entity_decodewp_strip_all_tagswc_price$total ) ) );
        
$formatted_record_date date_i18n$date_formatstrtotime$record_date ) );
        
$formatted_record_amt  html_entity_decodewp_strip_all_tagswc_price$record_amt ) ) );

        
$content sprintf(
            
/* translators: 1 and 4: Date (e.g. October 16th), 2 and 3: Amount (e.g. $160.00) */
            
__'Woohoo, %1$s was your record day for sales! Net sales was %2$s beating the previous record of %3$s set on %4$s.''woocommerce' ),
            
$formatted_yesterday,
            
$formatted_total,
            
$formatted_record_amt,
            
$formatted_record_date
        
);

        
$content_data = (object) array(
            
'old_record_date' => $record_date,
            
'old_record_amt'  => $record_amt,
            
'new_record_date' => $yesterday,
            
'new_record_amt'  => $total,
        );

        
$report_url '?page=wc-admin&path=/analytics/revenue&period=custom&compare=previous_year&after=' $yesterday '&before=' $yesterday;

        
// And now, create our new note.
        
$note = new Note();
        
$note->set_title__'New sales record!''woocommerce' ) );
        
$note->set_content$content );
        
$note->set_content_data$content_data );
        
$note->set_typeNote::E_WC_ADMIN_NOTE_INFORMATIONAL );
        
$note->set_nameself::NOTE_NAME );
        
$note->set_source'woocommerce-admin' );
        
$note->add_action'view-report'__'View report''woocommerce' ), $report_url );

        return 
$note;
    }

    
/**
     * Get the note. This is used for localizing the note.
     *
     * @return Note
     */
    
public static function get_note() {
        
$note Notes::get_note_by_nameself::NOTE_NAME );
        if ( ! 
$note ) {
            return 
false;
        }
        
$content_data $note->get_content_data();
        return 
self::get_note_with_record_data(
            
$content_data->old_record_date,
            
$content_data->old_record_amt,
            
$content_data->new_record_date,
            
$content_data->new_record_amt
        
);
    }
}