intensesoftware / hezarfen-for-woocommerce

Hezarfen; WooCommerce eklentisini, Türkiye'de daha kullanılabilir kılmayı amaçlar.
7 stars 1 forks source link

T.C. kimlik no bilgisi encrypt edilerek kaydedildiği için harici servislerin bu bilgiye erişememesi problemi #23

Open mskapusuz opened 2 years ago

mskapusuz commented 2 years ago

Şu anda, TC kimlik no bilgisini postmetalara encrypt ederek yazıyoruz ve bu nedenle harici uygulamalar bu veriyi decrypt edemiyorlar.

Şu anda faturayla ilgili 3 alanımız var, bunlar: _billing_hez_TC_number (sadece billing_hez_invoice_type person olduğunda) _billing_hez_tax_number (sadece billing_hez_invoice_type company olduğunda) _billing_hez_tax_office (sadece billing_hez_invoice_type company olduğunda)

Özet olarak, iki temel problemimiz var:

Olası çözüm:

Sanal postmetalar oluşturmak (get_post_metadata filtresiyle get_post_meta davranışını manipule ederek)

Toplamda iki sanal meta oluştabiliriz:

Sanal post meta key 1: _billing_hez_tax_number (Eğer kurumsal seçildiyse vergi no, bireysel seçildiyse TC no bilgisi döner.) Sanal post meta key 2: _billing_hez_tax_office

_billing_hez_tax_number için örnek:

add_filter( 'get_post_metadata', function($value, $object_id, $meta_key, $single){
    if( $meta_key !== '_billing_hez_tax_number' ) {
        return $value;
    }

    // TODO: add a check regarding billing_hez_invoice_type, if billing_hez_invoice_type is company return _billing_hez_tax_number

    $TC = get_post_meta( $object_id, '_billing_hez_TC_number', true );

    $TC_decrypted = ( new \Hezarfen\Inc\Data\PostMetaEncryption() )->decrypt(
        $TC
    );

    return $TC_decrypted;
}, 10, 4 );

ancak bunu geliştirmeden önce, biraz araştırma yapmamız gerek:

mucahidbal commented 2 years ago

@mskapusuz bey, Muhasebe programlarıyla ilgili biraz araştırma yaptım, Paraşüt ve Dia haricinde api dökümanına ulaşabildiğim bir program olmadı.

  • [ ] Bu yaklaşım ile birçok fatura eklentisine kolayca entegre olabiliyor muyuz? Yoksa TC ve vergi no alanları için ayrı field'ların oluşturulması bazı noktalarda daha mı mantıklı?

Birkaç tane fatura eklentisi denedim: Challan – PDF Invoice & Packing Slip for WooCommerce: Custom order meta desteği var. Listeden meta keyleri seçebiliyorsun. Sanal meta key filtrelenirse bu listeden seçilemeyecektir.

WooCommerce PDF Invoices, Packing Slips, Delivery Notes and Shipping Labels: Custom order meta desteği var. Bedava versiyonda wf_pklist_alter_additional_fields filtresiyle faturaya order meta eklenebiliyor. Pro versiyonunda order metalar listeden seçilebiliyor. Sanal meta key filtrelenirse bu listeden seçilemeyecektir.

WooCommerce PDF Invoice Builder: Pro versiyonunda custom order meta desteği var. Custom meta eklemek için eklenti içerisindeki editörde küçük kodlar yazıyorsunuz (örnek: return get_post_meta($order->id, '_custom_meta_key')). Sanal meta filtrelense bile kullanılabilir.

Sonuç olarak, eğer fatura eklentisi meta keyleri bir liste halinde veriyorsa ve listeden seçilmek zorundaysa filtreyle değiştirilmiş sanal metalar kullanılamayacaktır.

  • [ ] Sanal meta key oluşturmamızın doğabilecek yan etkileri (WP ekosisteminde sanal meta key oluşturmakla hiç karşılaşmadım.)

Sanal meta key oluşturmamızın bir yan etkisi olacağını sanmıyorum, bence güzel bir fikir.

  • [ ] Sanal meta keylere filtre eklemekten vazgeçebiliriz (sadece sabit olarak _billing_hez_tax_number ve _billing_hez_tax_office yapabiliriz sanal meta keyleri), kullanıcıların sistemde var olan bir post meta keyi override etmesi olası, bu nedenle biraz riskli bir işlem bu.

Evet biraz riskli, ama varolan bir metayı override etme ihtimalleri bence baya düşük.


Sonuç olarak bence;

Bunlar benim fikirlerim sizin de fikirlerinizle bir sonuca ulaşırız.

emirefek commented 2 years ago

Selamlar, php hakkında pek bilgim olmadığı için nasıl yapılacağını beceremedim. WooCommerce PDF Invoices, Packing Slips, Delivery Notes and Shipping Labels, eklentisini yükledim ama entegre edemedim TC,VKN verilerini. Acaba dökümantasyon benzeri bir şey yayınlamanız mümkün mü?